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

📄 avw_view.m

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


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [AVWVIEW,metric] = slices2metric(AVWVIEW),

AVWVIEW.imgXYZ.voxels = [AVWVIEW.slices.sag,AVWVIEW.slices.cor,AVWVIEW.slices.axi];
AVWVIEW.imgXYZ.meters = AVWVIEW.imgXYZ.voxels .* AVWVIEW.scale2meters;
AVWVIEW.imgXYZ.mm     = AVWVIEW.imgXYZ.voxels .* AVWVIEW.scale2mm;

coord_value = get(AVWVIEW.handles.coord,'value');

if coord_value == 2,
  % using mm
  img_mm = AVWVIEW.imgXYZ.voxels .* AVWVIEW.scale2mm;
  metric.axi = img_mm(3);
  metric.cor = img_mm(2);
  metric.sag = img_mm(1);
elseif coord_value == 3,
  % using meters
  img_meters = AVWVIEW.imgXYZ.voxels .* AVWVIEW.scale2meters;
  metric.axi = img_meters(3);
  metric.cor = img_meters(2);
  metric.sag = img_meters(1);
else
  % voxels
  metric.axi = AVWVIEW.slices.axi;
  metric.cor = AVWVIEW.slices.cor;
  metric.sag = AVWVIEW.slices.sag;
end;

return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function AVWVIEW = metric2slices(AVWVIEW,metric),

coord_value = get(AVWVIEW.handles.coord,'value');

if coord_value == 2,
  % using mm
  xpix = double(AVWVIEW.avw.hdr.dime.pixdim(2));
  ypix = double(AVWVIEW.avw.hdr.dime.pixdim(3));
  zpix = double(AVWVIEW.avw.hdr.dime.pixdim(4));
  AVWVIEW.slices.axi = round(metric.axi / zpix);
  AVWVIEW.slices.cor = round(metric.cor / ypix);
  AVWVIEW.slices.sag = round(metric.sag / xpix);
elseif coord_value == 3,
  % using meters
  xpix = double(AVWVIEW.avw.hdr.dime.pixdim(2)) / 1000;
  ypix = double(AVWVIEW.avw.hdr.dime.pixdim(3)) / 1000;
  zpix = double(AVWVIEW.avw.hdr.dime.pixdim(4)) / 1000;
  AVWVIEW.slices.axi = round(metric.axi / zpix);
  AVWVIEW.slices.cor = round(metric.cor / ypix);
  AVWVIEW.slices.sag = round(metric.sag / xpix);
else
  % voxels
  AVWVIEW.slices.axi = round(metric.axi);
  AVWVIEW.slices.cor = round(metric.cor);
  AVWVIEW.slices.sag = round(metric.sag);
end;

return





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function AVWVIEW = init(avw,invarname),

% try to keep track of the input struct
if exist('invarname','var'),
  if ~isempty(invarname),
    AVWVIEW.invarname = invarname;
  else
    AVWVIEW.invarname = '';
  end
else
  AVWVIEW.invarname = '';
end

% GUI General Parameters
GUIwidth  = 150;
GUIheight = 50;

version = '[$Revision: 1.12 $]';
name = sprintf('AVW View [v%s]',version(12:16));

if isfield(avw,'fileprefix'),
  if ~isempty(avw.fileprefix),
    format = strcat('%+',sprintf('%d',length(avw.fileprefix)+1),'s');
    name = strcat(name,' - ',sprintf(format,avw.fileprefix));
  end
end

% The Zbuffer provides smooth slice animations (OpenGL is no good)
GUI = figure('Name',name,'Tag','AVWVIEW','units','characters',...
  'BackingStore','off',...
  'NumberTitle','off','color',[0 0 0],...
  'MenuBar','figure','Position',[1 1 GUIwidth GUIheight],...
  'Renderer','zbuffer');

movegui(GUI,'center');

