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

📄 view_nii.m

📁 Please read your package and describe it at least 40 bytes. System will automatically delete the di
💻 M
📖 第 1 页 / 共 5 页
字号:

      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

      axes(nii_view.handles.axial_axes);
      axes(nii_view.handles.coronal_axes);
      axes(nii_view.handles.sagittal_axes);

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

   case 'coordinates',

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

   case 'crosshair',

      nii_view = getappdata(fig,'nii_view');

      if get(nii_view.handles.xhair,'value') == 2		% off
         set(nii_view.axi_xhair.lx,'visible','off');
         set(nii_view.axi_xhair.ly,'visible','off');
         set(nii_view.cor_xhair.lx,'visible','off');
         set(nii_view.cor_xhair.ly,'visible','off');
         set(nii_view.sag_xhair.lx,'visible','off');
         set(nii_view.sag_xhair.ly,'visible','off');
      else
         set(nii_view.axi_xhair.lx,'visible','on');
         set(nii_view.axi_xhair.ly,'visible','on');
         set(nii_view.cor_xhair.lx,'visible','on');
         set(nii_view.cor_xhair.ly,'visible','on');
         set(nii_view.sag_xhair.lx,'visible','on');
         set(nii_view.sag_xhair.ly,'visible','on');

         set(nii_view.handles.axial_axes,'selected','on');
         set(nii_view.handles.axial_axes,'selected','off');
         set(nii_view.handles.coronal_axes,'selected','on');
         set(nii_view.handles.coronal_axes,'selected','off');
         set(nii_view.handles.sagittal_axes,'selected','on');
         set(nii_view.handles.sagittal_axes,'selected','off');
      end

   case 'xhair_color',

      old_color = get(gcbo,'user');
      new_color = uisetcolor(old_color);
      update_crosshaircolor(fig, new_color);

   case {'color','contrast_def'}

      nii_view = getappdata(fig,'nii_view');

      if nii_view.numscan == 1
         if get(nii_view.handles.colorindex,'value') == 2
            set(nii_view.handles.contrast,'value',128);
         elseif get(nii_view.handles.colorindex,'value') == 3
            set(nii_view.handles.contrast,'value',1);
         end
      end

      [custom_color_map, custom_colorindex] = change_colormap(fig);

      if strcmpi(command, 'color')

         setcolorlevel = nii_view.colorlevel;

         if ~isempty(custom_color_map)		% isfield(nii_view, 'color_map')
            setcolormap = custom_color_map;	% nii_view.color_map;
         else
            setcolormap = [];
         end

         if isfield(nii_view, 'highcolor')
            sethighcolor = nii_view.highcolor;
         else
            sethighcolor = [];
         end

         redraw_cbar(fig, setcolorlevel, setcolormap, sethighcolor);

         if nii_view.numscan == 1 & ...
		(custom_colorindex < 2 | custom_colorindex > 3)
            contrastopt.enablecontrast = 0;
         else
            contrastopt.enablecontrast = 1;
         end

         update_enable(fig, contrastopt);

      end

   case {'neg_color','brightness','contrast'}

      change_colormap(fig);

   case {'brightness_def'}

      nii_view = getappdata(fig,'nii_view');
      set(nii_view.handles.brightness,'value',0);
      change_colormap(fig);

   case 'hist_plot'

      hist_plot(fig);

   case 'hist_eq'

      hist_eq(fig);

   case 'move_cursor'

      move_cursor(fig);

   case 'edit_change_scan'

      change_scan('edit_change_scan');

   case 'slider_change_scan'

      change_scan('slider_change_scan');

   end

   return;						% view_nii


