Home > vbmeg > external > bioelectromagnetism > avw_view_ras.m

avw_view_ras

PURPOSE ^

avw_view - create and navigate ortho views of Analyze 7.5 volume

SYNOPSIS ^

function [ varargout ] = avw_view_ras(avw,parent,command),

DESCRIPTION ^

 avw_view - create and navigate ortho views of Analyze 7.5 volume
 
 [ avw ] = avw_view_ras([avw], [parent], [command])
 
 avw - a struct, created by avw_read; if omitted, a gui file locator will
 prompt for a .hdr file.
 
 parent  - an optional handle to the gui that calls this gui, useful for
 updating the UserData field of the parent. The avw structure may be
 returned to the parent, if possible.
 
 command - an optional string, such as 'init' or various callback
 commands, 'init' is the default.
 
 The navigation is by sliders, mouse clicks and arrow keys.  Right mouse
 clicks on any ortho-view will show a command menu, for simple block
 region of interest (ROI) calculations, image zoom, and save image.  The
 ROI calculations are returned into avw.stats.
 
 Fiducial points can be selected, which are returned into 'avw.fiducials'
 in the base workspace. These points are given in several coordinate
 frameworks (voxels, mm, and meters), with values given relative to an
 origin located at the "center" of the MRI volume (see avw_center, which
 returns abs and corner values, abs used here).
 
 The AC location can be selected and the values are returned into 'avw.ac'
 in the base workspace. These points are given in voxels, mm & meters; for
 the latter, the values are given as offsets from the "center" of the MRI
 volume (see avw_center).
 
 +X is right (R), +Y is anterior (A), +Z is superior (S), the default RAS
 orientation of the Analyze 7.5 format.  The coordinate system is right
 handed.  

 Example of loading and viewing the SPM T1 template:
 avw = avw_read('T1')
 avw = avw_view_ras(avw);
 
 Similarly, just 'avw_view_ras' can be typed at the command prompt and you can
 use the gui file locator to select any .hdr file.

 See also, avw_read, avw_img_read, avw_hdr_read

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function [ varargout ] = avw_view_ras(avw,parent,command),
0002 
0003 % avw_view - create and navigate ortho views of Analyze 7.5 volume
0004 %
0005 % [ avw ] = avw_view_ras([avw], [parent], [command])
0006 %
0007 % avw - a struct, created by avw_read; if omitted, a gui file locator will
0008 % prompt for a .hdr file.
0009 %
0010 % parent  - an optional handle to the gui that calls this gui, useful for
0011 % updating the UserData field of the parent. The avw structure may be
0012 % returned to the parent, if possible.
0013 %
0014 % command - an optional string, such as 'init' or various callback
0015 % commands, 'init' is the default.
0016 %
0017 % The navigation is by sliders, mouse clicks and arrow keys.  Right mouse
0018 % clicks on any ortho-view will show a command menu, for simple block
0019 % region of interest (ROI) calculations, image zoom, and save image.  The
0020 % ROI calculations are returned into avw.stats.
0021 %
0022 % Fiducial points can be selected, which are returned into 'avw.fiducials'
0023 % in the base workspace. These points are given in several coordinate
0024 % frameworks (voxels, mm, and meters), with values given relative to an
0025 % origin located at the "center" of the MRI volume (see avw_center, which
0026 % returns abs and corner values, abs used here).
0027 %
0028 % The AC location can be selected and the values are returned into 'avw.ac'
0029 % in the base workspace. These points are given in voxels, mm & meters; for
0030 % the latter, the values are given as offsets from the "center" of the MRI
0031 % volume (see avw_center).
0032 %
0033 % +X is right (R), +Y is anterior (A), +Z is superior (S), the default RAS
0034 % orientation of the Analyze 7.5 format.  The coordinate system is right
0035 % handed.
0036 %
0037 % Example of loading and viewing the SPM T1 template:
0038 % avw = avw_read('T1')
0039 % avw = avw_view_ras(avw);
0040 %
0041 % Similarly, just 'avw_view_ras' can be typed at the command prompt and you can
0042 % use the gui file locator to select any .hdr file.
0043 %
0044 % See also, avw_read, avw_img_read, avw_hdr_read
0045 %
0046 
0047 % $Revision: 2025 $ $Date:: 2021-09-01 11:56:46 +0900#$
0048 
0049 % Licence:  GNU GPL, no express or implied warranties
0050 % History:  change display coordinate from radiological(LAS) to neurological.
0051 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0052 
0053 if ~isempty(gcbf),
0054     AVWVIEW = get(gcbf,'Userdata');
0055 end
0056 
0057 if ~exist('command','var'), command = 'init'; end
0058 
0059 command = lower(command);
0060 
0061 % Check for specific keys and assign command
0062 if strcmp(command, 'keypress'),
0063   
0064   cc = get(AVWVIEW.gui,'CurrentCharacter');
0065   cc = double(cc);
0066   if cc,
0067     switch cc,
0068 %      case 27, command = 'quit';  % ESC
0069       case 28, command = 'left';  % left
0070       case 29, command = 'right'; % right
0071       case 30, command = 'up';    % up
0072       case 31, command = 'down';  % down
0073       case 127, command = 'left'; 
0074       otherwise, return;  % all other keys
0075     end
0076   end
0077 end
0078 
0079 switch command,
0080     
0081   case 'init',
0082     
0083     if ~exist('avw','var'),
0084       avw = avw_read_ras;% modified by Masa-aki Sato
0085     end
0086     
0087     if nargin == 0,
0088       AVWVIEW = init(avw);
0089     elseif isempty(inputname(1)),
0090       AVWVIEW = init(avw);
0091     else
0092       AVWVIEW = init(avw,inputname(1));
0093     end
0094     
0095     AVWVIEW = set_coordinates(AVWVIEW);
0096     AVWVIEW = set_crosshairs(AVWVIEW);
0097 
0098 
0099     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0100     
0101   case 'coordinates',
0102     
0103     AVWVIEW = set_coordinates(AVWVIEW);
0104     
0105     
0106     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0107     
0108   case 'crosshairs',
0109     
0110     AVWVIEW = set_crosshairs(AVWVIEW);
0111     
0112     
0113   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0114   
0115   case {'axial_image','coronal_image','sagittal_image'},
0116     
0117     switch command,
0118       case 'axial_image',    AVWVIEW.view = 'axi'; axi_update = 0; cor_update = 1; sag_update = 1;
0119       case 'coronal_image',  AVWVIEW.view = 'cor'; axi_update = 1; cor_update = 0; sag_update = 1;
0120       case 'sagittal_image', AVWVIEW.view = 'sag'; axi_update = 1; cor_update = 1; sag_update = 0;
0121     end
0122     
0123     AVWVIEW = get_current_position(AVWVIEW);
0124     
0125     if axi_update,
0126         axial_update(AVWVIEW);
0127     end
0128     if cor_update,
0129         coronal_update(AVWVIEW);
0130     end;
0131     if sag_update,
0132         sagittal_update(AVWVIEW);
0133     end;
0134     
0135     set_display_values(AVWVIEW);
0136     
0137     AVWVIEW = set_crosshairs(AVWVIEW);
0138     
0139     
0140     
0141     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0142     
0143   case {'axial_slider','coronal_slider','sagittal_slider'},
0144     
0145     switch command,
0146       
0147       case 'axial_slider',
0148         AVWVIEW.view = 'axi';
0149         AVWVIEW = get_slider_position(AVWVIEW);
0150         axial_update(AVWVIEW);
0151         
0152       case 'coronal_slider',
0153         AVWVIEW.view = 'cor';
0154         AVWVIEW = get_slider_position(AVWVIEW);
0155         coronal_update(AVWVIEW);
0156         
0157       case 'sagittal_slider',
0158         AVWVIEW.view = 'sag';
0159         AVWVIEW = get_slider_position(AVWVIEW);
0160         sagittal_update(AVWVIEW);
0161     end
0162     
0163     set_display_values(AVWVIEW);
0164     
0165     AVWVIEW = set_crosshairs(AVWVIEW);
0166     
0167     
0168     
0169     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0170     
0171   case {'left','right','up','down'},
0172     
0173     AVWVIEW = get_slider_position(AVWVIEW);
0174     
0175     % what axes are we in?
0176     if isequal(gca, AVWVIEW.handles.axial_axes),
0177       switch command,
0178         case 'left',
0179           % decrease sagittal slice
0180           if AVWVIEW.slices.sag > 1,
0181             AVWVIEW.slices.sag = AVWVIEW.slices.sag - 1;
0182           end
0183         case 'right',
0184           % increase sagittal slice
0185           if AVWVIEW.slices.sag < AVWVIEW.xdim,
0186             AVWVIEW.slices.sag = AVWVIEW.slices.sag + 1;
0187           end
0188         case 'up',
0189           % increase coronal slice
0190           if AVWVIEW.slices.cor < AVWVIEW.ydim,
0191             AVWVIEW.slices.cor = AVWVIEW.slices.cor + 1;
0192           end
0193         case 'down',
0194           % decrease coronal slice
0195           if AVWVIEW.slices.cor > 1,
0196             AVWVIEW.slices.cor = AVWVIEW.slices.cor - 1;
0197           end
0198       end
0199       switch command,
0200         case {'left','right'}
0201           set(AVWVIEW.handles.sagittal_slider,'Value',AVWVIEW.slices.sag);
0202           Ssag = squeeze(AVWVIEW.avw.img(AVWVIEW.slices.sag,:,:));
0203           set(AVWVIEW.handles.sagittal_image,'CData',Ssag');
0204           set(AVWVIEW.handles.sagittal_sliderN,'String',num2str(AVWVIEW.slices.sag));
0205           set(AVWVIEW.handles.sagittal_sliderN,'Value',AVWVIEW.slices.sag);
0206         case {'up','down'},
0207           set(AVWVIEW.handles.coronal_slider,'Value',AVWVIEW.slices.cor);
0208           Scor = squeeze(AVWVIEW.avw.img(:,AVWVIEW.slices.cor,:));
0209           set(AVWVIEW.handles.coronal_image,'CData',Scor');
0210           set(AVWVIEW.handles.coronal_sliderN,'String',num2str(AVWVIEW.slices.cor));
0211           set(AVWVIEW.handles.coronal_sliderN,'Value',AVWVIEW.slices.cor);
0212       end
0213     end
0214     
0215     if isequal(gca, AVWVIEW.handles.coronal_axes),
0216       switch command,
0217         case 'left',
0218           % decrease sagittal slice
0219           if AVWVIEW.slices.sag > 1,
0220             AVWVIEW.slices.sag = AVWVIEW.slices.sag - 1;
0221           end
0222         case 'right',
0223           % increase sagittal slice
0224           if AVWVIEW.slices.sag < AVWVIEW.xdim,
0225             AVWVIEW.slices.sag = AVWVIEW.slices.sag + 1;
0226           end
0227         case 'up',
0228           % increase axial slice
0229           if AVWVIEW.slices.axi < AVWVIEW.zdim,
0230             AVWVIEW.slices.axi = AVWVIEW.slices.axi + 1;
0231           end
0232         case 'down',
0233           % decrease axial slice
0234           if AVWVIEW.slices.axi > 1,
0235             AVWVIEW.slices.axi = AVWVIEW.slices.axi - 1;
0236           end
0237       end
0238       switch command,
0239         case {'left','right'}
0240           set(AVWVIEW.handles.sagittal_slider,'Value',AVWVIEW.slices.sag);
0241           Ssag = squeeze(AVWVIEW.avw.img(AVWVIEW.slices.sag,:,:));
0242           set(AVWVIEW.handles.sagittal_image,'CData',Ssag');
0243           set(AVWVIEW.handles.sagittal_sliderN,'String',num2str(AVWVIEW.slices.sag));
0244           set(AVWVIEW.handles.sagittal_sliderN,'Value',AVWVIEW.slices.sag);
0245         case {'up','down'},
0246           set(AVWVIEW.handles.axial_slider,'Value',AVWVIEW.slices.axi);
0247           Saxi = squeeze(AVWVIEW.avw.img(:,:,AVWVIEW.slices.axi));
0248           set(AVWVIEW.handles.axial_image,'CData',Saxi');
0249           set(AVWVIEW.handles.axial_sliderN,'String',num2str(AVWVIEW.slices.axi));
0250           set(AVWVIEW.handles.axial_sliderN,'Value',AVWVIEW.slices.axi);
0251       end
0252     end
0253     
0254     if isequal(gca, AVWVIEW.handles.sagittal_axes),
0255       switch command,
0256         case 'left',
0257           % decrease sagittal slice
0258           if AVWVIEW.slices.cor > 1,
0259             AVWVIEW.slices.cor = AVWVIEW.slices.cor - 1;
0260           end
0261         case 'right',
0262           % increase sagittal slice
0263           if AVWVIEW.slices.cor < AVWVIEW.ydim,
0264             AVWVIEW.slices.cor = AVWVIEW.slices.cor + 1;
0265           end
0266         case 'up',
0267           % increase axial slice
0268           if AVWVIEW.slices.axi < AVWVIEW.zdim,
0269             AVWVIEW.slices.axi = AVWVIEW.slices.axi + 1;
0270           end
0271         case 'down',
0272           % decrease axial slice
0273           if AVWVIEW.slices.axi > 1,
0274             AVWVIEW.slices.axi = AVWVIEW.slices.axi - 1;
0275           end
0276       end
0277       switch command,
0278         case {'left','right'}
0279           set(AVWVIEW.handles.coronal_slider,'Value',AVWVIEW.slices.cor);
0280           Scor = squeeze(AVWVIEW.avw.img(:,AVWVIEW.slices.cor,:));
0281           set(AVWVIEW.handles.coronal_image,'CData',Scor');
0282           set(AVWVIEW.handles.coronal_sliderN,'String',num2str(AVWVIEW.slices.cor));
0283           set(AVWVIEW.handles.coronal_sliderN,'Value',AVWVIEW.slices.cor);
0284         case {'up','down'},
0285           set(AVWVIEW.handles.axial_slider,'Value',AVWVIEW.slices.axi);
0286           Saxi = squeeze(AVWVIEW.avw.img(:,:,AVWVIEW.slices.axi));
0287           set(AVWVIEW.handles.axial_image,'CData',Saxi');
0288           set(AVWVIEW.handles.axial_sliderN,'String',num2str(AVWVIEW.slices.axi));
0289           set(AVWVIEW.handles.axial_sliderN,'Value',AVWVIEW.slices.axi);
0290       end
0291     end
0292     
0293     AVWVIEW = set_crosshairs(AVWVIEW);
0294     
0295     
0296     
0297     
0298     
0299     
0300     
0301     
0302     
0303     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0304     
0305   case {'roi_9','roi_7','roi_5','roi_3'},
0306     
0307     position = [ AVWVIEW.slices.sag, AVWVIEW.slices.cor, AVWVIEW.slices.axi ];
0308     
0309     shape.type = 'block';
0310     if findstr(command,'9'), shape.size = [9,9,9]; end
0311     if findstr(command,'7'), shape.size = [7,7,7]; end
0312     if findstr(command,'5'), shape.size = [5,5,5]; end
0313     if findstr(command,'3'), shape.size = [3,3,3]; end
0314     
0315     stats.roi = avw_roi(AVWVIEW.avw,position,shape);
0316     
0317     AVWVIEW.avw.stats = avw_stats(stats);
0318     
0319     
0320     
0321     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0322     
0323   case {'nasion','rpa','lpa','ac'},
0324     
0325     % return voxel coordinates into AVWVIEW.imgXYZ
0326     AVWVIEW = slices2metric(AVWVIEW);
0327     
0328     if get(AVWVIEW.handles.coord,'value') == 2,
0329       format = '%7.3f %7.3f %7.3f';
0330       imgXYZ = AVWVIEW.imgXYZ.mm;
0331       string = sprintf('%7.3f %7.3f %7.3f',imgXYZ);
0332     elseif get(AVWVIEW.handles.coord,'value') == 3,
0333       format = '%7.3f %7.3f %7.3f';
0334       imgXYZ = AVWVIEW.imgXYZ.meters;
0335       string = sprintf('%7.3f %7.3f %7.3f',imgXYZ);
0336     else
0337       imgXYZ = AVWVIEW.imgXYZ.voxels;
0338       string = sprintf('%7.0f %7.0f %7.0f',imgXYZ);
0339     end;
0340     
0341     switch command,
0342       case 'nasion',
0343         set(AVWVIEW.handles.nasion,'String',string);
0344         AVWVIEW.avw.fiducials.nasion.voxels(1,:) = AVWVIEW.imgXYZ.voxels;
0345         AVWVIEW.avw.fiducials.nasion.meters(1,:) = AVWVIEW.imgXYZ.meters;
0346         AVWVIEW.avw.fiducials.nasion.mm(1,:)     = AVWVIEW.imgXYZ.mm;
0347       case 'rpa',
0348         set(AVWVIEW.handles.rpa,'String',string);
0349         AVWVIEW.avw.fiducials.rpa.voxels(1,:) = AVWVIEW.imgXYZ.voxels;
0350         AVWVIEW.avw.fiducials.rpa.meters(1,:) = AVWVIEW.imgXYZ.meters;
0351         AVWVIEW.avw.fiducials.rpa.mm(1,:)     = AVWVIEW.imgXYZ.mm;
0352       case 'lpa',
0353         set(AVWVIEW.handles.lpa,'String',string);
0354         AVWVIEW.avw.fiducials.lpa.voxels(1,:) = AVWVIEW.imgXYZ.voxels;
0355         AVWVIEW.avw.fiducials.lpa.meters(1,:) = AVWVIEW.imgXYZ.meters;
0356         AVWVIEW.avw.fiducials.lpa.mm(1,:)     = AVWVIEW.imgXYZ.mm;
0357       case 'ac',
0358         set(AVWVIEW.handles.ac,'String',string);
0359         AVWVIEW.avw.ac.voxels(1,:) = AVWVIEW.imgXYZ.voxels;
0360         AVWVIEW.avw.ac.meters(1,:) = AVWVIEW.imgXYZ.meters;
0361         AVWVIEW.avw.ac.mm(1,:) = AVWVIEW.imgXYZ.mm;
0362     end
0363     
0364     
0365     
0366     
0367     
0368     
0369     
0370     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0371     
0372   case 'flip',
0373     
0374     % flip X dim here...
0375     AVWVIEW.avw.img = flipdim(AVWVIEW.avw.img,1);
0376     
0377     if isfield(AVWVIEW.handles,'axial_image'),
0378       Saxi = squeeze(AVWVIEW.avw.img(:,:,AVWVIEW.slices.axi));
0379       set(AVWVIEW.handles.axial_image,'CData',Saxi');
0380     end;
0381     if isfield(AVWVIEW.handles,'coronal_image'),
0382       Scor = squeeze(AVWVIEW.avw.img(:,AVWVIEW.slices.cor,:));
0383       set(AVWVIEW.handles.coronal_image,'CData',Scor');
0384     end;
0385     if isfield(AVWVIEW.handles,'sagittal_image'),
0386       Ssag = squeeze(AVWVIEW.avw.img(AVWVIEW.slices.sag,:,:));
0387       set(AVWVIEW.handles.sagittal_image,'CData',Ssag');
0388     end;
0389     
0390     flipStatus = get(AVWVIEW.handles.flipStatus,'string');
0391     if strmatch(flipStatus,'R>>L (radiological)'),
0392       flipStatus = 'L>>R (neurological)';
0393     else,
0394       flipStatus = 'R>>L (radiological)';
0395     end;
0396     set(AVWVIEW.handles.flipStatus,'string',flipStatus);
0397     
0398     
0399     
0400     
0401     
0402     
0403     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0404     
0405   case {'brighter','dimmer','setclimit'},
0406     
0407     switch command,
0408       case 'brighter',
0409         AVWVIEW.clim = AVWVIEW.clim .* 0.9;
0410       case 'dimmer',
0411         AVWVIEW.clim = AVWVIEW.clim .* 1.1;
0412       case 'setclimit',
0413         clim = get(AVWVIEW.handles.clim,'string');
0414         AVWVIEW.clim(2) = str2num(clim);
0415     end
0416     climString = sprintf('%05.2f',AVWVIEW.clim(2));
0417     set(AVWVIEW.handles.clim,'string',climString);
0418     
0419     if isfield(AVWVIEW.handles,'axial_image'),
0420       set(AVWVIEW.handles.axial_axes,'Clim',AVWVIEW.clim);
0421     end;
0422     if isfield(AVWVIEW.handles,'coronal_image'),
0423       set(AVWVIEW.handles.coronal_axes,'Clim',AVWVIEW.clim);
0424     end;
0425     if isfield(AVWVIEW.handles,'sagittal_image'),
0426       set(AVWVIEW.handles.sagittal_axes,'Clim',AVWVIEW.clim);
0427     end;
0428     
0429     
0430     
0431     
0432     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0433     
0434   case 'contrast'
0435     
0436     if isfield(AVWVIEW.handles,'axial_image'),
0437       X = squeeze(AVWVIEW.avw.img(:,:,AVWVIEW.slices.axi));
0438       AVWVIEW.cmap = contrast(X);
0439       colormap(AVWVIEW.handles.axial_axes,AVWVIEW.cmap);
0440     end;
0441     if isfield(AVWVIEW.handles,'coronal_image'),
0442       X = squeeze(AVWVIEW.avw.img(:,AVWVIEW.slices.cor,:));
0443       AVWVIEW.cmap = contrast(X);
0444       colormap(AVWVIEW.handles.axial_axes,AVWVIEW.cmap);
0445     end;
0446     if isfield(AVWVIEW.handles,'sagittal_image'),
0447       X = squeeze(AVWVIEW.avw.img(AVWVIEW.slices.sag,:,:));
0448       AVWVIEW.cmap = contrast(X);
0449       colormap(AVWVIEW.handles.axial_axes,AVWVIEW.cmap);
0450     end;
0451     
0452     
0453     
0454     
0455     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0456     
0457   case 'setcmap'
0458     
0459     cmapIndex = get(AVWVIEW.handles.cmap,'value');
0460     cmapString = get(AVWVIEW.handles.cmap,'string');
0461     
0462     AVWVIEW.cmapString = cmapString{cmapIndex};
0463     
0464     if isfield(AVWVIEW.handles,'axial_image'),
0465       AVWVIEW.cmap = colormap(AVWVIEW.handles.axial_axes,AVWVIEW.cmapString);
0466     end;
0467     if isfield(AVWVIEW.handles,'coronal_image'),
0468       AVWVIEW.cmap = colormap(AVWVIEW.handles.coronal_axes,AVWVIEW.cmapString);
0469     end;
0470     if isfield(AVWVIEW.handles,'sagittal_image'),
0471       AVWVIEW.cmap = colormap(AVWVIEW.handles.sagittal_axes,AVWVIEW.cmapString);
0472     end;
0473     
0474     
0475     
0476     
0477     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0478     
0479   case 'histogram',
0480     
0481     avw = AVWVIEW.avw;
0482     
0483     % would be nice to use bins that reflect
0484     % the bits per pixel, but it seems to take
0485     % forever for a 16 bit image, otherwise
0486     % use this code:
0487     %     %check the bits per pixel of avw
0488     %     bitpix = avw.hdr.dime.bitpix;
0489     %     % set the bins according to the data type
0490     %     if bitpix <= 8, bins = 0:255; end
0491     %     if bitpix > 8,  bins = 0:65535; end
0492     
0493     %bins = linspace(0,intensity_max,255);
0494     
0495     intensity_min = min(min(min(avw.img)));
0496     intensity_max = max(max(max(avw.img)));
0497     
0498     bins = intensity_min:intensity_max;
0499     
0500     fprintf('...calculating histogram for %d bins.\n',length(bins));
0501     
0502     for i=1:size(avw.img,3),
0503       n = hist(avw.img(:,:,i), bins);
0504       if i == 1,
0505         intensity_volume = sum(n,2);
0506       else
0507         intensity_slice = sum(n,2);
0508         intensity_volume = intensity_volume + intensity_slice;
0509       end
0510     end
0511     figure('name','intensity histogram');
0512     bar(bins,intensity_volume);
0513     
0514     
0515     
0516     
0517     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0518     
0519   case 'zoom'
0520     
0521     x = AVWVIEW.slices.sag;
0522     y = AVWVIEW.slices.cor;
0523     z = AVWVIEW.slices.axi;
0524     
0525     switch AVWVIEW.view,
0526       case 'axi',
0527         slice = rot90(AVWVIEW.avw.img(:,:,z));
0528       case 'cor',
0529         slice = rot90(squeeze(AVWVIEW.avw.img(:,y,:)));
0530       case 'sag',
0531         slice = rot90(squeeze(AVWVIEW.avw.img(x,:,:)));
0532     end
0533     
0534     figure;
0535     imagesc(slice,AVWVIEW.clim); 
0536     colormap(gray); axis off; zoom on;
0537     daspect(AVWVIEW.daspect);
0538     
0539     
0540     
0541     
0542     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0543     
0544   case 'save_image',
0545     
0546     [filename, pathname] = uiputfile(...
0547       { '*.png','PNG Files (*.png)'; ...
0548         '*.jpg','JPG Files (*.jpg)'; ...
0549         '*.ppm;*.pgm;*.pbm','Portable Anymap (*.ppm,*.pgm,*.pbm)'; ...
0550         '*.*',  'All Files (*.*)'}, ...
0551       'IMWrite to file');
0552     
0553     if filename,
0554       
0555       x = AVWVIEW.slices.sag;
0556       y = AVWVIEW.slices.cor;
0557       z = AVWVIEW.slices.axi;
0558       
0559       pixelsPerMM = 1 ./ double(AVWVIEW.avw.hdr.dime.pixdim(2:4));
0560       pixelsPerMeter = pixelsPerMM .* 1000;
0561       
0562       switch AVWVIEW.view,
0563         case 'axi',
0564           slice = rot90(AVWVIEW.avw.img(:,:,z));
0565           xresolution = pixelsPerMeter(1);
0566           yresolution = pixelsPerMeter(2);
0567         case 'cor',
0568           slice = rot90(squeeze(AVWVIEW.avw.img(:,y,:)));
0569           xresolution = pixelsPerMeter(1);
0570           yresolution = pixelsPerMeter(3);
0571         case 'sag',
0572           slice = rot90(squeeze(AVWVIEW.avw.img(x,:,:)));
0573           xresolution = pixelsPerMeter(2);
0574           yresolution = pixelsPerMeter(3);
0575       end
0576       
0577       % scale the image values to between 0-1 for imwrite
0578       % (initially used max of slice, but actually want to
0579       % use the scaled intensity from the gui).
0580       %maxValue = max(max(slice));
0581       %scaledSlice = slice ./ maxValue;
0582       scaledSlice = slice ./ AVWVIEW.clim(2);
0583       
0584       % RGB = ind2rgb(X,map) converts the matrix X and corresponding
0585       % colormap map to RGB (truecolor)
0586       
0587       file = [pathname,filename];
0588       fprintf('saving to:...%s\n',file);
0589       
0590       %Most of the supported image file formats store uint8 data.
0591       %PNG and TIFF formats additionally support uint16 data. For
0592       %grayscale and RGB images, if the data array is double, the
0593       %assumed dynamic range is [0,1]. The data array is automatically
0594       %scaled by 255 before being written as uint8. If the data array
0595       %is uint8 or uint16, it is written without scaling as uint8 or
0596       %uint16, respectively.
0597       
0598       [pathname,filename,ext] = fileparts([pathname,filename]);
0599       
0600       switch ext,
0601       
0602         case '.png',
0603           %imwrite(uint8(image),colormap,file,format);
0604           %imwrite(slice,colormap(gray),file,format,...
0605           
0606           %     'XResolution'  A scalar indicating the number of
0607           %                    pixels/unit in the horizontal direction
0608           %
0609           %     'YResolution'  A scalar indicating the number of
0610           %                    pixels/unit in the vertical direction
0611           %
0612           %     'ResolutionUnit' Either 'unknown' or 'meter'
0613           format = 'png';
0614           imwrite(scaledSlice,file,format,...
0615             'BitDepth',16,'ResolutionUnit','meter',...
0616             'XResolution',xresolution,...
0617             'YResolution',yresolution);
0618           
0619         case '.jpg',
0620           format = 'jpg';
0621           imwrite(scaledSlice,file,format);
0622         case {'.ppm','.pgm','.pbm'},
0623           format = ext(2:end);
0624           imwrite(scaledSlice,file,format);
0625         otherwise
0626           fprintf('...cannot write %s image files\n',ext);
0627       end
0628     end
0629     
0630     
0631     
0632     
0633     
0634   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0635     
0636   case 'save',
0637     % try to assign back into the input struct
0638     if ~isempty(AVWVIEW.invarname),
0639       fprintf('...returning data to base workspace struct ''%s''\n',AVWVIEW.invarname);
0640       assignin('base',AVWVIEW.invarname,AVWVIEW.avw);
0641     elseif evalin('base','exist(''mri'',''var'')'),
0642       fprintf('...returning data to base workspace struct ''mri''\n');
0643       string = ['AVWVIEW = get(', num2str(AVWVIEW.gui),...
0644           ',''Userdata''); mri.data = AVWVIEW.avw; clear AVWVIEW;'];
0645       evalin('base',string);
0646     else
0647       fprintf('...returning data into base workspace struct ''avw''\n');
0648       assignin('base','avw',AVWVIEW.avw);
0649     end
0650 
0651     [filename, pathname] = uiputfile('*.mat','Save fiducials');
0652     if isequal(filename,0) | isequal(pathname,0)
0653        disp('filename not specified.')
0654     else
0655        fiducials = AVWVIEW.avw.fiducials;
0656        vb_fsave([fullfile(pathname, filename)], 'fiducials');
0657     end
0658     %    close gcbf;
0659     
0660 
0661   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0662   
0663   case 'close',
0664       fprintf('...returning data into base workspace struct ''avw''\n');
0665       assignin('base','avw',AVWVIEW.avw);
0666       close gcbf;
0667       
0668   otherwise,
0669 end
0670   
0671 switch command,
0672   case 'save',
0673   case 'close',
0674   otherwise,
0675     set(AVWVIEW.gui,'UserData',AVWVIEW);
0676 end
0677 
0678 if nargout > 0,
0679   varargout{1} = AVWVIEW.avw;
0680 end
0681 
0682 return
0683 
0684 
0685 
0686 
0687 
0688 
0689 
0690 
0691 
0692 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0693 % SUBFUNCTIONS
0694 
0695 
0696 
0697 
0698 
0699 
0700 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0701 function axial_update(AVWVIEW)
0702 
0703 if isfield(AVWVIEW.handles,'axial_image'),
0704     Saxi = squeeze(AVWVIEW.avw.img(:,:,AVWVIEW.slices.axi));
0705     set(AVWVIEW.handles.axial_image,'CData',Saxi');
0706 end
0707 if isfield(AVWVIEW.handles,'axial_sliderN'),
0708     set(AVWVIEW.handles.axial_sliderN,'String',num2str(AVWVIEW.slices.axi));
0709     set(AVWVIEW.handles.axial_sliderN,'Value',AVWVIEW.slices.axi);
0710 end
0711 if isfield(AVWVIEW.handles,'axial_slider'),
0712     set(AVWVIEW.handles.axial_slider,'Value',AVWVIEW.slices.axi);
0713 end;
0714 
0715 return
0716 
0717 
0718 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0719 function coronal_update(AVWVIEW)
0720 
0721 if isfield(AVWVIEW.handles,'coronal_image'),
0722     Scor = squeeze(AVWVIEW.avw.img(:,AVWVIEW.slices.cor,:));
0723     set(AVWVIEW.handles.coronal_image,'CData',Scor');
0724 end
0725 if isfield(AVWVIEW.handles,'coronal_sliderN'),
0726     set(AVWVIEW.handles.coronal_sliderN,'String',num2str(AVWVIEW.slices.cor));
0727     set(AVWVIEW.handles.coronal_sliderN,'Value',AVWVIEW.slices.cor);
0728 end
0729 if isfield(AVWVIEW.handles,'coronal_slider'),
0730     set(AVWVIEW.handles.coronal_slider,'Value',AVWVIEW.slices.cor);
0731 end;
0732 
0733 return
0734 
0735 
0736 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0737 function sagittal_update(AVWVIEW)
0738 
0739 if isfield(AVWVIEW.handles,'sagittal_image'),
0740     Ssag = squeeze(AVWVIEW.avw.img(AVWVIEW.slices.sag,:,:));
0741     set(AVWVIEW.handles.sagittal_image,'CData',Ssag');
0742 end
0743 if isfield(AVWVIEW.handles,'sagittal_sliderN'),
0744     set(AVWVIEW.handles.sagittal_sliderN,'String',num2str(AVWVIEW.slices.sag));
0745     set(AVWVIEW.handles.sagittal_sliderN,'Value',AVWVIEW.slices.sag);
0746 end
0747 if isfield(AVWVIEW.handles,'sagittal_slider'),
0748     set(AVWVIEW.handles.sagittal_slider,'Value',AVWVIEW.slices.sag);
0749 end;
0750 
0751 return
0752 
0753 
0754 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0755 function AVWVIEW = set_crosshairs(AVWVIEW)
0756 
0757 fig = figure(AVWVIEW.gui);
0758 current_axes = get(fig, 'CurrentAxes');
0759 
0760 [AVWVIEW, metric] = slices2metric(AVWVIEW);
0761 
0762 if isfield(AVWVIEW.handles,'axial_axes'),
0763   set(fig, 'CurrentAxes', AVWVIEW.handles.axial_axes);
0764   
0765   x_value = [metric.sag metric.sag];
0766   y_value = [metric.cor metric.cor];
0767 
0768   AVWVIEW.handles.axial_xlim = get(AVWVIEW.handles.axial_axes,'Xlim');
0769   AVWVIEW.handles.axial_ylim = get(AVWVIEW.handles.axial_axes,'Ylim');
0770   set(AVWVIEW.handles.axial_xline, 'Xdata', x_value,'Ydata',AVWVIEW.handles.axial_ylim);
0771   set(AVWVIEW.handles.axial_yline, 'Ydata', y_value,'Xdata',AVWVIEW.handles.axial_xlim);
0772   set(AVWVIEW.handles.axial_xline,'Color','y','Tag','XLINE');
0773   set(AVWVIEW.handles.axial_yline,'Color','y','Tag','YLINE');
0774 
0775   if get(AVWVIEW.handles.crosshairs,'value'),
0776     set(AVWVIEW.handles.axial_xline,'visible','on');
0777     set(AVWVIEW.handles.axial_yline,'visible','on');
0778   else
0779     set(AVWVIEW.handles.axial_xline,'visible','off');
0780     set(AVWVIEW.handles.axial_yline,'visible','off');
0781   end
0782   
0783 end
0784 
0785 if isfield(AVWVIEW.handles,'coronal_axes'),
0786   set(fig, 'CurrentAxes', AVWVIEW.handles.coronal_axes);
0787 
0788   x_value = [metric.sag metric.sag];
0789   y_value = [metric.axi metric.axi];
0790 
0791   AVWVIEW.handles.coronal_xlim = get(AVWVIEW.handles.coronal_axes,'Xlim');
0792   AVWVIEW.handles.coronal_ylim = get(AVWVIEW.handles.coronal_axes,'Ylim');
0793   set(AVWVIEW.handles.coronal_xline, 'Xdata',x_value,'Ydata',AVWVIEW.handles.coronal_ylim);
0794   set(AVWVIEW.handles.coronal_yline, 'Ydata',y_value,'Xdata',AVWVIEW.handles.coronal_xlim);
0795   set(AVWVIEW.handles.coronal_xline,'Color','y','Tag','XLINE');
0796   set(AVWVIEW.handles.coronal_yline,'Color','y','Tag','YLINE');
0797   
0798   
0799   if get(AVWVIEW.handles.crosshairs,'value'),
0800     set(AVWVIEW.handles.coronal_xline,'visible','on');
0801     set(AVWVIEW.handles.coronal_yline,'visible','on');
0802   else
0803     set(AVWVIEW.handles.coronal_xline,'visible','off');
0804     set(AVWVIEW.handles.coronal_yline,'visible','off');
0805   end
0806   
0807 end
0808 
0809 if isfield(AVWVIEW.handles,'sagittal_axes'),
0810   set(fig, 'CurrentAxes', AVWVIEW.handles.sagittal_axes);
0811 
0812   x_value = [metric.cor metric.cor];
0813   y_value = [metric.axi metric.axi];
0814   
0815   AVWVIEW.handles.sagittal_xlim = get(AVWVIEW.handles.sagittal_axes,'Xlim');
0816   AVWVIEW.handles.sagittal_ylim = get(AVWVIEW.handles.sagittal_axes,'Ylim');
0817   set(AVWVIEW.handles.sagittal_xline, 'Xdata',x_value,'Ydata',AVWVIEW.handles.sagittal_ylim);
0818   set(AVWVIEW.handles.sagittal_yline, 'Ydata',y_value,'Xdata',AVWVIEW.handles.sagittal_xlim);
0819   set(AVWVIEW.handles.sagittal_xline,'Color','y','Tag','XLINE');
0820   set(AVWVIEW.handles.sagittal_yline,'Color','y','Tag','YLINE');
0821   
0822   if get(AVWVIEW.handles.crosshairs,'value'),
0823     set(AVWVIEW.handles.sagittal_xline,'visible','on');
0824     set(AVWVIEW.handles.sagittal_yline,'visible','on');
0825   else
0826     set(AVWVIEW.handles.sagittal_xline,'visible','off');
0827     set(AVWVIEW.handles.sagittal_yline,'visible','off');
0828   end
0829  
0830 end
0831 
0832 set(fig, 'CurrentAxes', current_axes);
0833 
0834 return
0835 
0836 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0837 function AVWVIEW = set_coordinates(AVWVIEW)
0838 
0839 % set the axis coordinates to voxels, mm or meters
0840 
0841 s = size(AVWVIEW.avw.img);
0842 if length(s) > 0, xdim = s(1); else xdim = 1; end
0843 if length(s) > 1, ydim = s(2); else ydim = 1; end
0844 if length(s) > 2, zdim = s(3); else zdim = 1; end
0845 
0846 % initialise for voxel coordinates
0847 xpixdim = double(AVWVIEW.avw.hdr.dime.pixdim(2));
0848 ypixdim = double(AVWVIEW.avw.hdr.dime.pixdim(3));
0849 zpixdim = double(AVWVIEW.avw.hdr.dime.pixdim(4));
0850 xdata = [0 xdim];
0851 ydata = [0 ydim];
0852 zdata = [0 zdim];
0853 
0854 aspect = 1./AVWVIEW.daspect; %AVWVIEW.avw.hdr.dime.pixdim(2:4);
0855 
0856 
0857 if get(AVWVIEW.handles.coord,'value') == 2,    % mm
0858   xdata = xdata .* xpixdim;
0859   ydata = ydata .* ypixdim;
0860   zdata = zdata .* zpixdim;
0861   aspect = [1 1 1];
0862 end
0863 
0864 if get(AVWVIEW.handles.coord,'value') == 3,    % meters
0865   xpixdim = xpixdim / 1000;
0866   ypixdim = ypixdim / 1000;
0867   zpixdim = zpixdim / 1000;
0868   xdata = xdata .* xpixdim;
0869   ydata = ydata .* ypixdim;
0870   zdata = zdata .* zpixdim;
0871   aspect = [1 1 1];
0872 end
0873 
0874 
0875 if isfield(AVWVIEW.handles,'axial_image'),
0876   set(AVWVIEW.handles.axial_axes,'Xlim',xdata);
0877   set(AVWVIEW.handles.axial_axes,'Ylim',ydata);
0878   set(AVWVIEW.handles.axial_axes,'Zlim',zdata);
0879   set(AVWVIEW.handles.axial_image,'Xdata',xdata);
0880   set(AVWVIEW.handles.axial_image,'Ydata',ydata);
0881   daspect(AVWVIEW.handles.axial_axes,aspect([1 2 3]));
0882 end;
0883 if isfield(AVWVIEW.handles,'coronal_image'),
0884   set(AVWVIEW.handles.coronal_axes,'Xlim',xdata);
0885   set(AVWVIEW.handles.coronal_axes,'Ylim',zdata);
0886   set(AVWVIEW.handles.coronal_axes,'Zlim',ydata);
0887   set(AVWVIEW.handles.coronal_image,'Xdata',xdata);
0888   set(AVWVIEW.handles.coronal_image,'Ydata',zdata);
0889   daspect(AVWVIEW.handles.coronal_axes,aspect([1 3 2]));
0890 end;
0891 if isfield(AVWVIEW.handles,'sagittal_image'),
0892   set(AVWVIEW.handles.sagittal_axes,'Xlim',ydata);
0893   set(AVWVIEW.handles.sagittal_axes,'Ylim',zdata);
0894   set(AVWVIEW.handles.sagittal_axes,'Zlim',xdata);
0895   set(AVWVIEW.handles.sagittal_image,'Xdata',ydata);
0896   set(AVWVIEW.handles.sagittal_image,'Ydata',zdata);
0897   daspect(AVWVIEW.handles.sagittal_axes,aspect([2 3 1]));
0898 end;
0899 
0900 set_display_values(AVWVIEW);
0901 set_crosshairs(AVWVIEW);
0902 
0903 return
0904 
0905 
0906 
0907 
0908 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0909 function AVWVIEW = get_current_position(AVWVIEW),
0910 
0911 %[AVWVIEW, metric] = slices2metric(AVWVIEW);
0912 
0913 if get(AVWVIEW.handles.coord,'value') == 3
0914     devide = 1000;
0915 else
0916     devide = 1;
0917 end
0918 
0919 switch AVWVIEW.view,
0920   case 'sag',
0921     currentpoint = get(get(AVWVIEW.handles.sagittal_image,'Parent'),'CurrentPoint');
0922     metric.cor = currentpoint(1,1);
0923     metric.axi = currentpoint(1,2);
0924     metric.sag = get(AVWVIEW.handles.sagittal_slider,'Value') / devide;
0925   case 'cor',
0926     currentpoint = get(get(AVWVIEW.handles.coronal_image,'Parent'),'CurrentPoint');
0927     metric.sag = currentpoint(2,1);
0928     metric.axi = currentpoint(2,2);
0929     metric.cor = get(AVWVIEW.handles.coronal_slider,'Value') / devide;
0930   case 'axi',
0931     currentpoint = get(get(AVWVIEW.handles.axial_image,'Parent'),'CurrentPoint');
0932     metric.sag = currentpoint(2,1);
0933     metric.cor = currentpoint(2,2);
0934     metric.axi = get(AVWVIEW.handles.axial_slider,'Value') / devide;
0935 end
0936 
0937 AVWVIEW = metric2slices(AVWVIEW,metric);
0938 AVWVIEW = check_slices(AVWVIEW);
0939 
0940 return
0941 
0942 
0943 
0944 
0945 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0946 function AVWVIEW = get_slider_position(AVWVIEW),
0947 
0948 [AVWVIEW.slices.sag,AVWVIEW.slices.cor,AVWVIEW.slices.axi] = deal(0);
0949 
0950 if isfield(AVWVIEW.handles,'sagittal_slider'),
0951   if ishandle(AVWVIEW.handles.sagittal_slider),
0952     AVWVIEW.slices.sag = round(get(AVWVIEW.handles.sagittal_slider,'Value'));
0953   end
0954 end
0955 if AVWVIEW.slices.sag == 0,
0956   if isfield(AVWVIEW.handles,'sagittal_sliderN'),
0957     if ishandle(AVWVIEW.handles.sagittal_sliderN),
0958       AVWVIEW.slices.sag = round(get(AVWVIEW.handles.sagittal_sliderN,'Value'));
0959     end
0960   end
0961 end
0962 
0963 if isfield(AVWVIEW.handles,'coronal_slider'),
0964   if ishandle(AVWVIEW.handles.coronal_slider),
0965     AVWVIEW.slices.cor = round(get(AVWVIEW.handles.coronal_slider,'Value'));
0966   end
0967 end
0968 if AVWVIEW.slices.cor == 0,
0969   if isfield(AVWVIEW.handles,'coronal_sliderN'),
0970     if ishandle(AVWVIEW.handles.coronal_sliderN),
0971       AVWVIEW.slices.cor = round(get(AVWVIEW.handles.coronal_sliderN,'Value'));
0972     end
0973   end
0974 end
0975 
0976 if isfield(AVWVIEW.handles,'axial_slider'),
0977   if ishandle(AVWVIEW.handles.axial_slider),
0978     AVWVIEW.slices.axi = round(get(AVWVIEW.handles.axial_slider,'Value'));
0979   end
0980 end
0981 if AVWVIEW.slices.axi == 0,
0982   if isfield(AVWVIEW.handles,'axial_sliderN'),
0983     if ishandle(AVWVIEW.handles.axial_sliderN),
0984       AVWVIEW.slices.axi = round(get(AVWVIEW.handles.axial_sliderN,'Value'));
0985     end
0986   end
0987 end
0988 
0989 AVWVIEW = check_slices(AVWVIEW);
0990 
0991 return
0992 
0993 
0994 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0995 function AVWVIEW = check_slices(AVWVIEW),
0996 
0997 adjust = 0;
0998 
0999 [ SagSize, CorSize, AxiSize ] = size(AVWVIEW.avw.img);
1000 
1001 if AVWVIEW.slices.sag > SagSize,
1002     AVWVIEW.slices.sag = SagSize;
1003     adjust = 1;
1004 end;
1005 if AVWVIEW.slices.sag < 1,
1006     AVWVIEW.slices.sag = 1;
1007     adjust = 1;
1008 end;
1009 if AVWVIEW.slices.cor > CorSize,
1010     AVWVIEW.slices.cor = CorSize;
1011     adjust = 1;
1012 end;
1013 if AVWVIEW.slices.cor < 1,
1014     AVWVIEW.slices.cor = 1;
1015     adjust = 1;
1016 end;
1017 if AVWVIEW.slices.axi > AxiSize,
1018     AVWVIEW.slices.axi = AxiSize;
1019     adjust = 1;
1020 end;
1021 if AVWVIEW.slices.axi < 1,
1022     AVWVIEW.slices.axi = 1;
1023     adjust = 1;
1024 end;
1025 
1026 if adjust,
1027     AVWVIEW = slices2metric(AVWVIEW);
1028 end
1029 
1030 return
1031 
1032 
1033 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1034 function set_display_values(AVWVIEW),
1035 
1036 % get coordinates of selected voxel and the image intensity there
1037 
1038 sag = AVWVIEW.slices.sag;
1039 cor = AVWVIEW.slices.cor;
1040 axi = AVWVIEW.slices.axi;
1041 
1042 imgvalue = AVWVIEW.avw.img(sag,cor,axi);
1043 
1044 set(AVWVIEW.handles.imval,'String',sprintf('%7.2f',imgvalue));
1045 set(AVWVIEW.handles.imval,'Value',imgvalue);
1046 
1047 % Now update the image position text for the selected voxel
1048 
1049 [AVWVIEW, metric] = slices2metric(AVWVIEW);
1050 sag = metric.sag;
1051 cor = metric.cor;
1052 axi = metric.axi;
1053 
1054 string = sprintf('%7.3f %7.3f %7.3f',sag,cor,axi);
1055 
1056 set(AVWVIEW.handles.impos,'String',string);
1057 set(AVWVIEW.handles.impos,'Value',[sag,cor,axi]);
1058 
1059 return
1060 
1061 
1062 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1063 function [AVWVIEW,metric] = slices2metric(AVWVIEW),
1064 
1065 AVWVIEW.imgXYZ.voxels = [AVWVIEW.slices.sag,AVWVIEW.slices.cor,AVWVIEW.slices.axi];
1066 AVWVIEW.imgXYZ.meters = AVWVIEW.imgXYZ.voxels .* AVWVIEW.scale2meters;
1067 AVWVIEW.imgXYZ.mm     = AVWVIEW.imgXYZ.voxels .* AVWVIEW.scale2mm;
1068 
1069 coord_value = get(AVWVIEW.handles.coord,'value');
1070 
1071 if coord_value == 2,
1072   % using mm
1073   img_mm = AVWVIEW.imgXYZ.voxels .* AVWVIEW.scale2mm;
1074   metric.axi = img_mm(3);
1075   metric.cor = img_mm(2);
1076   metric.sag = img_mm(1);
1077 elseif coord_value == 3,
1078   % using meters
1079   img_meters = AVWVIEW.imgXYZ.voxels .* AVWVIEW.scale2meters;
1080   metric.axi = img_meters(3);
1081   metric.cor = img_meters(2);
1082   metric.sag = img_meters(1);
1083 else
1084   % voxels
1085   metric.axi = AVWVIEW.slices.axi;
1086   metric.cor = AVWVIEW.slices.cor;
1087   metric.sag = AVWVIEW.slices.sag;
1088 end;
1089 
1090 return
1091 
1092 
1093 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1094 function AVWVIEW = metric2slices(AVWVIEW,metric),
1095 
1096 coord_value = get(AVWVIEW.handles.coord,'value');
1097 
1098 if coord_value == 2,
1099   % using mm
1100   xpix = double(AVWVIEW.avw.hdr.dime.pixdim(2));
1101   ypix = double(AVWVIEW.avw.hdr.dime.pixdim(3));
1102   zpix = double(AVWVIEW.avw.hdr.dime.pixdim(4));
1103   AVWVIEW.slices.axi = round(metric.axi / zpix);
1104   AVWVIEW.slices.cor = round(metric.cor / ypix);
1105   AVWVIEW.slices.sag = round(metric.sag / xpix);
1106 elseif coord_value == 3,
1107   % using meters
1108   xpix = double(AVWVIEW.avw.hdr.dime.pixdim(2)) / 1000;
1109   ypix = double(AVWVIEW.avw.hdr.dime.pixdim(3)) / 1000;
1110   zpix = double(AVWVIEW.avw.hdr.dime.pixdim(4)) / 1000;
1111   AVWVIEW.slices.axi = round(metric.axi / zpix);
1112   AVWVIEW.slices.cor = round(metric.cor / ypix);
1113   AVWVIEW.slices.sag = round(metric.sag / xpix);
1114 else
1115   % voxels
1116   AVWVIEW.slices.axi = round(metric.axi);
1117   AVWVIEW.slices.cor = round(metric.cor);
1118   AVWVIEW.slices.sag = round(metric.sag);
1119 end;
1120 
1121 return
1122 
1123 
1124 
1125 
1126 
1127 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1128 function AVWVIEW = init(avw,invarname),
1129 
1130 % try to keep track of the input struct
1131 if exist('invarname','var'),
1132   if ~isempty(invarname),
1133     AVWVIEW.invarname = invarname;
1134   else
1135     AVWVIEW.invarname = '';
1136   end
1137 else
1138   AVWVIEW.invarname = '';
1139 end
1140 
1141 % GUI General Parameters
1142 GUIwidth  = 1;
1143 GUIheight = 1/3;
1144 
1145 version = '[$Revision: 2025 $]';
1146 name = sprintf('AVW View [v%s]',version(12:16));
1147 
1148 if isfield(avw,'fileprefix'),
1149   if ~isempty(avw.fileprefix),
1150     format = strcat('%+',sprintf('%d',length(avw.fileprefix)+1),'s');
1151     name = strcat(name,' - ',sprintf(format,avw.fileprefix));
1152   end
1153 end
1154 
1155 % The Zbuffer provides smooth slice animations (OpenGL is no good)
1156 GUI = figure('Name',name,'Tag','AVWVIEW','units','Normalized',...
1157   'BackingStore','off',...
1158   'NumberTitle','off','color',[0 0 0],...
1159   'MenuBar','figure','Position',[0 0.1 1.0 0.8],...
1160   'Renderer','zbuffer');
1161 
1162 movegui(GUI,'center');
1163 
1164 set(GUI,'KeyPressFcn','avw_view_ras([],[],''keypress'');');
1165 
1166 AVWVIEW.gui = GUI;
1167 
1168 Font.FontName   = 'Helvetica';
1169 Font.FontUnits  = 'Pixels';
1170 Font.FontSize   = 15;
1171 Font.FontWeight = 'normal';
1172 Font.FontAngle  = 'normal';
1173 
1174 
1175 AVWVIEW.shading = 'flat';
1176 shading(AVWVIEW.shading)
1177 
1178 
1179 
1180 %     % determine the datatype of avw.img
1181 %     switch double(avw.hdr.dime.bitpix),
1182 %     case 1,
1183 %         fprintf('...converting avw.img to uint8 for viewing only.\n\n');
1184 %         avw.img = uint8(avw.img);
1185 %     case 8,
1186 %         fprintf('...converting avw.img to uint8 for viewing only.\n\n');
1187 %         avw.img = uint8(avw.img);
1188 %     case 16,
1189 %         fprintf('...converting avw.img to uint16 for viewing only.\n\n');
1190 %         avw.img = uint16(avw.img);
1191 %     case {32,64},
1192 %         % make sure it is double, not single
1193 %         avw.img = double(avw.img);
1194 %     otherwise,
1195 %         % do nothing, leave it as is
1196 %     end
1197 
1198 
1199 % calculate image stats
1200 intensityMean = mean(mean(mean(avw.img)));
1201 intensityMeanRobust = mean(mean(mean(avw.img(find(avw.img)))));
1202 intensityStdev = std(std(std(avw.img)));
1203 
1204 intensityMax = max(max(max(avw.img)));
1205 
1206 % try to adjust for large intensity extremes
1207 if intensityMax > 255,
1208   % got 16 bit data, at least
1209   adjust = 0.5;
1210 else
1211   adjust = 0.9;
1212 end
1213 %AVWVIEW.clim = [0 (intensityMeanRobust + (10 * intensityStdev)) ];
1214 AVWVIEW.clim = [0 (intensityMax * adjust)];
1215 
1216 
1217 
1218 AVWVIEW.xdim = size(avw.img,1);
1219 AVWVIEW.ydim = size(avw.img,2);
1220 AVWVIEW.zdim = size(avw.img,3);
1221 
1222 AVWVIEW.slices.sag = 1;
1223 AVWVIEW.slices.cor = 1;
1224 AVWVIEW.slices.axi = 1;
1225 if AVWVIEW.xdim > 1, AVWVIEW.slices.sag = floor(AVWVIEW.xdim/2); end
1226 if AVWVIEW.ydim > 1, AVWVIEW.slices.cor = floor(AVWVIEW.ydim/2); end
1227 if AVWVIEW.zdim > 1, AVWVIEW.slices.axi = floor(AVWVIEW.zdim/2); end
1228 
1229 % store the volume center for later reference when
1230 % calculating fiducial locations
1231 center = avw_center(avw);
1232 AVWVIEW.center = center.abs.voxels;
1233 
1234 % set the default origin at the center
1235 AVWVIEW.origin  = AVWVIEW.center;
1236 
1237 AVWVIEW.pixdim = double(avw.hdr.dime.pixdim(2:4));
1238 
1239 AVWVIEW.scale2mm     = AVWVIEW.pixdim;          % vol scale in mm
1240 AVWVIEW.scale2meters = AVWVIEW.pixdim ./ 1000;  % vol scale in meters
1241 AVWVIEW.daspect      = AVWVIEW.pixdim ./ min(AVWVIEW.pixdim);
1242 
1243 xPlotSize = 0.38;
1244 yPlotSize = 0.38;
1245 
1246 AVWVIEW.cmapString = 'gray';
1247 
1248 AVWVIEW.cmap = colormap(AVWVIEW.cmapString);
1249 
1250 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1251 
1252 % Axial Slice
1253 if AVWVIEW.xdim > 1 & AVWVIEW.ydim > 1,
1254   
1255   handles.axial_subplot = subplot('position',[0.075 0.075 xPlotSize yPlotSize]);
1256   
1257   %avw.img = flipdim(avw.img,1);
1258   % add hayashi change default coordinate left handed to right handed.
1259   
1260   Saxial = squeeze(avw.img(:,:,AVWVIEW.slices.axi));
1261   
1262   %handles.axial_image = pcolor(double(Saxial)); colormap(gray); shading interp
1263   %pcolor(Saxial'); colormap(gray); shading flat
1264   
1265   %surf(avw.img(:,:,20)','edgecolor','none'); view(2); axis tight; colormap(flipdim(gray,1)); colorbar
1266   %surf(avw.img(:,:,20)','edgecolor','none'); view(2); axis tight; colormap(gray)
1267   %image(avw.img(:,:,20)'); axis image; colormap(gray)
1268   %imagesc(avw.img(:,:,20)'); axis image; colormap(gray)
1269   
1270   %handles.axial_image = image('Cdata',Saxial','CDataMapping','scaled',...
1271   %    'XData',[0 xdim],'YData',[0 ydim]);
1272   
1273   handles.axial_image = imagesc([0,AVWVIEW.xdim],[0,AVWVIEW.ydim],Saxial',AVWVIEW.clim);
1274   
1275   handles.axial_axes = gca;
1276   set(gca,'YDir','normal','XLimMode','manual','YLimMode','manual',...
1277     'ClimMode','manual','YColor',[1 1 1],'XColor',[1 1 1])
1278   
1279   title('Axial','Color',[1 1 1])
1280   ylabel('Y')
1281   xlabel('Left ----- X ----- Right')
1282 %xlabel('(Right <<) X (>> Left)'); % default radiological orientation for Analyze
1283   %xlabel('(Left <<) X (>> Right)')
1284   
1285   % This callback navigates with mouse button click
1286   set(handles.axial_image,'ButtonDownFcn','avw_view_ras([],[],''axial_image'');');
1287   
1288   GUIheight = 0.46;
1289   
1290   if AVWVIEW.zdim > 1,
1291     slider_step(1) = 1/(AVWVIEW.zdim);
1292     slider_step(2) = 1/(AVWVIEW.zdim);
1293     handles.axial_slider = uicontrol('Parent',GUI,'Style','slider',...
1294       'Units','Normalized', Font, ...
1295       'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'center',...
1296       'BusyAction','queue',...
1297       'TooltipString','Axial slice navigation',...
1298       'Min',1,'Max',AVWVIEW.zdim,'SliderStep',slider_step,'Value',AVWVIEW.slices.axi,...
1299       'Callback','avw_view_ras([],[],''axial_slider'');');
1300   end
1301   handles.axial_sliderN = uicontrol('Parent',GUI,'Style','text',...
1302     'Units','Normalized', Font, ...
1303     'Position',[.65 GUIheight .03 .03], 'HorizontalAlignment', 'center',...
1304     'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
1305     'BusyAction','queue',...
1306     'TooltipString','Axial slice number',...
1307     'String',num2str(AVWVIEW.slices.axi),'Value',AVWVIEW.slices.axi);
1308   handles.axial_sliderT = uicontrol('Parent',GUI,'Style','text',...
1309     'Units','Normalized', Font, ...
1310     'Position',[.70 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1311     'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
1312     'BusyAction','queue',...
1313     'TooltipString','Axial slice navigation',...
1314     'String','Axial');
1315   
1316   handles.axial_xlim = get(handles.axial_axes,'Xlim');
1317   handles.axial_ylim = get(handles.axial_axes,'Ylim');
1318   handles.axial_xline = line('Xdata',[AVWVIEW.slices.sag AVWVIEW.slices.sag], ...
1319                              'Ydata',handles.axial_ylim, ...
1320                              'ButtonDownFcn','avw_view_ras([],[],''axial_image'');');
1321   handles.axial_yline = line('Ydata',[AVWVIEW.slices.cor AVWVIEW.slices.cor], ...
1322                              'Xdata',handles.axial_xlim, ...
1323                              'ButtonDownFcn','avw_view_ras([],[],''axial_image'');');
1324   set(handles.axial_xline,'Color','y','Tag','XLINE', 'Visible', 'off');
1325   set(handles.axial_yline,'Color','y','Tag','YLINE', 'Visible', 'off');
1326   
1327 end
1328 
1329 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1330 
1331 % Coronal Slice
1332 if AVWVIEW.xdim > 1 & AVWVIEW.zdim > 1,
1333   
1334   handles.coronal_subplot = subplot('position',[0.075 0.575 xPlotSize yPlotSize]);
1335   
1336   Scor = squeeze(avw.img(:,AVWVIEW.slices.cor,:));
1337   handles.coronal_image = imagesc([0,AVWVIEW.xdim],[0,AVWVIEW.zdim],Scor',AVWVIEW.clim);
1338   handles.coronal_axes = gca;
1339   set(gca,'YDir','normal','XLimMode','manual','YLimMode','manual',...
1340     'ClimMode','manual','YColor',[1 1 1],'XColor',[1 1 1])
1341   
1342   %xlabel('(Left <<) X (>> Right)')
1343   %xlabel('(Right <<) X (>> Left)')
1344   xlabel('Left ----- X ----- Right')
1345   ylabel('Z')
1346   title('Coronal','Color',[1 1 1])
1347   
1348   % This callback navigates with left click
1349   set(handles.coronal_image,'ButtonDownFcn','avw_view_ras([],[],''coronal_image'');');
1350   
1351   GUIheight = GUIheight - 0.04;
1352   
1353   if AVWVIEW.ydim > 1,
1354     slider_step(1) = 1/(AVWVIEW.ydim);
1355     slider_step(2) = 1/(AVWVIEW.ydim);
1356     handles.coronal_slider = uicontrol('Parent',GUI,'Style','slider',...
1357       'Units','Normalized', Font, ...
1358       'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'center',...
1359       'BusyAction','queue',...
1360       'TooltipString','Coronal slice navigation',...
1361       'Min',1,'Max',AVWVIEW.ydim,'SliderStep',slider_step,'Value',AVWVIEW.slices.cor,...
1362       'Callback','avw_view_ras([],[],''coronal_slider'');');
1363   end
1364   handles.coronal_sliderN = uicontrol('Parent',GUI,'Style','text',...
1365     'Units','Normalized', Font, ...
1366     'Position',[.65 GUIheight .03 .03], 'HorizontalAlignment', 'center',...
1367     'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
1368     'BusyAction','queue',...
1369     'TooltipString','Coronal slice number',...
1370     'String',num2str(AVWVIEW.slices.cor),'Value',AVWVIEW.slices.cor);
1371   handles.coronal_sliderT = uicontrol('Parent',GUI,'Style','text',...
1372     'Units','Normalized', Font, ...
1373     'Position',[.70 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1374     'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
1375     'BusyAction','queue',...
1376     'TooltipString','Coronal slice navigation',...
1377     'String','Coronal');
1378   
1379   handles.coronal_xlim = get(handles.coronal_axes,'Xlim');
1380   handles.coronal_ylim = get(handles.coronal_axes,'Ylim');
1381   handles.coronal_xline = line('Xdata',[AVWVIEW.slices.sag AVWVIEW.slices.sag],...
1382                                'Ydata',handles.coronal_ylim, ...
1383                                'ButtonDownFcn','avw_view_ras([],[],''coronal_image'');');
1384   handles.coronal_yline = line('Ydata',[AVWVIEW.slices.axi AVWVIEW.slices.axi], ...
1385                                'Xdata',handles.coronal_xlim, ...
1386                                'ButtonDownFcn','avw_view_ras([],[],''coronal_image'');');
1387   set(handles.coronal_xline,'Color','y','Tag','XLINE', 'Visible', 'off');
1388   set(handles.coronal_yline,'Color','y','Tag','YLINE', 'Visible', 'off');
1389   
1390 end
1391 
1392 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1393 
1394 % Sagittal Slice
1395 if AVWVIEW.ydim > 1 & AVWVIEW.zdim > 1,
1396   
1397   handles.sagittal_subplot = subplot('position',[0.575 0.575 xPlotSize yPlotSize]);
1398   
1399   Ssag = squeeze(avw.img(AVWVIEW.slices.sag,:,:));
1400   handles.sagittal_image = imagesc([0,AVWVIEW.ydim],[0,AVWVIEW.zdim],Ssag',AVWVIEW.clim);
1401   
1402   handles.sagittal_axes = gca;
1403   set(gca,'YDir','normal','XLimMode','manual','YLimMode','manual',...
1404     'ClimMode','manual','YColor',[1 1 1],'XColor',[1 1 1])
1405   
1406   xlabel('Y')
1407   ylabel('Z')
1408   title('Sagittal','Color',[1 1 1])
1409   
1410   % This callback navigates with mouse click
1411   set(handles.sagittal_image,'ButtonDownFcn','avw_view_ras([],[],''sagittal_image'');');
1412   
1413   GUIheight = GUIheight - 0.04;
1414   
1415   if AVWVIEW.xdim > 1,
1416     slider_step(1) = 1/(AVWVIEW.xdim);
1417     slider_step(2) = 1/(AVWVIEW.xdim);
1418     handles.sagittal_slider = uicontrol('Parent',GUI,'Style','slider',...
1419       'Units','Normalized', Font, ...
1420       'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'center',...
1421       'BusyAction','queue',...
1422       'TooltipString','Sagittal slice navigation',...
1423       'Min',1,'Max',AVWVIEW.xdim,'SliderStep',slider_step,'Value',AVWVIEW.slices.sag,...
1424       'Callback','avw_view_ras([],[],''sagittal_slider'');');
1425   end
1426   handles.sagittal_sliderN = uicontrol('Parent',GUI,'Style','text',...
1427     'Units','Normalized', Font, ...
1428     'Position',[.65 GUIheight .03 .03], 'HorizontalAlignment', 'center',...
1429     'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
1430     'BusyAction','queue',...
1431     'TooltipString','Sagittal slice number',...
1432     'String',num2str(AVWVIEW.slices.sag),'Value',AVWVIEW.slices.sag);
1433   handles.sagittal_sliderT = uicontrol('Parent',GUI,'Style','text',...
1434     'Units','Normalized', Font, ...
1435     'Position',[.70 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1436     'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
1437     'BusyAction','queue',...
1438     'TooltipString','Sagittal slice navigation',...
1439     'String','Sagittal');
1440   
1441   handles.sagittal_xlim = get(handles.sagittal_axes,'Xlim');
1442   handles.sagittal_ylim = get(handles.sagittal_axes,'Ylim');
1443   handles.sagittal_xline = line('Xdata',[AVWVIEW.slices.cor AVWVIEW.slices.cor], ...
1444                                 'Ydata',handles.sagittal_ylim, ...
1445                                 'ButtonDownFcn','avw_view_ras([],[],''sagittal_image'');');
1446   handles.sagittal_yline = line('Ydata',[AVWVIEW.slices.axi AVWVIEW.slices.axi], ...
1447                                 'Xdata',handles.sagittal_xlim, ...
1448                                 'ButtonDownFcn','avw_view_ras([],[],''sagittal_image'');');
1449   set(handles.sagittal_xline,'Color','y','Tag','XLINE', 'Visible', 'off');
1450   set(handles.sagittal_yline,'Color','y','Tag','YLINE', 'Visible', 'off');
1451   
1452 end
1453 
1454 
1455 
1456 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1457 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1458 % Image Contex Menus
1459 
1460 menu=uicontextmenu;
1461 
1462 % enable right click access to ROI tools
1463 roi = uimenu(menu,'Label','ROI');
1464 uimenu(roi,'Label','ROI (9x9x9 block)','Callback','avw_view_ras([],[],''roi_9'');');
1465 uimenu(roi,'Label','ROI (7x7x7 block)','Callback','avw_view_ras([],[],''roi_7'');');
1466 uimenu(roi,'Label','ROI (5x5x5 block)','Callback','avw_view_ras([],[],''roi_5'');');
1467 uimenu(roi,'Label','ROI (3x3x3 block)','Callback','avw_view_ras([],[],''roi_3'');');
1468 
1469 % save image to graphics file
1470 uimenu(menu,'Label','Save Image','Callback','avw_view_ras([],[],''save_image'');');
1471 
1472 % zoom image to new figure
1473 uimenu(menu,'Label','Zoom Image','Callback','avw_view_ras([],[],''zoom'');');
1474 
1475 if isfield(handles,'axial_image'),
1476   if isempty(get(handles.axial_image,'uicontextmenu')),
1477     set(handles.axial_image,'uicontextmenu',menu);
1478   end
1479 end
1480 if isfield(handles,'coronal_image'),
1481   if isempty(get(handles.coronal_image,'uicontextmenu')),
1482     set(handles.coronal_image,'uicontextmenu',menu);
1483   end
1484 end
1485 if isfield(handles,'sagittal_image'),
1486   if isempty(get(handles.sagittal_image,'uicontextmenu')),
1487     set(handles.sagittal_image,'uicontextmenu',menu);
1488   end
1489 end
1490 
1491 
1492 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1493 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1494 
1495 % Image Intensity at Mouse Click
1496 
1497 GUIheight = GUIheight - 0.04;
1498 
1499 handles.Timval = uicontrol('Parent',GUI,'Style','text','Units','Normalized', Font, ...
1500   'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1501   'BackgroundColor', [0 0 0],...
1502   'ForegroundColor', [1 1 1],...
1503   'BusyAction','queue',...
1504   'String','Image Intensity');
1505 handles.imval = uicontrol('Parent',GUI,'Style','text','Units','Normalized', Font, ...
1506   'Position',[.65 GUIheight .15 .03], 'HorizontalAlignment', 'right',...
1507   'BackgroundColor', [0 0 0],...
1508   'ForegroundColor', [1 1 1],...
1509   'BusyAction','queue',...
1510   'String','x','Value',0);
1511 
1512 % Image Position at Mouse Click
1513 
1514 GUIheight = GUIheight - 0.04;
1515 
1516 handles.Timpos = uicontrol('Parent',GUI,'Style','text','Units','Normalized', Font, ...
1517   'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1518   'BackgroundColor', [0 0 0],...
1519   'ForegroundColor', [1 1 1],...
1520   'BusyAction','queue',...
1521   'String','Image Position');
1522 handles.impos = uicontrol('Parent',GUI,'Style','text','Units','Normalized', Font, ...
1523   'Position',[.65 GUIheight .15 .03], 'HorizontalAlignment', 'right',...
1524   'BackgroundColor', [0 0 0],...
1525   'ForegroundColor', [1 1 1],...
1526   'BusyAction','queue',...
1527   'String','xyz','Value',[0 0 0]);
1528 
1529 
1530 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1531 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1532 
1533 GUIheight = GUIheight - 0.04;
1534 
1535 %handles.flip = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1536 %  'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1537 %  'BackgroundColor', [.3 .3 .3],'ForegroundColor', [0 0 0],...
1538 %  'BusyAction','queue',...
1539 %  'TooltipString','Flip Left and Right (viewer only, see also avw_flip).',...
1540 %  'String','Flip L/R',...
1541 %  'Callback','avw_view_ras([],[],''flip'');');
1542 handles.flipStatus = uicontrol('Parent',GUI,'Style','text','Units','Normalized', Font, ...
1543   'Position',[.65 GUIheight .15 .03], 'HorizontalAlignment', 'right',...
1544   'BackgroundColor', [0 0 0],...
1545   'ForegroundColor', [1 1 1],...
1546   'BusyAction','queue',...
1547   'TooltipString','Flipped Status',...
1548   'String','L>>R (neurological)');
1549 
1550 
1551 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1552 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1553 
1554 % % AC Location
1555 %
1556 % GUIheight = GUIheight - 0.04;
1557 %
1558 % handles.Tac = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1559 %   'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1560 %   'BackgroundColor', [.3 .3 .3],...
1561 %   'ForegroundColor', [0 0 0],...
1562 %   'BusyAction','queue',...
1563 %   'TooltipString','AC point in (voxels) or (meter offset from center of volume)',...
1564 %   'String','AC Point',...
1565 %   'Callback','avw_view_ras([],[],''ac'');');
1566 % handles.ac = uicontrol('Parent',GUI,'Style','text','Units','Normalized', Font, ...
1567 %   'Position',[.65 GUIheight .15 .03], 'HorizontalAlignment', 'right',...
1568 %   'BackgroundColor', [0 0 0],...
1569 %   'ForegroundColor', [1 1 1],...
1570 %   'BusyAction','queue',...
1571 %   'TooltipString','These values are offset from volume center.',...
1572 %   'String','x,y,z');
1573 
1574 % Nasion Location
1575 
1576 GUIheight = GUIheight - 0.04;
1577 
1578 handles.Tnasion = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1579   'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1580   'BackgroundColor', [.3 .3 .3],...
1581   'ForegroundColor', [0 0 0],...
1582   'BusyAction','queue',...
1583   'TooltipString','Update Nasion - should be toward +Y',...
1584   'String','Fiducial: Nasion',...
1585   'Callback','avw_view_ras([],[],''nasion'');');
1586 handles.nasion = uicontrol('Parent',GUI,'Style','text','Units','Normalized', Font, ...
1587   'Position',[.65 GUIheight .15 .03], 'HorizontalAlignment', 'right',...
1588   'BackgroundColor', [0 0 0],...
1589   'ForegroundColor', [1 1 1],...
1590   'BusyAction','queue',...
1591   'TooltipString','These values are offset from volume center, should be toward +Y',...
1592   'String','x,y,z');
1593 
1594 % Right Preauricular Location
1595 
1596 GUIheight = GUIheight - 0.04;
1597 
1598 handles.Trpa = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1599   'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1600   'BackgroundColor', [.3 .3 .3],...
1601   'ForegroundColor', [0 0 0],...
1602   'BusyAction','queue',...
1603   'TooltipString','Update Right Preauricular - should be toward +X',...
1604   'String','Fiducial: RPA',...
1605   'Callback','avw_view_ras([],[],''rpa'');');
1606 handles.rpa = uicontrol('Parent',GUI,'Style','text','Units','Normalized', Font, ...
1607   'Position',[.65 GUIheight .15 .03], 'HorizontalAlignment', 'right',...
1608   'BackgroundColor', [0 0 0],...
1609   'ForegroundColor', [1 1 1],...
1610   'BusyAction','queue',...
1611   'TooltipString','These values are offset from volume center, should be toward +X',...
1612   'String','x,y,z');
1613 
1614 % Left Preauricular Location
1615 
1616 GUIheight = GUIheight - 0.04;
1617 
1618 handles.Tlpa = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1619   'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1620   'BackgroundColor', [.3 .3 .3],...
1621   'ForegroundColor', [0 0 0],...
1622   'BusyAction','queue',...
1623   'TooltipString','Update Left Preauricular - should be toward -X',...
1624   'String','Fiducial: LPA',...
1625   'Callback','avw_view_ras([],[],''lpa'');');
1626 handles.lpa = uicontrol('Parent',GUI,'Style','text','Units','Normalized', Font, ...
1627   'Position',[.65 GUIheight .15 .03], 'HorizontalAlignment', 'right',...
1628   'BackgroundColor', [0 0 0],...
1629   'ForegroundColor', [1 1 1],...
1630   'BusyAction','queue',...
1631   'TooltipString','These values are offset from volume center, should be toward -X',...
1632   'String','x,y,z');
1633 
1634 
1635 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1636 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1637 
1638 %GUIheight = GUIheight - 0.04;
1639 
1640 %handles.contrast = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1641 %  'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1642 %  'BackgroundColor', [.3 .3 .3],'ForegroundColor', [0 0 0],...
1643 %  'BusyAction','queue',...
1644 %  'TooltipString','Auto contrast with gray colormap',...
1645 %  'String','Auto Contrast',...
1646 %  'Callback','avw_view_ras([],[],''contrast'');');
1647 
1648 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1649 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1650 
1651 GUIheight = GUIheight - 0.04;
1652 
1653 handles.dimmer = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1654   'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1655   'BackgroundColor', [.3 .3 .3],'ForegroundColor', [0 0 0],...
1656   'BusyAction','queue',...
1657   'TooltipString','Dim by 1%',...
1658   'String','Dimmer',...
1659   'Callback','avw_view_ras([],[],''dimmer'');');
1660 
1661 handles.brighter = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1662   'Position',[.65 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1663   'BackgroundColor', [.3 .3 .3],'ForegroundColor', [0 0 0],...
1664   'BusyAction','queue',...
1665   'TooltipString','Brighten by 1%',...
1666   'String','Brighter',...
1667   'Callback','avw_view_ras([],[],''brighter'');');
1668 
1669 handles.clim = uicontrol('Parent',GUI,'Style','edit','Units','Normalized', Font, ...
1670   'Position',[.75 GUIheight .06 .03], 'HorizontalAlignment', 'right',...
1671   'BackgroundColor', [0 0 0],...
1672   'ForegroundColor', [1 1 1],...
1673   'BusyAction','queue',...
1674   'TooltipString','Image intensity Climit (inverse brightness)',...
1675   'String',num2str(AVWVIEW.clim(2)),...
1676   'Callback','avw_view_ras([],[],''setClimit'');');
1677 
1678 handles.cmap = uicontrol('Parent',GUI,'Style','popup','Units','Normalized', Font, ...
1679   'Position',[.82 GUIheight .06 .03], 'HorizontalAlignment', 'left',...
1680   'BackgroundColor', [0 0 0],...
1681   'ForegroundColor', [1 1 1],...
1682   'BusyAction','queue',...
1683   'TooltipString','Color Map',...
1684   'String',{'gray','bone','copper','hot','cool','spring','summer','autumn','winter','hsv','jet'},...
1685   'Callback','avw_view_ras([],[],''setCmap'');');
1686 
1687 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1688 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1689 
1690 GUIheight = 0.46;
1691 
1692 handles.crosshairs = uicontrol('Parent',GUI,'Style','checkbox','Units','Normalized', Font, ...
1693   'Position',[.85 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1694   'BackgroundColor', [.3 .3 .3],'ForegroundColor', [0 0 0],...
1695   'BusyAction','queue',...
1696   'TooltipString','Toggle Crosshairs on/off',...
1697   'String','Crosshairs','Value',1,...
1698   'Callback','avw_view_ras([],[],''crosshairs'');');
1699 
1700 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1701 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1702 
1703 GUIheight = GUIheight - 0.04;
1704 
1705 handles.histogram = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1706   'Position',[.85 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1707   'BackgroundColor', [.3 .3 .3],'ForegroundColor', [0 0 0],...
1708   'BusyAction','queue',...
1709   'TooltipString','Histogram of Volume Intensity',...
1710   'String','Histogram',...
1711   'Callback','avw_view_ras([],[],''histogram'');');
1712 
1713 
1714 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1715 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1716 
1717 GUIheight = GUIheight - 0.04;
1718 
1719 handles.coord = uicontrol('Parent',GUI,'Style','popupmenu','Units','Normalized', Font, ...
1720   'Position',[.85 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
1721   'BackgroundColor', [.3 .3 .3],'ForegroundColor', [0 0 0],...
1722   'BusyAction','queue',...
1723   'TooltipString','Voxel or Mensurated Axis Coordinates',...
1724   'String',{'Voxels','mm','meters'},...
1725   'Callback','avw_view_ras([],[],''coordinates'');');
1726 
1727 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1728 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1729 
1730 Font.FontWeight = 'bold';
1731 
1732 % View avw.hdr
1733 % handles.Bhdr = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1734 %   'Position',[.90 .09 .09 .03],...
1735 %   'String','HDR','BusyAction','queue',...
1736 %   'TooltipString','View the .hdr parameters.',...
1737 %   'BackgroundColor',[0.0 0.0 0.5],...
1738 %   'ForegroundColor',[0 0 0], 'HorizontalAlignment', 'center',...
1739 %   'Callback',strcat('AVWVIEW = get(gcbf,''Userdata''); ',...
1740 %   'avw_view_hdr(AVWVIEW.avw,AVWVIEW.gui);',...
1741 %   'clear AVWVIEW;'));
1742 
1743 % Save: Save fiducials
1744 handles.Bquit = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1745   'Position',[.70 .01 .15 .05],...
1746   'String','Save fiducials','BusyAction','queue',...
1747   'BackgroundColor',[0.0 0.5 0.0],...
1748   'ForegroundColor', [0 0 0], 'HorizontalAlignment', 'center',...
1749   'Callback','avw_view_ras([],[],''save'');');
1750 
1751 % Close: application end
1752 handles.Bclose = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
1753   'Position',[.88 .01 .10 .05],...
1754   'String','Close','BusyAction','queue',...
1755   'BackgroundColor',[0.0 0.5 0.0],...
1756   'ForegroundColor', [0 0 0], 'HorizontalAlignment', 'center',...
1757   'Callback','avw_view_ras([],[],''close'');');
1758 
1759 % Update the gui_struct handles for this gui
1760 if exist('parent','var'), AVWVIEW.parent.gui = parent; end
1761 AVWVIEW.avw = avw;
1762 AVWVIEW.handles = handles;
1763 set(AVWVIEW.gui,'Userdata',AVWVIEW);
1764 set(AVWVIEW.gui,'HandleVisibility','callback');
1765 
1766 return
1767 
1768 
1769 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1770 function slice_img(avw),
1771 
1772 figure
1773 xslice = 128;
1774 slice = squeeze( avw.img(xslice,:,:) );
1775 imagesc(slice); axis image; colormap('gray')
1776 figure
1777 yslice = 128;
1778 slice = squeeze( avw.img(:,yslice,:) );
1779 imagesc(slice); axis image; colormap('gray')
1780 figure
1781 zslice = 128;
1782 slice = squeeze( avw.img(:,:,zslice) );
1783 imagesc(slice); axis image; colormap('gray')
1784 
1785 return

Generated on Mon 22-May-2023 06:53:56 by m2html © 2005