set(GUI,'KeyPressFcn','avw_view([],[],''keypress'');');

AVWVIEW.gui = GUI;

Font.FontName   = 'Helvetica';
Font.FontUnits  = 'Pixels';
Font.FontSize   = 9;
Font.FontWeight = 'normal';
Font.FontAngle  = 'normal';


AVWVIEW.shading = 'flat';
shading(AVWVIEW.shading)



% 	% determine the datatype of avw.img
% 	switch double(avw.hdr.dime.bitpix),
% 	case 1,
%         fprintf('...converting avw.img to uint8 for viewing only.\n\n');
%         avw.img = uint8(avw.img);
% 	case 8,
%         fprintf('...converting avw.img to uint8 for viewing only.\n\n');
%         avw.img = uint8(avw.img);
% 	case 16,
%         fprintf('...converting avw.img to uint16 for viewing only.\n\n');
%         avw.img = uint16(avw.img);
% 	case {32,64},
%         % make sure it is double, not single
%         avw.img = double(avw.img);
% 	otherwise,
%         % do nothing, leave it as is
% 	end


% calculate image stats
intensityMean = mean(mean(mean(avw.img)));
intensityMeanRobust = mean(mean(mean(avw.img(find(avw.img)))));
intensityStdev = std(std(std(avw.img)));

intensityMax = max(max(max(avw.img)));

% try to adjust for large intensity extremes
if intensityMax > 255,
  % got 16 bit data, at least
  adjust = 0.5;
else
  adjust = 0.9;
end
%AVWVIEW.clim = [0 (intensityMeanRobust + (10 * intensityStdev)) ];
AVWVIEW.clim = [0 (intensityMax * adjust)];



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

AVWVIEW.slices.sag = 1;
AVWVIEW.slices.cor = 1;
AVWVIEW.slices.axi = 1;
if AVWVIEW.xdim > 1, AVWVIEW.slices.sag = floor(AVWVIEW.xdim/2); end
if AVWVIEW.ydim > 1, AVWVIEW.slices.cor = floor(AVWVIEW.ydim/2); end
if AVWVIEW.zdim > 1, AVWVIEW.slices.axi = floor(AVWVIEW.zdim/2); end

% store the volume center for later reference when
% calculating fiducial locations
center = avw_center(avw);
AVWVIEW.center = center.abs.voxels;

% set the default origin at the center
AVWVIEW.origin  = AVWVIEW.center;

AVWVIEW.pixdim = double(avw.hdr.dime.pixdim(2:4));

AVWVIEW.scale2mm     = AVWVIEW.pixdim;          % vol scale in mm
AVWVIEW.scale2meters = AVWVIEW.pixdim ./ 1000;  % vol scale in meters
AVWVIEW.daspect      = AVWVIEW.pixdim ./ min(AVWVIEW.pixdim);

xPlotSize = 0.38;
yPlotSize = 0.38;

AVWVIEW.cmapString = 'gray';

