📄 bfm_plot_brainlv_3v.m
字号:
rows_disp = siz(3)/cols_disp;
if (ceil(cols_disp)-cols_disp) < (ceil(rows_disp)-rows_disp),
cols_disp = ceil(cols_disp); rows_disp = ceil(siz(3)/cols_disp);
else
rows_disp = ceil(rows_disp); cols_disp = ceil(siz(3)/rows_disp);
end
max_slice = rows_disp * cols_disp;
rest_slices = max_slice - num_slices;
empty_slices = -1 * ones(1,rest_slices);
slice_idx = [slice_idx, empty_slices];
% for empty slice (27-30), filled them with background intensity
%
blv_filled = [blv, ...
bg_intensity * ...
ones(img_height*img_width,rows_disp*cols_disp-num_slices)];
blv_disp = [];
for(row = 0:rows_disp-1)
% take 'cols_disp' amount of slices from blv_filled
% and put into blv_row
%
blv_row = blv_filled(:,[row*cols_disp+1:row*cols_disp+cols_disp]);
% reshape the slice to integrate the whole row together
%
blv_row = reshape(blv_row, [img_height, img_width*cols_disp]);
blv_disp = [blv_disp; blv_row];
end
blv_disp = reshape(blv_disp, [rows_disp*img_height, cols_disp*img_width]);
%% h_img = image(blv_disp,'CDataMapping','scaled');
% h_img = image(blv_disp);
if update
h_img = findobj(gcf,'tag','BLVImg');
set(h_img,'CData',blv_disp);
else
h_img = image(blv_disp);
end
set(h_img,'Tag','BLVImg');
colormap(cmap);
num_plus = repmat({'+ '},1,rows_disp);
for i = 0:rows_disp-1
num_plus{i+1} = [num2str(i*cols_disp) num_plus{i+1}];
end
set(gca,'tickdir','out','ticklength',[0.001 0.001]);
set(gca,'xtick',[img_width/2:img_width:img_width*cols_disp]);
set(gca,'xticklabel',[1:cols_disp]);
set(gca,'ytick',[img_height/2:img_height:img_height*rows_disp]);
set(gca,'yticklabel',num_plus);
if (new_fig)
create_colorbar(colorbar_hdl, cbar_map, min_blv, max_blv);
return;
end
end
if 0
if grp_idx % called from datamatcorrs plot
set(h_img,'ButtonDownFcn','bfm_plot_datamatcorrs(''SelectPixel'')');
else
set(h_img,'ButtonDownFcn','bfm_result_ui(''SelectPixel'')');
end
end
st_origin1 = getappdata(gcf,'Origin');
if ~isempty(st_origin1)
st_origin = st_origin1;
end
nii = make_nii(squeeze(img), st_voxel_size, st_origin);
gui3view.figure = gcf;
gui3view.area = [0.32 0.1 0.55 0.85];
if grp_idx % called from datamatcorrs plot
if update
opt.command = 'updateimg';
opt.usecolorbar = 0;
view_nii(gcf,nii.img,opt);
opt1.setcolormap = cmap;
view_nii(gcf,opt1);
else
opt.setbuttondown = 'bfm_plot_datamatcorrs_3v(''SelectPixel'');';
opt.setarea = [0.32 0.1 0.55 0.85];
opt.setcolormap = cmap;
opt.useimagesc = 0;
opt.usepanel = 0;
opt.usecolorbar = 0;
tstfig = getappdata(gcf,'nii_view');
if isempty(tstfig)
opt.command = 'init';
else
opt.command = 'updatenii';
end
view_nii(gcf,nii,opt);
end
else
if update
opt.command = 'updateimg';
opt.usecolorbar = 0;
view_nii(gcf,nii.img,opt);
opt1.setcolormap = cmap;
view_nii(gcf,opt1);
else
opt.setbuttondown = 'bfm_result_3v_ui(''SelectPixel'');';
opt.setarea = [0.32 0.1 0.55 0.85];
opt.setcolormap = cmap;
opt.useimagesc = 0;
opt.usepanel = 0;
opt.usecolorbar = 0;
tstfig = getappdata(gcf,'nii_view');
if isempty(tstfig)
opt.command = 'init';
else
opt.command = 'updatenii';
end
view_nii(gcf,nii,opt);
end
end
nii_view = getappdata(gcf,'nii_view');
h = findobj(gcf,'Tag','XYZVoxel');
set(h,'String',sprintf('%d %d %d',nii_view.imgXYZ.vox));
h = findobj(gcf,'Tag','XYZmm');
set(h,'String',sprintf('%2.1f %2.1f %2.1f',nii_view.imgXYZ.mm));
setappdata(gcf,'xyz',nii_view.imgXYZ.vox);
create_colorbar(colorbar_hdl, cbar_map, min_blv, max_blv );
% save the attributes of the current image
%
setappdata(gcf,'Dims',dims);
setappdata(gcf,'VoxelSize',voxel_size);
setappdata(gcf,'Origin',origin);
setappdata(gcf,'SliceIdx',slice_idx);
setappdata(gcf,'ImgHeight',img_height);
setappdata(gcf,'ImgWidth',img_width);
% setappdata(gcf,'RowsDisp',rows_disp);
% setappdata(gcf,'ColsDisp',cols_disp);
setappdata(gcf,'ImgRotateFlg',1);
setappdata(gcf,'NumLVs',num_lv);
% setappdata(gcf,'BLVData',brainlv);
setappdata(gcf,'BLVCoords',newcoords);
setappdata(gcf,'BLVThreshold',thresh);
setappdata(gcf,'RotateAmount',rot_amount);
setappdata(gcf,'BLVDisplay',blv);
% in order to use function like 'cluster' etc. created by fMRI
%
setappdata(gcf,'STDims',dims);
setappdata(gcf,'STVoxelSize',voxel_size);
setappdata(gcf,'STOrigin',origin);
setappdata(gcf,'WinSize',1);
if ViewBootstrapRatio
setappdata(gcf,'BSThreshold',thresh);
setappdata(gcf,'BSRatioCoords',newcoords);
end
if ~isempty(behav_idx) % called from datamatcorrs plot
setappdata(gcf,'NumBehav',num_behav);
end
% save background to img
%
setappdata(gcf,'cmap',cmap);
return; % bfm_plot_brainlv_3v
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Convert the indexed matrix back into the original matrix
%
% Usage [outmat]=unmapblv(inmat, coords, siz)
%
% I (inmat): indexed matrix
% I (coords): index
% I (siz): size of original matrix
% O (outmat): original matrix
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [outmat] = unmapblv(inmat, coords, siz)
[r c]=size(inmat);
outmat=zeros(r,siz);
for i=1:r;
outmat(i,coords)=inmat(i,:);
end
return; % unmapblv
%-------------------------------------------------------------------------
%
function [cmap] = set_colormap(max_value, min_value, thresh)
%
% set the display colormap based on the max/min display values and
% the threshold setting.
%
% The upper colors are coming from the entries of [140:239] of the
% 255 jet colormap, and the lower colors are from the entries of
% [1:100] of the colormap.
%
cmap = [];
range_interval = max_value - min_value;
upper_interval = max_value - thresh;
lower_interval = abs(min_value) - thresh;
% colormap entries for the upper range values, using the
% entries of [140:239] from the 255 jet colormap
%
num_upper_colors = 0;
if (upper_interval > 0)
num_upper_colors = round(upper_interval / range_interval * 255);
cmap_size = round(255 * num_upper_colors/100);
first_color_idx = round(140 / 255 * cmap_size);
last_color_idx = first_color_idx + num_upper_colors - 1;
uppermap = jet(cmap_size);
upper_colors = uppermap(first_color_idx:last_color_idx,:);
end;
% colormap entries for the lower range values, using the
% entries of [1:100] from the 255 jet colormap
%
num_lower_colors = 0;
if (lower_interval > 0)
num_lower_colors = round(lower_interval / range_interval * 255);
cmap_size = round(255 * num_lower_colors/100);
first_color_idx = 1;
last_color_idx = num_lower_colors;
lowermap = jet(cmap_size);
lower_colors = lowermap(first_color_idx:last_color_idx,:);
end;
ignore_pts = [num_lower_colors+1:255-num_upper_colors];
if isempty(ignore_pts), return; end;
cmap = zeros(256,3);
cmap(1:255,:) = jet(255);
if (num_lower_colors > 0),
cmap(1:num_lower_colors,:) = lower_colors;
end;
if (num_upper_colors > 0),
cmap(ignore_pts(end)+1:255,:) = upper_colors;
end;
cmap(ignore_pts,:) = ones(length(ignore_pts),3) * 140/255;
cmap(256,:) = [1 1 1];
return; % set_colormap
%--------------------------------------------------------------------------
function [range, bar_data] = create_colorbar(axes_hdl,cmap,min_range,max_range)
tick_steps = (max_range - min_range) / (size(cmap,1) - 1);
y_range = [min_range:tick_steps:max_range];
range = [max_range:-tick_steps:min_range];
axes(axes_hdl);
img_h = image([0,1],[min_range max_range],[1:size(cmap,1)]');
% use true colour for the colour bar to make sure change of colormap
% won't affect it
%
bar_data = get(img_h,'CData');
len = length(bar_data);
cdata = zeros(len,1,3);
for i=1:len,
cdata(i,1,:) = cmap(bar_data(i),:);
end;
set(img_h,'CData',cdata);
% setup the axes property
% set(axes_hdl, 'XTick',[],'XLim',[0 1], ...
% 'YLim',[min_range max_range], ...
% 'YDir','normal', ...
% 'YAxisLocation','right');
set(axes_hdl, 'XTick',[], ...
'YLim',[min_range max_range], ...
'YDir','normal', ...
'YAxisLocation','right');
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -