📄 view_nii.m
字号:
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 + -