📄 rest_setroi.m
字号:
function varargout=rest_SetROI(AOperation, varargin)
%Define ROI wizard by Xiao-Wei Song
%------------------------------------------------------------------------------------------------------------------------------
% Copyright(c) 2007~2010
% State Key Laboratory of Cognitive Neuroscience and Learning in Beijing Normal University
% Written by Xiao-Wei Song
% http://resting-fmri.sourceforge.net
%------------------------------------------------------------------------------------------------------------------------------
% 20070923
% <a href="Dawnwei.Song@gmail.com">Mail to Author</a>: Xiaowei Song
% Version=1.0;
% Release=20070923;
%Initializitation
persistent REST_SetROI_Cfg; % run-time persistent config
% if ~mislocked(mfilename),mlock; end
if nargin<1, AOperation='Init'; varargin{1}='';end %Revise the Start
switch upper(AOperation),
case 'INIT', %Init
REST_SetROI_Cfg =InitControls(REST_SetROI_Cfg);
if nargin>1,
AROIDefinition =varargin{1};
else
AROIDefinition ='';
end
REST_SetROI_Cfg.ROIDefinition =AROIDefinition;
if rest_SetROI( 'IsSphereROI' , AROIDefinition),
set(REST_SetROI_Cfg.hSlectSphere, 'Value', 1);
set(REST_SetROI_Cfg.hSlectNonSphere, 'Value', 0);
set(REST_SetROI_Cfg.hSlectTxt, 'Value', 0);
elseif rest_SetROI( 'IsImgROI' , AROIDefinition),
set(REST_SetROI_Cfg.hSlectSphere, 'Value', 0);
set(REST_SetROI_Cfg.hSlectNonSphere, 'Value', 1);
set(REST_SetROI_Cfg.hSlectTxt, 'Value', 0);
elseif rest_SetROI( 'IsTxtROI' , AROIDefinition),
set(REST_SetROI_Cfg.hSlectSphere, 'Value', 0);
set(REST_SetROI_Cfg.hSlectNonSphere, 'Value', 0);
set(REST_SetROI_Cfg.hSlectTxt, 'Value', 1);
else
%error or the definition is space/NaN ...
end
rest_SetROI( 'UpdateDisplay' );
uiwait(REST_SetROI_Cfg.hFig);
varargout{1} =REST_SetROI_Cfg.ROIDefinition;
case 'DELETE', %Delete
if nargin~=1, error('Usage: result =rest_SetROI( ''Delete'');'); end
uiresume(REST_SetROI_Cfg.hFig);
delete(REST_SetROI_Cfg.hFig);
case 'ISSPHEREROI', %IsSphereROI
if nargin~=2, error('Usage: result =rest_SetROI( ''IsSphereROI'' , AROIDefinition);'); end
AROIDefinition =varargin{1};
if rest_SphereROI( 'IsBallDefinition', AROIDefinition),
varargout{1}=1;
else
varargout{1}=0;
end
case {'ISIMGROI', 'ISTMAPROI','ISTEMPLATEROI', 'ISUSERROI'} %IsImgROI %IsTMapROI %IsTemplateROI %IsUserROI
if nargin~=2, error('Usage: result =rest_SetROI( ''IsImgROI'' , AROIDefinition);'); end
AROIDefinition =varargin{1};
varargout{1}=0;
if 2==exist(AROIDefinition, 'file'),
[pathstr, name, ext, versn] = fileparts(AROIDefinition);
if strcmpi(ext, '.img'),
varargout{1}=1;
end
end
case 'ISTXTROI', %IsTxtROI
if nargin~=2, error('Usage: result =rest_SetROI( ''IsTxtROI'' , AROIDefinition);'); end
AROIDefinition =varargin{1};
varargout{1}=0;
if 2==exist(AROIDefinition, 'file'),
[pathstr, name, ext, versn] = fileparts(AROIDefinition);
if strcmpi(ext, '.txt'),
varargout{1}=1;
end
end
case 'UPDATEDISPLAY', %UpdateDisplay
if nargin~=1, error('Usage: result =rest_SetROI( ''UpdateDisplay'' );'); end
UpdateDisplay(REST_SetROI_Cfg);
case 'SELECT', %Select
if nargin~=1, error('Usage: result =rest_SetROI( ''Select'' );'); end
theObj =get(REST_SetROI_Cfg.hFig, 'CurrentObject');
%Check whether the previous selected object is Sphere
if ( get(REST_SetROI_Cfg.hSlectSphere, 'Value') && theObj~=REST_SetROI_Cfg.hSlectSphere ) ...
|| (get(REST_SetROI_Cfg.hSlectNonSphere, 'Value') && theObj~=REST_SetROI_Cfg.hSlectNonSphere ) ...
|| (get(REST_SetROI_Cfg.hSlectTxt, 'Value') && theObj~=REST_SetROI_Cfg.hSlectTxt ),
%Clear the Sphere definition defined in other way
REST_SetROI_Cfg.ROIDefinition ='';
end
theRadioButtons =findobj(REST_SetROI_Cfg.hFig, 'Style', 'radiobutton');
for x=1:length(theRadioButtons),
set(theRadioButtons(x), 'Value', 0);
end
set(theObj, 'Value', 1);
if theObj ~= REST_SetROI_Cfg.hSlectSphere && theObj ~= REST_SetROI_Cfg.hSlectTxt,
set(REST_SetROI_Cfg.hSlectNonSphere, 'Value', 1);
end
UpdateDisplay(REST_SetROI_Cfg);
case 'NEXT', %Next
if nargin~=1, error('Usage: result =rest_SetROI( ''Next'' );'); end
set(REST_SetROI_Cfg.hNext, 'Enable', 'off', 'ForegroundColor', 'red');
try
if get(REST_SetROI_Cfg.hSlectSphere, 'Value'),
REST_SetROI_Cfg.ROIDefinition =rest_SphereROI('Init', REST_SetROI_Cfg.ROIDefinition);
elseif get(REST_SetROI_Cfg.hSlectNonSphere, 'Value'),
isNeedDefineCluster =true;
if get(REST_SetROI_Cfg.hFromTMap, 'Value'),
[filename, pathname] = uigetfile({'*.img', 'ANALYZE files (*.img)'},'Pick the statistical t-map');
elseif get(REST_SetROI_Cfg.hFromAAL, 'Value'),
pathname =fullfile(rest_misc( 'WhereIsREST'),'Template');
filename ='aal.img';
elseif get(REST_SetROI_Cfg.hFromBrodmann, 'Value'),
pathname =fullfile(rest_misc( 'WhereIsREST'),'Template');
filename ='brodmann.img';
elseif get(REST_SetROI_Cfg.hFromUserDefinedMask, 'Value'),
[filename, pathname] = uigetfile({'*.img', 'ANALYZE files (*.img)'},'Pick the user defined mask file(ANALYZE FORMAT)');
REST_SetROI_Cfg.ROIDefinition =fullfile(pathname, filename);
isNeedDefineCluster =false;
else
warndlg('You must select one option');
end
if isNeedDefineCluster && any(filename~=0) && ischar(filename), % not canceled and legal
theFig =rest_sliceviewer('ShowOverlay', fullfile(pathname, filename));
theCallback =sprintf(['uiresume(%f);'], theFig);
rest_sliceviewer('UpdateCallback_Save2Mask', theFig, theCallback);
set(theFig, 'WindowStyle', 'modal');
uiwait(theFig);
REST_SetROI_Cfg.ROIDefinition =rest_sliceviewer('GetSavedMaskFilename', theFig);
rest_sliceviewer('Delete', theFig);
end
elseif get(REST_SetROI_Cfg.hSlectTxt, 'Value'),
[filename, pathname] = uigetfile({'*.txt', 'User defined time courses (*.txt)'},'Pick the user defined txt file(One column is a time course)');
REST_SetROI_Cfg.ROIDefinition =fullfile(pathname, filename);
end
catch
rest_misc('DisplayLastException');
end
UpdateDisplay(REST_SetROI_Cfg);
case 'UPDATEROIDEFINITION', %UpdateROIDefinition
if nargin~=2, error('Usage: result =rest_SetROI( ''UpdateROIDefinition'' , AROIDefinition);'); end
REST_SetROI_Cfg.ROIDefinition =varargin{1};
case 'MANUALYCHANGEROIDEFINITIONINEDIT', %ManualyChangeROIDefinitionInEdit
if nargin~=1, error('Usage: result =rest_SetROI( ''ManualyChangeROIDefinitionInEdit'');'); end
REST_SetROI_Cfg.ROIDefinition =get(gcbo, 'String');
case 'VIEWROI', %ViewROI
if nargin~=1, error('Usage: rest_SetROI( ''ViewROI'');'); end
if isempty(REST_SetROI_Cfg.ROIDefinition) || all(isspace(REST_SetROI_Cfg.ROIDefinition)),
warndlg('No ROI defined yet!');
else
rest_misc( 'ViewROI', REST_SetROI_Cfg.ROIDefinition);
end
otherwise,
end
function Result =InitControls(AConfig)
theFig =figure('Units', 'pixel', 'Toolbar', 'none', 'MenuBar', 'none', ...
'CloseRequestFcn', sprintf('rest_SetROI(''Delete'');'), ...
'Resize', 'off', ...
'NumberTitle', 'off', 'Name', 'ROI (Region of interest) Definition');
thePos =get(theFig, 'Position');
set(theFig, 'Position', [thePos(1) thePos(2) 400 400],'WindowStyle', 'modal');
movegui(theFig, 'center');
set(theFig, 'DeleteFcn', sprintf('rest_SetROI(''Delete'');') );
AConfig.hFig =theFig;
MarginX =10; MarginY =10;
OffsetX =MarginX;
OffsetY =MarginY +25 +MarginY;
theLeft =OffsetX; theBottom =OffsetY;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -