📄 bfm_plot_brainlv.m
字号:
%
if isempty(cluster_info)
cluster_idx = newcoords;
else
cluster_idx = cluster_info.data{1}.idx;
end
if isequal(newcoords, cluster_idx)
non_cluster_coords = [];
else
[tmp cluster_coords] = intersect(newcoords,cluster_idx);
non_cluster_coords = ones(1,length(newcoords));
non_cluster_coords(cluster_coords) = 0;
non_cluster_coords = find(non_cluster_coords);
end
if (no_background_image),
non_brain_region_color_idx = size(cmap,1);
img = zeros(1,rows*cols*slices) + non_brain_region_color_idx;
disp_blv(non_cluster_coords) = brain_region_color_idx;
img(newcoords) = disp_blv;
img = reshape(img,[rows cols 1 slices]);
else
max_bg = max(bg_img(:));
min_bg = min(bg_img(:));
img = (bg_img - min_bg) / (max_bg - min_bg) * 100;
disp_blv(non_cluster_coords) = img(newcoords(non_cluster_coords));
if exist('lower_idx','var') & ~isempty(lower_idx)
img(newcoords(lower_idx)) = disp_blv(lower_idx);
end
if exist('upper_idx','var') & ~isempty(upper_idx)
img(newcoords(upper_idx)) = disp_blv(upper_idx);
end
end;
blv = reshape(img,[rows*cols,slices]);
% rotate image
%
for i=1:num_slices
tmp=reshape(blv(:,i),img_width,img_height);
tmp=rot90(tmp,mod(rot_amount,4));
blv(:,i)=tmp(:);
end
% save a cornor of the last slice as the background intensity
%
bg_intensity = blv(1, num_slices);
% calculate how many slices to display for each row and column
% it's an algorithm from montage which will layout the slice
% in near square
%
if dims(1) > dims(2)
siz = [dims(1), dims(2), dims(4)];
else
siz = [dims(2), dims(1), dims(4)];
end
cols_disp = sqrt(prod(siz))/siz(2);
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
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
create_colorbar(colorbar_hdl, cbar_map, min_blv, max_blv );
% save the attributes of the current image
%
if ~isappdata(gcf, 'VoxelSize')
setappdata(gcf,'Dims',dims);
setappdata(gcf,'VoxelSize',voxel_size);
setappdata(gcf,'Origin',origin);
setappdata(gcf,'orient_pattern', []);
end
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);
if ~isappdata(gcf,'origin_coords')
setappdata(gcf,'origin_coords',origin_coords);
end
if ~isappdata(gcf,'BLVCoords')
setappdata(gcf,'BLVCoords',newcoords);
end
setappdata(gcf,'BLVThreshold',thresh);
setappdata(gcf,'RotateAmount',rot_amount);
setappdata(gcf,'BLVDisplay',blv);
% in order to use function like 'cluster' etc. created by fMRI
%
if ~isappdata(gcf, 'STDims') | ~isappdata(gcf, 'STVoxelSize') ...
| ~isappdata(gcf, 'STOrigin')
setappdata(gcf,'STDims',dims);
setappdata(gcf,'STVoxelSize',voxel_size);
setappdata(gcf,'STOrigin',origin);
end
setappdata(gcf,'WinSize',1);
if ViewBootstrapRatio
setappdata(gcf,'BSThreshold',thresh);
if ~isappdata(gcf, 'BSRatioCoords')
setappdata(gcf,'BSRatioCoords',newcoords);
end
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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 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 + -