AVWVIEW.cmap = colormap(AVWVIEW.cmapString);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Axial Slice
if AVWVIEW.xdim > 1 & AVWVIEW.ydim > 1,
  
  handles.axial_subplot = subplot('position',[0.075 0.075 xPlotSize yPlotSize]);
  
  Saxial = squeeze(avw.img(:,:,AVWVIEW.slices.axi));
  
  %handles.axial_image = pcolor(double(Saxial)); colormap(gray); shading interp
  %pcolor(Saxial'); colormap(gray); shading flat
  
  %surf(avw.img(:,:,20)','edgecolor','none'); view(2); axis tight; colormap(flipdim(gray,1)); colorbar
  %surf(avw.img(:,:,20)','edgecolor','none'); view(2); axis tight; colormap(gray)
  %image(avw.img(:,:,20)'); axis image; colormap(gray)
  %imagesc(avw.img(:,:,20)'); axis image; colormap(gray)
  
  %handles.axial_image = image('Cdata',Saxial','CDataMapping','scaled',...
  %    'XData',[0 xdim],'YData',[0 ydim]);
  
  handles.axial_image = imagesc([0,AVWVIEW.xdim],[0,AVWVIEW.ydim],Saxial',AVWVIEW.clim);
  
  handles.axial_axes = gca;
  set(gca,'YDir','normal','XLimMode','manual','YLimMode','manual',...
    'ClimMode','manual','YColor',[1 1 1],'XColor',[1 1 1])
  
  title('Axial','Color',[1 1 1])
  ylabel('Y')
  xlabel('X')
  %xlabel('(Right <<) X (>> Left)'); % default radiological orientation for Analyze
  %xlabel('(Left <<) X (>> Right)')
  
  % This callback navigates with mouse button click
  set(handles.axial_image,'ButtonDownFcn','avw_view([],[],''axial_image'');');
  
  GUIheight = 0.46;
  
  if AVWVIEW.zdim > 1,
    slider_step(1) = 1/(AVWVIEW.zdim);
    slider_step(2) = 1/(AVWVIEW.zdim);
    handles.axial_slider = uicontrol('Parent',GUI,'Style','slider',...
      'Units','Normalized', Font, ...
      'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'center',...
      'BusyAction','queue',...
      'TooltipString','Axial slice navigation',...
      'Min',1,'Max',AVWVIEW.zdim,'SliderStep',slider_step,'Value',AVWVIEW.slices.axi,...
      'Callback','avw_view([],[],''axial_slider'');');
  end
  handles.axial_sliderN = uicontrol('Parent',GUI,'Style','text',...
    'Units','Normalized', Font, ...
    'Position',[.65 GUIheight .03 .03], 'HorizontalAlignment', 'center',...
    'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
    'BusyAction','queue',...
    'TooltipString','Axial slice number',...
    'String',num2str(AVWVIEW.slices.axi),'Value',AVWVIEW.slices.axi);
  handles.axial_sliderT = uicontrol('Parent',GUI,'Style','text',...
    'Units','Normalized', Font, ...
    'Position',[.70 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
    'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
    'BusyAction','queue',...
    'TooltipString','Axial slice navigation',...
    'String','Axial');
  
  handles.axial_xlim = get(handles.axial_axes,'Xlim');
  handles.axial_ylim = get(handles.axial_axes,'Ylim');
  handles.axial_xline = line('Xdata',[AVWVIEW.slices.sag AVWVIEW.slices.sag],'Ydata',handles.axial_ylim);
  handles.axial_yline = line('Ydata',[AVWVIEW.slices.cor AVWVIEW.slices.cor],'Xdata',handles.axial_xlim);
  set(handles.axial_xline,'Color','b','EraseMode','xor','Tag','XLINE');
  set(handles.axial_yline,'Color','b','EraseMode','xor','Tag','YLINE');
  
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Coronal Slice
if AVWVIEW.xdim > 1 & AVWVIEW.zdim > 1,
  
  handles.coronal_subplot = subplot('position',[0.075 0.575 xPlotSize yPlotSize]);
  
  Scor = squeeze(avw.img(:,AVWVIEW.slices.cor,:));
  handles.coronal_image = imagesc([0,AVWVIEW.xdim],[0,AVWVIEW.zdim],Scor',AVWVIEW.clim);
  
  handles.coronal_axes = gca;
  set(gca,'YDir','normal','XLimMode','manual','YLimMode','manual',...
    'ClimMode','manual','YColor',[1 1 1],'XColor',[1 1 1])
  
  %xlabel('(Left <<) X (>> Right)')
  %xlabel('(Right <<) X (>> Left)')
  xlabel('X')
  ylabel('Z')
  title('Coronal','Color',[1 1 1])
  
  % This callback navigates with left click
  set(handles.coronal_image,'ButtonDownFcn','avw_view([],[],''coronal_image'');');
  
  GUIheight = GUIheight - 0.04;
  
  if AVWVIEW.ydim > 1,
    slider_step(1) = 1/(AVWVIEW.ydim);
    slider_step(2) = 1/(AVWVIEW.ydim);
    handles.coronal_slider = uicontrol('Parent',GUI,'Style','slider',...
      'Units','Normalized', Font, ...
      'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'center',...
      'BusyAction','queue',...
      'TooltipString','Coronal slice navigation',...
      'Min',1,'Max',AVWVIEW.ydim,'SliderStep',slider_step,'Value',AVWVIEW.slices.cor,...
      'Callback','avw_view([],[],''coronal_slider'');');
  end
  handles.coronal_sliderN = uicontrol('Parent',GUI,'Style','text',...
    'Units','Normalized', Font, ...
    'Position',[.65 GUIheight .03 .03], 'HorizontalAlignment', 'center',...
    'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
    'BusyAction','queue',...
    'TooltipString','Coronal slice number',...
    'String',num2str(AVWVIEW.slices.cor),'Value',AVWVIEW.slices.cor);
  handles.coronal_sliderT = uicontrol('Parent',GUI,'Style','text',...
    'Units','Normalized', Font, ...
    'Position',[.70 GUIheight .10 .03], 'HorizontalAlignment', 'left',...
    'BackgroundColor',[0 0 0],'ForegroundColor',[1 1 1],...
    'BusyAction','queue',...
    'TooltipString','Coronal slice navigation',...
    'String','Coronal');
  
  handles.coronal_xlim = get(handles.coronal_axes,'Xlim');
  handles.coronal_ylim = get(handles.coronal_axes,'Ylim');
  handles.coronal_xline = line('Xdata',[AVWVIEW.slices.sag AVWVIEW.slices.sag],'Ydata',handles.coronal_ylim);
  handles.coronal_yline = line('Ydata',[AVWVIEW.slices.axi AVWVIEW.slices.axi],'Xdata',handles.coronal_xlim);
  set(handles.coronal_xline,'Color','b','EraseMode','xor','Tag','XLINE');
  set(handles.coronal_yline,'Color','b','EraseMode','xor','Tag','YLINE');
  
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Sagittal Slice
if AVWVIEW.ydim > 1 & AVWVIEW.zdim > 1,
  
  handles.sagittal_subplot = subplot('position',[0.575 0.575 xPlotSize yPlotSize]);
  
  Ssag = squeeze(avw.img(AVWVIEW.slices.sag,:,:));
  handles.sagittal_image = imagesc([0,AVWVIEW.ydim],[0,AVWVIEW.zdim],Ssag',AVWVIEW.clim);
  
  handles.sagittal_axes = gca;
  set(gca,'YDir','normal','XLimMode','manual','YLimMode','manual',...
    'ClimMode','manual','YColor',[1 1 1],'XColor',[1 1 1])
  
  xlabel('Y')
  ylabel('Z')
  title('Sagittal','Color',[1 1 1])
  
  % This callback navigates with mouse click
  set(handles.sagittal_image,'ButtonDownFcn','avw_view([],[],''sagittal_image'');');
  
  GUIheight = GUIheight - 0.04;
  
  if AVWVIEW.xdim > 1,
    slider_step(1) = 1/(AVWVIEW.xdim);
    slider_step(2) = 1/(AVWVIEW.xdim);
    handles.sagittal_slider = uicontrol('Parent',GUI,'Style','slider',...
      'Units','Normalized', Font, ...
      'Position',[.55 GUIheight .10 .03], 'HorizontalAlignment', 'center',...
      'BusyAction','queue',...
      'TooltipString','Sagittal slice navigation',...
      'Min',1,'Max',AVWVIEW.xdim,'SliderStep',slider_step,'Value',AVWVIEW.slices.sag,...

⌨️ 快捷键说明

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