%----------------------------------------------------------------
function fig = init(nii, fig, area, setunit, setviewpoint, setscanid, buttondown, ...
         colorindex, color_map, colorlevel, highcolor, cbarminmax, ...
         usecolorbar, usepanel, usecrosshair, usestretch, useimagesc, ...
         useinterp, setvalue, glblocminmax, setcrosshaircolor, ...
         setcomplex)

   %  Support data type COMPLEX64 & COMPLEX128
   %
   if nii.hdr.dime.datatype == 32 | nii.hdr.dime.datatype == 1792
      switch setcomplex,
      case 0,
         nii.img = real(nii.img);
      case 1,
         nii.img = imag(nii.img);
      case 2,
         if isa(nii.img, 'double')
            nii.img = abs(double(nii.img));
         else
            nii.img = single(abs(double(nii.img)));
         end
      end
   end

   if isempty(area)
      area = [0.05 0.05 0.9 0.9];
   end

   if isempty(setscanid)
      setscanid = 1;
   else
      setscanid = round(setscanid);

      if setscanid < 1
         setscanid = 1;
      end

      if setscanid > nii.hdr.dime.dim(5)
         setscanid = nii.hdr.dime.dim(5);
      end
   end

   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
      usecolorbar = 0;
   elseif isempty(usecolorbar)
      usecolorbar = 1;
   end

   if isempty(usepanel)
      usepanel = 1;
   end

   if isempty(usestretch)
      usestretch = 1;
   end

   if isempty(useimagesc)
      useimagesc = 1;
   end

   if isempty(useinterp)
      useinterp = 0;
   end

   if isempty(colorindex)
      tmp = min(nii.img(:,:,:,setscanid));

      if  min(tmp(:)) < 0
         colorindex = 2;
         setcrosshaircolor = [1 1 0];
      else
         colorindex = 3;
      end
   end

   if isempty(color_map) | ischar(color_map)
      color_map = [];
   else
      colorindex = 1;
   end

   bgimg = [];

   if ~isempty(glblocminmax)
      minvalue = glblocminmax(1);
      maxvalue = glblocminmax(2);
   else
      minvalue = double(min(nii.img(:,:,:,setscanid)));
      minvalue = min(minvalue(:));
      maxvalue = double(max(nii.img(:,:,:,setscanid)));
      maxvalue = max(maxvalue(:));
   end

   if ~isempty(setvalue)
      if ~isempty(glblocminmax)
         minvalue = glblocminmax(1);
         maxvalue = glblocminmax(2);
      else
         minvalue = double(min(setvalue.val));
         maxvalue = double(max(setvalue.val));
      end

      bgimg = double(nii.img);
      minbg = double(min(bgimg(:)));
      maxbg = double(max(bgimg(:)));

      bgimg = scale_in(bgimg, minbg, maxbg, 54) + 200;	% scale to 202~256 (level 201 is used for highcolor part tolerance)

      %  55 level for brain structure (paded 0 for highcolor level 1, i.e. normal level 201, to make 56 highcolor)
      %
      highcolor = [zeros(1,3);gray(55)];
      cbarminmax = [minvalue maxvalue];

      if useinterp

         %  scale signal data to 1~200
         %
         nii.img = repmat(nan, size(nii.img));
         nii.img(setvalue.idx) = setvalue.val;

         %  199 level for source image (map highest color to 199 instead of 200, give 1 level of tolerance)
         %
         bgimg = single(scale_out(bgimg, cbarminmax(1), cbarminmax(2), 198));
      else

         bgimg(setvalue.idx) = 0;

         %  scale signal data to 1~200
         %
         nii.img = zeros(size(nii.img));
         nii.img(setvalue.idx) = scale_in(setvalue.val, minvalue, maxvalue, 198);
         nii.img = nii.img + bgimg;
         bgimg = [];
         nii.img = scale_out(nii.img, cbarminmax(1), cbarminmax(2), 198);

         minvalue = double(min(nii.img(:)));
         maxvalue = double(max(nii.img(:)));

         if ~isempty(glblocminmax)		% maxvalue is gray
            minvalue = glblocminmax(1);
         end

      end

      colorindex = 2;
      setcrosshaircolor = [1 1 0];

   end

   if isempty(highcolor) | ischar(highcolor)
      highcolor = [];
      num_highcolor = 0;
   else
      num_highcolor = size(highcolor,1);
   end

   if isempty(colorlevel)
      colorlevel = 256 - num_highcolor;
   end

   if usecolorbar
      cbar_area = area;
      cbar_area(1) = area(1) + area(3)*0.93;
      cbar_area(3) = area(3)*0.04;
      area(3) = area(3)*0.9;		% 90% used for main axes
   else
      cbar_area = [];
   end

   %  init color (gray) scaling to make sure the slice clim take the
   %  global clim [min(nii.img(:)) max(nii.img(:))]
   %
   if isempty(bgimg)
      clim = [minvalue maxvalue];
   else
      clim = [minvalue double(max(bgimg(:)))];
   end

   if clim(1) == clim(2)
      clim(2) = clim(1) + 0.000001;
   end

   if isempty(cbarminmax)
      cbarminmax = [minvalue maxvalue];
   end

   xdim = size(nii.img, 1);
   ydim = size(nii.img, 2);
   zdim = size(nii.img, 3);

   dims = [xdim ydim zdim];
   voxel_size = abs(nii.hdr.dime.pixdim(2:4));		% vol in mm

   if any(voxel_size <= 0)
      voxel_size(find(voxel_size <= 0)) = 1;
   end

   origin = abs(nii.hdr.hist.originator(1:3));

   if isempty(origin) | all(origin == 0)		% according to SPM
      origin = (dims+1)/2;   
   end;

   origin = round(origin);

   if any(origin > dims)				% simulate fMRI
      origin(find(origin > dims)) = dims(find(origin > dims));
   end

   if any(origin <= 0)
      origin(find(origin <= 0)) = 1;
   end

   nii_view.dims = dims;
   nii_view.voxel_size = voxel_size;
   nii_view.origin = origin;

   nii_view.slices.sag = 1;
   nii_view.slices.cor = 1;
   nii_view.slices.axi = 1;
   if xdim > 1, nii_view.slices.sag = origin(1); end
   if ydim > 1, nii_view.slices.cor = origin(2); end
   if zdim > 1, nii_view.slices.axi = origin(3); end

   nii_view.area = area;
   nii_view.fig = fig;
   nii_view.nii = nii;					% image data
   nii_view.bgimg = bgimg;				% background
   nii_view.setvalue = setvalue;
   nii_view.minvalue = minvalue;
   nii_view.maxvalue = maxvalue;
   nii_view.numscan = nii.hdr.dime.dim(5);
   nii_view.scanid = setscanid;

   Font.FontUnits  = 'point';
   Font.FontSize   = 12;

   %  create axes for colorbar
   %
   [cbar_axes cbarminmax_axes] = create_cbar_axes(fig, cbar_area);

   if isempty(cbar_area)
      nii_view.cbar_area = [];
   else
      nii_view.cbar_area = cbar_area;
   end

   %  create axes for top/front/side view
   %
   vol_size = voxel_size .* dims;
   [top_ax, front_ax, side_ax] ...
	= create_ax(fig, area, vol_size, usestretch);

   top_pos = get(top_ax,'position');
   front_pos = get(front_ax,'position');
   side_pos = get(side_ax,'position');

   %  Sagittal Slider
   %
   x = side_pos(1);
   y = top_pos(2) + top_pos(4);
   w = side_pos(3);
   h = (front_pos(2) - y) / 2;
   y = y + h;

   pos = [x y w h];

   if xdim > 1,
      slider_step(1) = 1/(xdim);
      slider_step(2) = 1.00001/(xdim);

      handles.sagittal_slider = uicontrol('Parent',fig, ...
                'Style','slider','Units','Normalized', Font, ...
                'Position',pos, 'HorizontalAlignment','center',...
                'BackgroundColor',[0.5 0.5 0.5],'ForegroundColor',[0 0 0],...
                'BusyAction','queue',...
                'TooltipString','Sagittal slice navigation',...
                'Min',1,'Max',xdim,'SliderStep',slider_step, ...
                'Value',nii_view.slices.sag,...
                'Callback','view_nii(''sagittal_slider'');');

      set(handles.sagittal_slider,'position',pos);	% linux66
   end

   %  Coronal Slider
   %
   x = top_pos(1);
   y = top_pos(2) + top_pos(4);
   w = top_pos(3);

⌨️ 快捷键说明

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