⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rest_setroi.m

📁 While resting-state fMRI is drawing more and more attention, there has not been a software for its d
💻 M
📖 第 1 页 / 共 2 页
字号:
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 + -