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

📄 view_nii.m

📁 Please read your package and describe it at least 40 bytes. System will automatically delete the di
💻 M
📖 第 1 页 / 共 5 页
字号:
         if length(opt.setvalue.idx(:)) ~= length(opt.setvalue.val(:))
            error('length of idx and val fields should be the same');
         end

         if ~strcmpi(class(opt.setvalue.idx),'single')
            opt.setvalue.idx = single(opt.setvalue.idx);
         end

         if ~strcmpi(class(opt.setvalue.val),'single')
            opt.setvalue.val = single(opt.setvalue.val);
         end
      end

      if isfield(opt,'glblocminmax')
         glblocminmax = opt.glblocminmax;
      end

      if isfield(opt,'setbuttondown')
         setbuttondown = opt.setbuttondown;
      end

      if isfield(opt,'setcomplex')
         setcomplex = opt.setcomplex;
      end

   end

   switch command

   case {'init'}

      set(fig, 'InvertHardcopy','off');
      set(fig, 'PaperPositionMode','auto');

      fig = init(nii, fig, setarea, setunit, setviewpoint, setscanid, setbuttondown, ...
         setcolorindex, setcolormap, setcolorlevel, sethighcolor, setcbarminmax, ...
         usecolorbar, usepanel, usecrosshair, usestretch, useimagesc, useinterp, ...
         setvalue, glblocminmax, setcrosshaircolor, setcomplex);

      %  get status
      %
      status = get_status(fig);

   case {'update'}

      nii_view = getappdata(fig,'nii_view');
      h = fig;

      if isempty(nii_view)
         error('The figure should already contain a 3-View plot.');
      end

      if ~isempty(opt)

         %  Order of the following update matters.
         %
         update_shape(h, setarea, usecolorbar, usestretch, useimagesc);
         update_useinterp(h, useinterp);
         update_useimagesc(h, useimagesc);
         update_usepanel(h, usepanel);
         update_colorindex(h, setcolorindex);
         update_colormap(h, setcolormap);
         update_highcolor(h, sethighcolor, setcolorlevel);
         update_cbarminmax(h, setcbarminmax);
         update_unit(h, setunit);
         update_viewpoint(h, setviewpoint);
         update_scanid(h, setscanid);
         update_buttondown(h, setbuttondown);
         update_crosshaircolor(h, setcrosshaircolor);
         update_usecrosshair(h, usecrosshair);

         %  Enable/Disable object
         %
         update_enable(h, opt);

      end

      %  get status
      %
      status = get_status(h);

   case {'updateimg'}

      if ~exist('nii','var')
         msg = sprintf('Please input a 3D matrix brain data');
         error(msg);
      end

      %  Note: nii is not nii, nii should be a 3D matrix here
      %
      if ~isnumeric(nii)
         msg = sprintf('2nd parameter should be a 3D matrix, not nii struct');
         error(msg);
      end

      nii_view = getappdata(fig,'nii_view');

      if isempty(nii_view)
         error('The figure should already contain a 3-View plot.');
      end

      img = nii;
      update_img(img, fig, opt);

      %  get status
      %
      status = get_status(fig);

   case {'updatenii'}

      nii_view = getappdata(fig,'nii_view');

      if isempty(nii_view)
         error('The figure should already contain a 3-View plot.');
      end

      if ~isstruct(nii) | ~isfield(nii,'hdr') | ~isfield(nii,'img')
         error('2nd parameter should be nii struct');
      end

      if isfield(nii,'untouch') & nii.untouch == 1
         error('Usage: please use ''load_nii.m'' to load the structure.');
      end

      opt.command = 'clearnii';
      view_nii(fig, opt);

      opt.command = 'init';
      view_nii(fig, nii, opt);

      %  get status
      %
      status = get_status(fig);

   case {'clearnii'}

      nii_view = getappdata(fig,'nii_view');

      handles = struct2cell(nii_view.handles);

      for i=1:length(handles)
         if ishandle(handles{i})	% in case already del by parent
            delete(handles{i});
         end
      end

      rmappdata(fig,'nii_view');
      buttonmotion = get(fig,'windowbuttonmotion');
      mymotion = '; view_nii(''move_cursor'');';
      buttonmotion = strrep(buttonmotion, mymotion, '');
      set(fig, 'windowbuttonmotion', buttonmotion);

   case {'axial_image','coronal_image','sagittal_image'}    

      switch command
         case 'axial_image',    view = 'axi'; axi = 0; cor = 1; sag = 1;
         case 'coronal_image',  view = 'cor'; axi = 1; cor = 0; sag = 1;
         case 'sagittal_image', view = 'sag'; axi = 1; cor = 1; sag = 0;
      end

      nii_view = getappdata(fig,'nii_view');
      nii_view = get_slice_position(nii_view,view);

      if isfield(nii_view, 'disp')
         img = nii_view.disp;
      else
         img = nii_view.nii.img;
      end

      %  CData must be double() for Matlab 6.5 for Windows
      %
      if axi,
         if isfield(nii_view.handles,'axial_bg') & ~isempty(nii_view.handles.axial_bg) & nii_view.useinterp
            Saxi = squeeze(nii_view.bgimg(:,:,nii_view.slices.axi));
            set(nii_view.handles.axial_bg,'CData',Saxi');
         end

         if isfield(nii_view.handles,'axial_image'),
            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
               Saxi = squeeze(img(:,:,nii_view.slices.axi,:,nii_view.scanid));
               Saxi = permute(Saxi, [2 1 3]);
            else
               Saxi = squeeze(img(:,:,nii_view.slices.axi,nii_view.scanid));
               Saxi = Saxi';
            end

            set(nii_view.handles.axial_image,'CData',Saxi);
         end

         if isfield(nii_view.handles,'axial_slider'),
            set(nii_view.handles.axial_slider,'Value',nii_view.slices.axi);
         end;
       end

       if cor,
         if isfield(nii_view.handles,'coronal_bg') & ~isempty(nii_view.handles.coronal_bg) & nii_view.useinterp
            Scor = squeeze(nii_view.bgimg(:,nii_view.slices.cor,:));
            set(nii_view.handles.coronal_bg,'CData',Scor');
         end

         if isfield(nii_view.handles,'coronal_image'),
            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
               Scor = squeeze(img(:,nii_view.slices.cor,:,:,nii_view.scanid));
               Scor = permute(Scor, [2 1 3]);
            else
               Scor = squeeze(img(:,nii_view.slices.cor,:,nii_view.scanid));
               Scor = Scor';
            end

            set(nii_view.handles.coronal_image,'CData',Scor);
         end

         if isfield(nii_view.handles,'coronal_slider'),
            slider_val = nii_view.dims(2) - nii_view.slices.cor + 1;
            set(nii_view.handles.coronal_slider,'Value',slider_val);
         end;
      end;

      if sag,
         if isfield(nii_view.handles,'sagittal_bg') & ~isempty(nii_view.handles.sagittal_bg) & nii_view.useinterp
            Ssag = squeeze(nii_view.bgimg(nii_view.slices.sag,:,:));
            set(nii_view.handles.sagittal_bg,'CData',Ssag');
         end

         if isfield(nii_view.handles,'sagittal_image'),
            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
               Ssag = squeeze(img(nii_view.slices.sag,:,:,:,nii_view.scanid));
               Ssag = permute(Ssag, [2 1 3]);
            else
               Ssag = squeeze(img(nii_view.slices.sag,:,:,nii_view.scanid));
               Ssag = Ssag';
            end

            set(nii_view.handles.sagittal_image,'CData',Ssag);
         end

         if isfield(nii_view.handles,'sagittal_slider'),
            set(nii_view.handles.sagittal_slider,'Value',nii_view.slices.sag);
         end;
      end;

      update_nii_view(nii_view);

      if ~isempty(nii_view.buttondown)
         eval(nii_view.buttondown);
      end
    
   case {'axial_slider','coronal_slider','sagittal_slider'},
    
      switch command
         case 'axial_slider',    view = 'axi'; axi = 1; cor = 0; sag = 0;
         case 'coronal_slider',  view = 'cor'; axi = 0; cor = 1; sag = 0;
         case 'sagittal_slider', view = 'sag'; axi = 0; cor = 0; sag = 1;
      end

      nii_view = getappdata(fig,'nii_view');
      nii_view = get_slider_position(nii_view);

      if isfield(nii_view, 'disp')
         img = nii_view.disp;
      else
         img = nii_view.nii.img;
      end

      if axi,
         if isfield(nii_view.handles,'axial_bg') & ~isempty(nii_view.handles.axial_bg) & nii_view.useinterp
            Saxi = squeeze(nii_view.bgimg(:,:,nii_view.slices.axi));
            set(nii_view.handles.axial_bg,'CData',Saxi');
         end

         if isfield(nii_view.handles,'axial_image'),
            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
               Saxi = squeeze(img(:,:,nii_view.slices.axi,:,nii_view.scanid));
               Saxi = permute(Saxi, [2 1 3]);
            else
               Saxi = squeeze(img(:,:,nii_view.slices.axi,nii_view.scanid));
               Saxi = Saxi';
            end

            set(nii_view.handles.axial_image,'CData',Saxi);
         end

         if isfield(nii_view.handles,'axial_slider'),
            set(nii_view.handles.axial_slider,'Value',nii_view.slices.axi);
         end
      end

      if cor,
         if isfield(nii_view.handles,'coronal_bg') & ~isempty(nii_view.handles.coronal_bg) & nii_view.useinterp
            Scor = squeeze(nii_view.bgimg(:,nii_view.slices.cor,:));
            set(nii_view.handles.coronal_bg,'CData',Scor');
         end

         if isfield(nii_view.handles,'coronal_image'),
            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
               Scor = squeeze(img(:,nii_view.slices.cor,:,:,nii_view.scanid));
               Scor = permute(Scor, [2 1 3]);
            else
               Scor = squeeze(img(:,nii_view.slices.cor,:,nii_view.scanid));
               Scor = Scor';
            end

            set(nii_view.handles.coronal_image,'CData',Scor);
         end

         if isfield(nii_view.handles,'coronal_slider'),
            slider_val = nii_view.dims(2) - nii_view.slices.cor + 1;
            set(nii_view.handles.coronal_slider,'Value',slider_val);
         end
      end    

      if sag,
         if isfield(nii_view.handles,'sagittal_bg') & ~isempty(nii_view.handles.sagittal_bg) & nii_view.useinterp
            Ssag = squeeze(nii_view.bgimg(nii_view.slices.sag,:,:));
            set(nii_view.handles.sagittal_bg,'CData',Ssag');
         end

         if isfield(nii_view.handles,'sagittal_image'),
            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
               Ssag = squeeze(img(nii_view.slices.sag,:,:,:,nii_view.scanid));
               Ssag = permute(Ssag, [2 1 3]);
            else
               Ssag = squeeze(img(nii_view.slices.sag,:,:,nii_view.scanid));
               Ssag = Ssag';
            end

            set(nii_view.handles.sagittal_image,'CData',Ssag);
         end

         if isfield(nii_view.handles,'sagittal_slider'),
            set(nii_view.handles.sagittal_slider,'Value',nii_view.slices.sag);
         end
      end

      update_nii_view(nii_view);

      if ~isempty(nii_view.buttondown)
         eval(nii_view.buttondown);
      end

   case {'impos_edit'}

      nii_view = getappdata(fig,'nii_view');
      impos = str2num(get(nii_view.handles.impos,'string'));

      if isfield(nii_view, 'disp')
         img = nii_view.disp;
      else
         img = nii_view.nii.img;
      end

      if isempty(impos) | ~all(size(impos) ==  [1 3])
         msg = 'Please use 3 numbers to represent X,Y and Z';
         msgbox(msg,'Error');
         return;
      end

      slices.sag = round(impos(1));
      slices.cor = round(impos(2));
      slices.axi = round(impos(3));

      nii_view = convert2voxel(nii_view,slices);
      nii_view = check_slices(nii_view);

      impos(1) = nii_view.slices.sag;
      impos(2) = nii_view.dims(2) - nii_view.slices.cor + 1;
      impos(3) = nii_view.slices.axi;

      if isfield(nii_view.handles,'sagittal_slider'),
         set(nii_view.handles.sagittal_slider,'Value',impos(1));
      end

      if isfield(nii_view.handles,'coronal_slider'),
         set(nii_view.handles.coronal_slider,'Value',impos(2));
      end

      if isfield(nii_view.handles,'axial_slider'),
         set(nii_view.handles.axial_slider,'Value',impos(3));
      end

      nii_view = get_slider_position(nii_view);
      update_nii_view(nii_view);

      if isfield(nii_view.handles,'axial_bg') & ~isempty(nii_view.handles.axial_bg) & nii_view.useinterp
         Saxi = squeeze(nii_view.bgimg(:,:,nii_view.slices.axi));
         set(nii_view.handles.axial_bg,'CData',Saxi');
      end

      if isfield(nii_view.handles,'axial_image'),
         if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
            Saxi = squeeze(img(:,:,nii_view.slices.axi,:,nii_view.scanid));
            Saxi = permute(Saxi, [2 1 3]);
         else
            Saxi = squeeze(img(:,:,nii_view.slices.axi,nii_view.scanid));
            Saxi = Saxi';
         end

         set(nii_view.handles.axial_image,'CData',Saxi);
      end

      if isfield(nii_view.handles,'axial_slider'),
         set(nii_view.handles.axial_slider,'Value',nii_view.slices.axi);
      end

      if isfield(nii_view.handles,'coronal_bg') & ~isempty(nii_view.handles.coronal_bg) & nii_view.useinterp
         Scor = squeeze(nii_view.bgimg(:,nii_view.slices.cor,:));
         set(nii_view.handles.coronal_bg,'CData',Scor');
      end

      if isfield(nii_view.handles,'coronal_image'),
         if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
            Scor = squeeze(img(:,nii_view.slices.cor,:,:,nii_view.scanid));
            Scor = permute(Scor, [2 1 3]);
         else
            Scor = squeeze(img(:,nii_view.slices.cor,:,nii_view.scanid));
            Scor = Scor';
         end

         set(nii_view.handles.coronal_image,'CData',Scor);
      end

      if isfield(nii_view.handles,'coronal_slider'),
         slider_val = nii_view.dims(2) - nii_view.slices.cor + 1;
         set(nii_view.handles.coronal_slider,'Value',slider_val);
      end

      if isfield(nii_view.handles,'sagittal_bg') & ~isempty(nii_view.handles.sagittal_bg) & nii_view.useinterp
         Ssag = squeeze(nii_view.bgimg(nii_view.slices.sag,:,:));
         set(nii_view.handles.sagittal_bg,'CData',Ssag');
      end

⌨️ 快捷键说明

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