Files
fold_slice/+plotting/imagesc_tomo.m
T
2026-08-07 15:56:42 +09:00

99 lines
2.9 KiB
Matlab

function [im_out,range]=imagesc_tomo( varargin )
% Function [im_out]=imagesc_tomo( varargin )
% Parameters:
% data - 3D array to be shown
% colormap - name of standard matlab colormap, default = bone
% clim - range of the colorbar, default is [] (auto range)
% axis - cell of strings with axis parameters, eg. {'image', 'off'}
import math.sp_quantile
import plotting.imagesc3D
par = inputParser;
par.addOptional('data', [])
par.addParameter('colormap', 'bone' )
par.addParameter('clim', [] , @isnumeric )
par.addParameter('axis', {'image', 'off'}, @iscell)
par.addParameter('colorbar',false, @islogical)
par.parse(varargin{:})
r = par.Results;
data = r.data;
if ismatrix(data)
imagesc3D(data);
return
end
Npix = size(data);
cntr = ceil(Npix/2);
if isa(data, 'gpuArray')
data = gather(data); % download data from GPU
end
if isempty(r.clim)
range = sp_quantile(data, [1e-3, 1-1e-3], max(1, ceil(sqrt(numel(data))/1e3)));
else
range = r.clim;
end
%disp('range:')
%disp(range)
colormap(r.colormap)
args = {'show_play_button', false, 'show_edit_box', false };
ax(1) = subplot(2,3,1);
imagesc3D(rot90(permute(data, [2,3,1]),1), 'init_frame', cntr(1), 'slider_position',slider_pos(ax(1)), args{:});
axis(r.axis{:});
if isreal(data) && range(1) < range(2); caxis(range); end
if r.colorbar; colorbar; end
title('Centralslice xz');
ax(2) = subplot(2,3,2);
imagesc3D(rot90(permute(data, [1,3,2]),1), 'init_frame', cntr(2),'slider_position',slider_pos(ax(2)), args{:});
axis(r.axis{:});
if isreal(data) && range(1) < range(2); caxis(range); end
if r.colorbar; colorbar; end
title('Centralslice yz');
ax(3) = subplot(2,3,3);
imagesc3D(data, 'init_frame', cntr(3),'slider_position',slider_pos(ax(3)), args{:});
axis(r.axis{:});
if isreal(data) && range(1) < range(2); caxis(range); end
if r.colorbar; colorbar; end
title('Centralslice xy');
ax(4) = subplot(2,3,4);
imagesc3D(rot90(squeeze(sum(data,1)),1));
axis(r.axis{:});
title('Projection xz');
if r.colorbar; colorbar; end
ax(5) = subplot(2,3,5);
imagesc3D(rot90(squeeze(sum(data,2)),1));
axis(r.axis{:});
title('Projection yz');
if r.colorbar; colorbar; end
ax(6) = subplot(2,3,6);
imagesc3D(squeeze(sum(data,3)));
axis(r.axis{:});
title('Projection xy');
if r.colorbar; colorbar; end
% link together axis from the projections and the slices
linkaxes(ax([1,4]), 'xy')
linkaxes(ax([2,5]), 'xy')
linkaxes(ax([3,6]), 'xy')
if nargout > 0
im_out = ax;
end
end
function slider_default = slider_pos(ax)
pos = ax.Position;
slider_default = [pos(1)+pos(3)/2-0.095 pos(2)-0.045 0.2 0.04];
end