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

📄 avw_view.m

📁 mri_toolbox是一个工具用来MRI. 来自于SourceForge, 我上传这个软件,希望能结识对医疗软件感兴趣的兄弟.
💻 M
📖 第 1 页 / 共 5 页
字号:
    Saxi = squeeze(AVWVIEW.avw.img(:,:,AVWVIEW.slices.axi));
    set(AVWVIEW.handles.axial_image,'CData',Saxi');
end
if isfield(AVWVIEW.handles,'axial_sliderN'),
    set(AVWVIEW.handles.axial_sliderN,'String',num2str(AVWVIEW.slices.axi));
    set(AVWVIEW.handles.axial_sliderN,'Value',AVWVIEW.slices.axi);
end
if isfield(AVWVIEW.handles,'axial_slider'),
    set(AVWVIEW.handles.axial_slider,'Value',AVWVIEW.slices.axi);
end;

return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function coronal_update(AVWVIEW)

if isfield(AVWVIEW.handles,'coronal_image'),
    Scor = squeeze(AVWVIEW.avw.img(:,AVWVIEW.slices.cor,:));
    set(AVWVIEW.handles.coronal_image,'CData',Scor');
end
if isfield(AVWVIEW.handles,'coronal_sliderN'),
    set(AVWVIEW.handles.coronal_sliderN,'String',num2str(AVWVIEW.slices.cor));
    set(AVWVIEW.handles.coronal_sliderN,'Value',AVWVIEW.slices.cor);
end
if isfield(AVWVIEW.handles,'coronal_slider'),
    set(AVWVIEW.handles.coronal_slider,'Value',AVWVIEW.slices.cor);
end;

return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function sagittal_update(AVWVIEW)

if isfield(AVWVIEW.handles,'sagittal_image'),
    Ssag = squeeze(AVWVIEW.avw.img(AVWVIEW.slices.sag,:,:));
    set(AVWVIEW.handles.sagittal_image,'CData',Ssag');
end
if isfield(AVWVIEW.handles,'sagittal_sliderN'),
    set(AVWVIEW.handles.sagittal_sliderN,'String',num2str(AVWVIEW.slices.sag));
    set(AVWVIEW.handles.sagittal_sliderN,'Value',AVWVIEW.slices.sag);
end
if isfield(AVWVIEW.handles,'sagittal_slider'),
    set(AVWVIEW.handles.sagittal_slider,'Value',AVWVIEW.slices.sag);
end;

return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function AVWVIEW = set_crosshairs(AVWVIEW)

current_axes = gca;

if isfield(AVWVIEW.handles,'axial_axes'),
  axes(AVWVIEW.handles.axial_axes);
  if ishandle(AVWVIEW.handles.axial_xline),
    delete(AVWVIEW.handles.axial_xline);
  end
  if ishandle(AVWVIEW.handles.axial_yline),
    delete(AVWVIEW.handles.axial_yline);
  end
  
  AVWVIEW.handles.axial_xlim = get(AVWVIEW.handles.axial_axes,'Xlim');
  AVWVIEW.handles.axial_ylim = get(AVWVIEW.handles.axial_axes,'Ylim');
  AVWVIEW.handles.axial_xline = line('Xdata',[AVWVIEW.slices.sag AVWVIEW.slices.sag],'Ydata',AVWVIEW.handles.axial_ylim);
  AVWVIEW.handles.axial_yline = line('Ydata',[AVWVIEW.slices.cor AVWVIEW.slices.cor],'Xdata',AVWVIEW.handles.axial_xlim);
  set(AVWVIEW.handles.axial_xline,'Color','b','EraseMode','xor','Tag','XLINE');
  set(AVWVIEW.handles.axial_yline,'Color','b','EraseMode','xor','Tag','YLINE');
  
  if get(AVWVIEW.handles.crosshairs,'value'),
    set(AVWVIEW.handles.axial_xline,'visible','on');
    set(AVWVIEW.handles.axial_yline,'visible','on');
  else
    set(AVWVIEW.handles.axial_xline,'visible','off');
    set(AVWVIEW.handles.axial_yline,'visible','off');
  end
  
end

if isfield(AVWVIEW.handles,'coronal_axes'),
  
  axes(AVWVIEW.handles.coronal_axes);
  if ishandle(AVWVIEW.handles.coronal_xline),
    delete(AVWVIEW.handles.coronal_xline);
  end
  if ishandle(AVWVIEW.handles.coronal_yline),
    delete(AVWVIEW.handles.coronal_yline);
  end
  
  AVWVIEW.handles.coronal_xlim = get(AVWVIEW.handles.coronal_axes,'Xlim');
  AVWVIEW.handles.coronal_ylim = get(AVWVIEW.handles.coronal_axes,'Ylim');
  AVWVIEW.handles.coronal_xline = line('Xdata',[AVWVIEW.slices.sag AVWVIEW.slices.sag],'Ydata',AVWVIEW.handles.coronal_ylim);
  AVWVIEW.handles.coronal_yline = line('Ydata',[AVWVIEW.slices.axi AVWVIEW.slices.axi],'Xdata',AVWVIEW.handles.coronal_xlim);
  set(AVWVIEW.handles.coronal_xline,'Color','b','EraseMode','xor','Tag','XLINE');
  set(AVWVIEW.handles.coronal_yline,'Color','b','EraseMode','xor','Tag','YLINE');
  
  if get(AVWVIEW.handles.crosshairs,'value'),
    set(AVWVIEW.handles.coronal_xline,'visible','on');
    set(AVWVIEW.handles.coronal_yline,'visible','on');
  else
    set(AVWVIEW.handles.coronal_xline,'visible','off');
    set(AVWVIEW.handles.coronal_yline,'visible','off');
  end
  
end

if isfield(AVWVIEW.handles,'sagittal_axes'),
  axes(AVWVIEW.handles.sagittal_axes);
  if ishandle(AVWVIEW.handles.sagittal_xline),
    delete(AVWVIEW.handles.sagittal_xline);
  end
  if ishandle(AVWVIEW.handles.sagittal_yline),
    delete(AVWVIEW.handles.sagittal_yline);
  end
  
  AVWVIEW.handles.sagittal_xlim = get(AVWVIEW.handles.sagittal_axes,'Xlim');
  AVWVIEW.handles.sagittal_ylim = get(AVWVIEW.handles.sagittal_axes,'Ylim');
  AVWVIEW.handles.sagittal_xline = line('Xdata',[AVWVIEW.slices.cor AVWVIEW.slices.cor],'Ydata',AVWVIEW.handles.sagittal_ylim);
  AVWVIEW.handles.sagittal_yline = line('Ydata',[AVWVIEW.slices.axi AVWVIEW.slices.axi],'Xdata',AVWVIEW.handles.sagittal_xlim);
  set(AVWVIEW.handles.sagittal_xline,'Color','b','EraseMode','xor','Tag','XLINE');
  set(AVWVIEW.handles.sagittal_yline,'Color','b','EraseMode','xor','Tag','YLINE');
  
  if get(AVWVIEW.handles.crosshairs,'value'),
    set(AVWVIEW.handles.sagittal_xline,'visible','on');
    set(AVWVIEW.handles.sagittal_yline,'visible','on');
  else
    set(AVWVIEW.handles.sagittal_xline,'visible','off');
    set(AVWVIEW.handles.sagittal_yline,'visible','off');
  end
  
end

axes(current_axes);

return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function AVWVIEW = set_coordinates(AVWVIEW)

% set the axis coordinates to voxels, mm or meters

s = size(AVWVIEW.avw.img);
if length(s) > 0, xdim = s(1); else xdim = 1; end
if length(s) > 1, ydim = s(2); else ydim = 1; end
if length(s) > 2, zdim = s(3); else zdim = 1; end

% initialise for voxel coordinates
xpixdim = double(AVWVIEW.avw.hdr.dime.pixdim(2));
ypixdim = double(AVWVIEW.avw.hdr.dime.pixdim(3));
zpixdim = double(AVWVIEW.avw.hdr.dime.pixdim(4));
xdata = [0 xdim];
ydata = [0 ydim];
zdata = [0 zdim];

aspect = 1./AVWVIEW.daspect; %AVWVIEW.avw.hdr.dime.pixdim(2:4);


if get(AVWVIEW.handles.coord,'value') == 2,    % mm
  xdata = xdata .* xpixdim;
  ydata = ydata .* ypixdim;
  zdata = zdata .* zpixdim;
  aspect = [1 1 1];
end

if get(AVWVIEW.handles.coord,'value') == 3,    % meters
  xpixdim = xpixdim / 1000;
  ypixdim = ypixdim / 1000;
  zpixdim = zpixdim / 1000;
  xdata = xdata .* xpixdim;
  ydata = ydata .* ypixdim;
  zdata = zdata .* zpixdim;
  aspect = [1 1 1];
end


if isfield(AVWVIEW.handles,'axial_image'),
  set(AVWVIEW.handles.axial_axes,'Xlim',xdata);
  set(AVWVIEW.handles.axial_axes,'Ylim',ydata);
  set(AVWVIEW.handles.axial_axes,'Zlim',zdata);
  set(AVWVIEW.handles.axial_image,'Xdata',xdata);
  set(AVWVIEW.handles.axial_image,'Ydata',ydata);
  daspect(AVWVIEW.handles.axial_axes,aspect([1 2 3]));
end;
if isfield(AVWVIEW.handles,'coronal_image'),
  set(AVWVIEW.handles.coronal_axes,'Xlim',xdata);
  set(AVWVIEW.handles.coronal_axes,'Ylim',zdata);
  set(AVWVIEW.handles.coronal_axes,'Zlim',ydata);
  set(AVWVIEW.handles.coronal_image,'Xdata',xdata);
  set(AVWVIEW.handles.coronal_image,'Ydata',zdata);
  daspect(AVWVIEW.handles.coronal_axes,aspect([1 3 2]));
end;
if isfield(AVWVIEW.handles,'sagittal_image'),
  set(AVWVIEW.handles.sagittal_axes,'Xlim',ydata);
  set(AVWVIEW.handles.sagittal_axes,'Ylim',zdata);
  set(AVWVIEW.handles.sagittal_axes,'Zlim',xdata);
  set(AVWVIEW.handles.sagittal_image,'Xdata',ydata);
  set(AVWVIEW.handles.sagittal_image,'Ydata',zdata);
  daspect(AVWVIEW.handles.sagittal_axes,aspect([2 3 1]));
end;

set_display_values(AVWVIEW);

return




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function AVWVIEW = get_current_position(AVWVIEW),

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

switch AVWVIEW.view,
  case 'sag',
    currentpoint = get(get(AVWVIEW.handles.sagittal_image,'Parent'),'CurrentPoint');
    metric.cor = currentpoint(1,1);
    metric.axi = currentpoint(1,2);
    metric.sag = get(AVWVIEW.handles.sagittal_slider,'Value');
  case 'cor',
    currentpoint = get(get(AVWVIEW.handles.coronal_image,'Parent'),'CurrentPoint');
    metric.sag = currentpoint(2,1);
    metric.axi = currentpoint(2,2);
    metric.cor = get(AVWVIEW.handles.coronal_slider,'Value');
  case 'axi',
    currentpoint = get(get(AVWVIEW.handles.axial_image,'Parent'),'CurrentPoint');
    metric.sag = currentpoint(2,1);
    metric.cor = currentpoint(2,2);
    metric.axi = get(AVWVIEW.handles.axial_slider,'Value');
end

AVWVIEW = metric2slices(AVWVIEW,metric);
AVWVIEW = check_slices(AVWVIEW);

return




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function AVWVIEW = get_slider_position(AVWVIEW),

[AVWVIEW.slices.sag,AVWVIEW.slices.cor,AVWVIEW.slices.axi] = deal(0);

if isfield(AVWVIEW.handles,'sagittal_slider'),
  if ishandle(AVWVIEW.handles.sagittal_slider),
    AVWVIEW.slices.sag = round(get(AVWVIEW.handles.sagittal_slider,'Value'));
  end
end
if AVWVIEW.slices.sag == 0,
  if isfield(AVWVIEW.handles,'sagittal_sliderN'),
    if ishandle(AVWVIEW.handles.sagittal_sliderN),
      AVWVIEW.slices.sag = round(get(AVWVIEW.handles.sagittal_sliderN,'Value'));
    end
  end
end

if isfield(AVWVIEW.handles,'coronal_slider'),
  if ishandle(AVWVIEW.handles.coronal_slider),
    AVWVIEW.slices.cor = round(get(AVWVIEW.handles.coronal_slider,'Value'));
  end
end
if AVWVIEW.slices.cor == 0,
  if isfield(AVWVIEW.handles,'coronal_sliderN'),
    if ishandle(AVWVIEW.handles.coronal_sliderN),
      AVWVIEW.slices.cor = round(get(AVWVIEW.handles.coronal_sliderN,'Value'));
    end
  end
end

if isfield(AVWVIEW.handles,'axial_slider'),
  if ishandle(AVWVIEW.handles.axial_slider),
    AVWVIEW.slices.axi = round(get(AVWVIEW.handles.axial_slider,'Value'));
  end
end
if AVWVIEW.slices.axi == 0,
  if isfield(AVWVIEW.handles,'axial_sliderN'),
    if ishandle(AVWVIEW.handles.axial_sliderN),
      AVWVIEW.slices.axi = round(get(AVWVIEW.handles.axial_sliderN,'Value'));
    end
  end
end

AVWVIEW = check_slices(AVWVIEW);

return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function AVWVIEW = check_slices(AVWVIEW),

adjust = 0;

[ SagSize, CorSize, AxiSize ] = size(AVWVIEW.avw.img);

if AVWVIEW.slices.sag > SagSize,
    AVWVIEW.slices.sag = SagSize;
    adjust = 1;
end;
if AVWVIEW.slices.sag < 1,
    AVWVIEW.slices.sag = 1;
    adjust = 1;
end;
if AVWVIEW.slices.cor > CorSize,
    AVWVIEW.slices.cor = CorSize;
    adjust = 1;
end;
if AVWVIEW.slices.cor < 1,
    AVWVIEW.slices.cor = 1;
    adjust = 1;
end;
if AVWVIEW.slices.axi > AxiSize,
    AVWVIEW.slices.axi = AxiSize;
    adjust = 1;
end;
if AVWVIEW.slices.axi < 1,
    AVWVIEW.slices.axi = 1;
    adjust = 1;
end;

if adjust,
    AVWVIEW = slices2metric(AVWVIEW);
end

return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function set_display_values(AVWVIEW),

% get coordinates of selected voxel and the image intensity there

sag = AVWVIEW.slices.sag;
cor = AVWVIEW.slices.cor;
axi = AVWVIEW.slices.axi;

imgvalue = AVWVIEW.avw.img(sag,cor,axi);

set(AVWVIEW.handles.imval,'String',sprintf('%7.2f',imgvalue));
set(AVWVIEW.handles.imval,'Value',imgvalue);

% Now update the image position text for the selected voxel

[AVWVIEW, metric] = slices2metric(AVWVIEW);
sag = metric.sag;
cor = metric.cor;
axi = metric.axi;

string = sprintf('%7.3f %7.3f %7.3f',sag,cor,axi);

set(AVWVIEW.handles.impos,'String',string);
set(AVWVIEW.handles.impos,'Value',[sag,cor,axi]);

⌨️ 快捷键说明

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