📄 rest_sliceviewer.m
字号:
if theCardinal>0,
REST_SliceViewer_Cfg.Config(theCardinal) =SetImage(REST_SliceViewer_Cfg.Config(theCardinal));
end;
case 'MNI/TALAIRACH', %MNI/Talairach
if nargin~=2, error('Usage: rest_sliceviewer(''Repaint'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
Transforming_MNI_Talairach(REST_SliceViewer_Cfg.Config(theCardinal));
rest_sliceviewer('SetPosition', AFigHandle);
end;
case 'CHANGEUNDERLAY', %ChangeUnderlay
if nargin~=2, error('Usage: rest_sliceviewer(''ChangeUnderlay'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
%Get the changed Underlay file
theNewUnderlay =get(REST_SliceViewer_Cfg.Config(theCardinal).hUnderlayFile, 'String');
% if exist(theNewUnderlay,'file')==2,
% if ~all(isspace(theNewUnderlay)), %20070918
%Set the current underlay
REST_SliceViewer_Cfg.Config(theCardinal).Filename =theNewUnderlay;
REST_SliceViewer_Cfg.Config(theCardinal) =InitUnderlay(REST_SliceViewer_Cfg.Config(theCardinal));
REST_SliceViewer_Cfg.Config(theCardinal) =SetImage(REST_SliceViewer_Cfg.Config(theCardinal));
set(REST_SliceViewer_Cfg.Config(theCardinal).hUnderlayFile, 'String', theNewUnderlay, 'TooltipString', theNewUnderlay);
% end
end;
case 'UNDERLAYSELECTION', %UnderlaySelection
if nargin~=2, error('Usage: rest_sliceviewer(''UnderlaySelection'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
[filename, pathname] = uigetfile({'*.img', 'ANALYZE files (*.img)'}, ...
'Pick one brain map');
if any(filename~=0) && ischar(filename) && length(filename)>4 , % not canceled and legal
if ~strcmpi(pathname(end), filesep)%revise pathname to add \ or /
pathname = [pathname filesep];
end
theBrainMap =[pathname filename];
set(REST_SliceViewer_Cfg.Config(theCardinal).hUnderlayFile, 'String', theBrainMap);
rest_sliceviewer('ChangeUnderlay', AFigHandle);
end
end;
case 'CLICKRECENTUNDERLAY', %ClickRecentUnderlay
if nargin~=2, error('Usage: rest_sliceviewer(''ClickRecentUnderlay'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
theIndex =get(REST_SliceViewer_Cfg.Config(theCardinal).hUnderlayRecent, 'Value');
if theIndex>1,
theBrainMap =REST_SliceViewer_Cfg.Config(theCardinal).Recent.Underlay{theIndex-1};
set(REST_SliceViewer_Cfg.Config(theCardinal).hUnderlayFile, 'String', theBrainMap);
set(REST_SliceViewer_Cfg.Config(theCardinal).hUnderlayRecent, 'Value', 1);
rest_sliceviewer('ChangeUnderlay', AFigHandle);
end
end;
case 'CHANGEOVERLAY', %ChangeOverlay
if nargin~=2, error('Usage: rest_sliceviewer(''ChangeOverlay'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
%Get the changed Overlay file
theNewOverlay =get(REST_SliceViewer_Cfg.Config(theCardinal).hOverlayFile, 'String');
% if exist(theNewOverlay,'file')==2,
% if ~all(isspace(theNewOverlay)),
%Set the current Overlay
REST_SliceViewer_Cfg.Config(theCardinal) =LoadOverlay(REST_SliceViewer_Cfg.Config(theCardinal), theNewOverlay);
set(REST_SliceViewer_Cfg.Config(theCardinal).hSeeOverlay, 'Value', 1);
REST_SliceViewer_Cfg.Config(theCardinal) =SetImage(REST_SliceViewer_Cfg.Config(theCardinal));
set(REST_SliceViewer_Cfg.Config(theCardinal).hOverlayFile, 'String', theNewOverlay, 'TooltipString', theNewOverlay);
% end
end;
case 'OVERLAYSELECTION', %OverlaySelection
if nargin~=2, error('Usage: rest_sliceviewer(''UnderlaySelection'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
[filename, pathname] = uigetfile({'*.img', 'ANALYZE files (*.img)'}, ...
'Pick one brain map');
if any(filename~=0) && ischar(filename) && length(filename)>4 , % not canceled and legal
if ~strcmpi(pathname(end), filesep)%revise pathname to add \ or /
pathname = [pathname filesep];
end
theBrainMap =[pathname filename];
set(REST_SliceViewer_Cfg.Config(theCardinal).hOverlayFile, 'String', theBrainMap);
rest_sliceviewer('ChangeOverlay', AFigHandle);
end
end;
case 'CLICKRECENTOVERLAY', %ClickRecentOverlay
if nargin~=2, error('Usage: rest_sliceviewer(''ClickRecentOverlay'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
theIndex =get(REST_SliceViewer_Cfg.Config(theCardinal).hOverlayRecent, 'Value');
if theIndex>1,
theBrainMap =REST_SliceViewer_Cfg.Config(theCardinal).Recent.Overlay{theIndex-1};
set(REST_SliceViewer_Cfg.Config(theCardinal).hOverlayFile, 'String', theBrainMap);
set(REST_SliceViewer_Cfg.Config(theCardinal).hOverlayRecent, 'Value', 1);
rest_sliceviewer('ChangeOverlay', AFigHandle);
end
end;
case 'OVERLAY_SETTHRDABSVALUE', %Overlay_SetThrdAbsValue, %Change from the Absolute value Edit control
if nargin~=2, error('Usage: rest_sliceviewer(''Overlay_SetThrdAbsValue'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
REST_SliceViewer_Cfg.Config(theCardinal).Overlay.ValueThrdAbsolute =SetThrdAbsValue(REST_SliceViewer_Cfg.Config(theCardinal));
REST_SliceViewer_Cfg.Config(theCardinal) =ThresholdOverlayVolume(REST_SliceViewer_Cfg.Config(theCardinal));
REST_SliceViewer_Cfg.Config(theCardinal) =SetImage(REST_SliceViewer_Cfg.Config(theCardinal));
end
case 'OVERLAY_SETTHRDCLUSTERSIZE', %Overlay_SetThrdClusterSize
if nargin~=2, error('Usage: rest_sliceviewer(''Overlay_SetThrdClusterSize'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
theConfig =REST_SliceViewer_Cfg.Config(theCardinal);
prompt ={'Set Cluster Size(voxel) must be GREATER than: ', 'Set Cluster Raidus(mm) must be GREATER than: (this value would be transformed to Cluster Size according to the Overlay''s size and its voxel''s size)'};
def ={num2str(theConfig.Overlay.ClusterSizeThrd) ,...
num2str(theConfig.Overlay.ClusterRadiusThrd)};
answer =inputdlg(prompt, 'Threshold by cluster size ', 1, def);
if numel(answer)==2,
theVal =abs(str2num(answer{1}));
theConfig.Overlay.ClusterSizeThrd =round(theVal);
theVal =abs(str2num(answer{2}));
theConfig.Overlay.ClusterRadiusThrd =round(theVal);
REST_SliceViewer_Cfg.Config(theCardinal) =theConfig;
REST_SliceViewer_Cfg.Config(theCardinal) =ThresholdOverlayVolume(REST_SliceViewer_Cfg.Config(theCardinal));
REST_SliceViewer_Cfg.Config(theCardinal) =SetImage(REST_SliceViewer_Cfg.Config(theCardinal));
end
end
case 'OVERLAY_MISC', %Overlay_Misc
if nargin~=2, error('Usage: rest_sliceviewer(''Overlay_Misc'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
REST_SliceViewer_Cfg.Config(theCardinal) =Overlay_Misc(REST_SliceViewer_Cfg.Config(theCardinal));
rest_sliceviewer('Repaint', AFigHandle);
end
case 'OPEN_TEMPLATE', %Open_Template
if nargin~=2, error('Usage: rest_sliceviewer(''Overlay_Misc'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
REST_SliceViewer_Cfg.Config(theCardinal) =Open_Template(REST_SliceViewer_Cfg.Config(theCardinal));
rest_sliceviewer('Repaint', AFigHandle);
end
case 'CURRENTCLUSTER2MASK', %CurrentCluster2Mask
if nargin~=2, error('Usage: rest_sliceviewer(''CurrentCluster2Mask'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
theConfig =REST_SliceViewer_Cfg.Config(theCardinal);
theMask =CurrentCluster2Mask(REST_SliceViewer_Cfg.Config(theCardinal));
if ~isempty(theMask),
[filename, pathname] = uiputfile('*.img','Save current point''s cluster: ');
if isequal(filename,0) | isequal(pathname,0),
else
if length(filename)>4,
if strcmpi(filename(end-3:end), '.img')
filename = filename(1:end-4);
end
end
theMaskFile =fullfile(pathname, filename);
rest_writefile(theMask, theMaskFile, size(theConfig.Overlay.Volume), ...
theConfig.Overlay.VoxelSize, theConfig.Overlay.Origin,'int16');
theConfig.LastSavedMask =[theMaskFile ,'.img'];
if ~isempty(theConfig.Callback.Save2Mask),
eval(theConfig.Callback.Save2Mask);
end
end
rest_sliceviewer('Repaint', AFigHandle);
else
errordlg(sprintf('No cluster found at (%s)', ...
num2str(Pos_Underlay2Overlay(theConfig, theConfig.LastPosition) -theConfig.Overlay.Origin)));
end
REST_SliceViewer_Cfg.Config(theCardinal) =theConfig;
end
case 'SAVERECENT', %SaveRecent
if nargin~=2, error('Usage: rest_sliceviewer(''SaveRecent'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
SaveRecent(REST_SliceViewer_Cfg.Config(theCardinal), 'RecentOverlay');
SaveRecent(REST_SliceViewer_Cfg.Config(theCardinal), 'RecentUnderlay');
end
case 'CHANGECOLORELEMENT', %ChangeColorElement
if nargin~=2, error('Usage: rest_sliceviewer(''ChangeColorElement'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
REST_SliceViewer_Cfg.Config(theCardinal) =SetColorElements(REST_SliceViewer_Cfg.Config(theCardinal));
REST_SliceViewer_Cfg.Config(theCardinal) =SetImage(REST_SliceViewer_Cfg.Config(theCardinal));
end
case 'TOGGLEINFODISPLAY', %ToggleInfoDisplay
if nargin~=2, error('Usage: rest_sliceviewer(''ToggleInfoDisplay'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
ToggleInfoDisplay(REST_SliceViewer_Cfg.Config(theCardinal));
end
case 'UPDATECALLBACK_SAVE2MASK', %UpdateCallback_Save2Mask
if nargin~=3, error('Usage: rest_sliceviewer(''UpdateCallback_Save2Mask'', AFigHandle, ACallback);'); end
AFigHandle =varargin{1};
ACallback =varargin{2};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
REST_SliceViewer_Cfg.Config(theCardinal).Callback.Save2Mask =ACallback;
end
case 'GETSAVEDMASKFILENAME', %GetSavedMaskFilename
if nargin~=2, error('Usage: rest_sliceviewer(''GetSavedMaskFilename'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
varargout{1} =REST_SliceViewer_Cfg.Config(theCardinal).LastSavedMask;
else
varargout{1} ='';
end
case 'SHOWOVERLAY', %ShowOverlay
if nargin>3, error('Usage: rest_sliceviewer(''ShowOverlay'', AOverlay); or rest_sliceviewer(''ShowOverlay'', AFigHandle, AOverlay);'); end
AFigHandle =varargin{1};
if ~ischar(AFigHandle),
AOverlay =varargin{2};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
set(REST_SliceViewer_Cfg.Config(theCardinal).hOverlayFile, 'String', AOverlay);
rest_sliceviewer('ChangeOverlay', AFigHandle);
end
else %I will create a new slice-viewer
AOverlay =varargin{1};
theFig = rest_sliceviewer; %I can't write "()" considering Matlab 6.5 compatiable
rest_sliceviewer('ShowOverlay', theFig, AOverlay);
varargout{1} =theFig;
end
case 'ONKEYPRESS', %OnKeyPress
if nargin~=2, error('Usage: rest_sliceviewer(''OnKeyPress'', AFigHandle);'); end
AFigHandle =varargin{1};
theCardinal =ExistViewer(REST_SliceViewer_Cfg, AFigHandle);
if theCardinal>0,
REST_SliceViewer_Cfg.Config(theCardinal) =OnKeyPress(REST_SliceViewer_Cfg.Config(theCardinal));
%For Updating
REST_SliceViewer_Cfg.Config(theCardinal) =SetImage(REST_SliceViewer_Cfg.Config(theCardinal));
%For Yoke
rest_sliceviewer('SetPosition', AFigHandle);
end
otherwise
end
catch
rest_misc( 'DisplayLastException');
end
function Result =InitControls(AFilename, ACallback)
%Initialization 20070525
theFig =figure('Units', 'pixel', 'Toolbar', 'none', 'MenuBar', 'none', ...
'NumberTitle', 'off', 'Name', AFilename, 'DoubleBuffer', 'on');
set(theFig, 'DeleteFcn', sprintf('rest_sliceviewer(''Delete'', %g);', theFig) );
set(theFig, 'KeyPressFcn', sprintf('rest_sliceviewer(''OnKeyPress'', %g);', theFig) );
MarginX =10; MarginY =10;
OffsetX =MarginX;
OffsetY =MarginY +200;
%Create Slice View options
%Create uicontrols to config Yoke or [X Y Z] position to set current cross-hair to locate the voxel
theLeft =OffsetX; theBottom =OffsetY;
hFrameSetPos=uicontrol(theFig, 'Style','Frame', 'Units','pixels', ...
'BackgroundColor', get(theFig,'Color'), ...
'Position', [theLeft,theBottom,150,180]);
uicontrol(theFig, 'Style','pushbutton', 'Units','pixels', ...
'String', 'Slice Viewer', ... %'BackgroundColor', get(theFig,'Color'), ...
'Callback', 'rest_sliceviewer', ...
'Position', [theLeft+35,theBottom+172,80,18]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -