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

📄 rest_sliceviewer.m

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