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

📄 analyzemovie.m

📁 mri_toolbox是一个工具用来MRI. 来自于SourceForge, 我上传这个软件,希望能结识对医疗软件感兴趣的兄弟.
💻 M
字号:
function AnalyzeMovie

% AnalyzeMovie - Save analyze images to a kine-loop AVI
% 
% Options are the size of the movie and the views.
% 


% NOTE ON UNIX THERE IS NO OPTION TO COMPRESS, SO THE
% FILES GET REALLY BIG!!!
%
% I'll work on compression for a windows version - maybe.
% 

% $Revision: 1.6 $ $Date: 2004/02/07 01:41:51 $

% Licence:  GNU GPL, no express or implied warranties
% 10/2002, Robert C. Welsh <rcwelsh@umich.edu>
%          University of Michigan, Radiology
% 02/2003, Darren.Weber@flinders.edu.au
%          - attempt to adapt for mri_toolbox, rather than
%            depend on spm
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


SCCSid  = '0.5';

global BCH; %- used as a flag to know if we are in batch mode or not.

%-GUI setup
%-----------------------------------------------------------------------

SPMid = spm('FnBanner',mfilename,SCCSid);
[Finter,Fgraph,CmdLine] = spm('FnUIsetup','Analyze Movie Maker',0);
fprintf('AnalyzeMovie Toolbox 0.5\n');

spm('FigName','Analyze Image Movie Maker',Finter,CmdLine);
% get the name of the rois file.

movieSize = spm_input_ui('Movie size?','+1','m',...
			  ['Small (200x200)|', ...
		           'Medium (300x300)|', ...
		           'Large (400x400)|'],[1 2 3],1);

imageView = spm_input_ui('Image View?','+1','m',...
			  ['Axial|', ...
		           'Coronal|', ...
		           'Sagitall|All'],[1 2 3 4],1);

pixSize = [200 300 400];

movieType= ['a' 'c' 's' 'o'];

% smoothing parameters
nMovies = spm_input('Number of movies','+1','i','1',1,[0,Inf]);

if nMovies < 1
  spm('alert','Exiting as you requested.','AnalyzeMovie',[],0);
  return
end


% change this...
spmImgFiles = {};


for iMovie = 1:nMovies,
    
    % change this...
    spmImgFiles{iMovie}  = spm_get([0,Inf],'*.img',sprintf(['Pick' ...
            ' Image files for movie %d'],iMovie),'./',0);
    if (length(spmImgFiles{iMovie})< 2)
        spm('alert','Exiting as you requested.','AnalyzeMovie',[],0);
        return
    end
    
end

% Now extract the files.


figMovie=figure;
close(figMovie);
figMovie=figure(figMovie);
set(figMovie,'visible','off');
set(figMovie,'DoubleBuffer','on');
set(figMovie,'color',[0 0 0]);
curPos = get(figMovie,'Position');
set(figMovie,'Position',[curPos(1) curPos(2) pixSize(movieSize) pixSize(movieSize)]);
for iMovie = 1:nMovies,
    [movieDir movieName] = fileparts(spmImgFiles{iMovie}(1,:));
    newMovieName = fullfile(movieDir,['kine-loop-' ...
            movieType(imageView:imageView) '.avi']);
    theMovie = avifile(newMovieName);
    
    
    % change this...
    spm_progress_bar('Init',size(spmImgFiles{iMovie},1),sprintf(['Movie #' ...
            ' %d of %d'],iMovie,nMovies),'Extracting data');
    
    
    
    % change spmImgFiles...
    for iFile = 1:size(spmImgFiles{iMovie},1),
        
        spm_progress_bar('Set',iFile);
        
        
        % change this...
        volHdr = spm_vol(spmImgFiles{iMovie}(iFile,:));
        
        
        slices = movieView(volHdr);
        %aVol = spm_read_vols(spm_vol(spmImgFiles{iMovie}(iFile,:)));
        %[nX nY nZ] = size(aVol);
        %midX = floor(nX/2);
        %midY = floor(nY/2);
        %midZ = floor(nZ/2);
        switch imageView
        case 1
            aSlice = slices.aS;
            %aSlice = squeeze(aVol(:,:,midZ));
        case 2
            aSlice = rot90(slices.cS,1);
            %aSlice = squeeze(aVol(:,midY,:));
        case 3
            aSlice = rot90(slices.sS,1);
            %aSlice = squeeze(aVol(midX,:,:));
        case 4 
            aSlice = slices.ortho;
        end
        aSlice = aSlice/max(max(max(aSlice)));
        aSlice = aSlice*256;
        image(aSlice);
        axis image;
        colormap(gray(256));
        curFrame = getframe(gca);
        theMovie = addframe(theMovie,curFrame);
    end
    theMovie=close(theMovie);
end

% Change this...
spm_progress_bar('Clear');
spm_clf(Finter);
spm('FigName','Finished',Finter,CmdLine);
spm('Pointer','Arrow');



close(figMovie);

fprintf('\nFinished  making movie : %s\n',newMovieName);

return






%-----------------------------------------------------------

function results = movieView(vHdr)

% A macro to build the views (based on spm_orthoviews)
%
% Robert C. Welsh <rcwelsh@umich.edu>
% Radiology, University of Michigan
%
% 2002.10.29, Version 0.1

bb = [-78 -112 -50; 78 76 85];
Dims = diff(bb)'+1;

TM0 = [ 1 0 0 -bb(1,1)+1;...
	0 1 0 -bb(1,2)+1;...
	0 0 1 0;...
	0 0 0 1];
CM0 = [ 1 0 0 -bb(1,1)+1;...
	0 0 1 -bb(1,3)+1;...
	0 1 1 0;...
	0 0 0 1];
SM0 = [ 0 -1 0 -bb(1,2)+1;...
	0 0 1 -bb(1,3)+1;...
	1 0 0 0;...
	0 0 0 1];

TD = [Dims(1) Dims(2)];
CD = [Dims(1) Dims(3)];
SD = [Dims(2) Dims(3)];

notSure = [1 0 0 0; 0 1 0 0 ; 0 0 1 0; 0 0 0 1];

TM = inv(TM0*(notSure\vHdr.mat));
CM = inv(CM0*(notSure\vHdr.mat));
SM = inv(SM0*(notSure\vHdr.mat));


%
% Change this...
axialSlice = spm_slice_vol(vHdr,TM,TD,0);
coronalSlice = spm_slice_vol(vHdr,CM,CD,0);
sagittalSlice = spm_slice_vol(vHdr,SM,SD,0);



results.aS = axialSlice;
results.cS = coronalSlice;
results.sS = sagittalSlice;

bigPix = zeros(Dims(2)+Dims(3),Dims(1)+Dims(2));

bigPix(1:Dims(2),1:Dims(1)) = rot90(axialSlice,1);
bigPix(Dims(2)+1:Dims(2)+Dims(3),1:Dims(1)) = rot90(coronalSlice);
bigPix(Dims(2)+1:Dims(2)+Dims(3),Dims(1)+1:Dims(1)+Dims(2)) = ...
    rot90(sagittalSlice);

results.ortho=bigPix;

return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -