Code covered by the BSD License  

Highlights from
GETCLIM: Suggest appropriate values for colormap limits

image thumbnail

GETCLIM: Suggest appropriate values for colormap limits

by

 

31 Jan 2013 (Updated )

Determines thresholds such that 2% of data values will be mapped to the extremes of the colormap

getclim(imdata, dataFraction)
function threshVals = getclim(imdata, dataFraction)
% GETCLIM  Suggest appropriate values for colormap limits
%
% getclim determines threshold values such that 2% (by default) of
%   values at the top and bottom of the data range will be mapped 
%   to the extremes of the colormap.
%
% For datasets with a few outliers that influence the range, getclim
%   is superior to the default behaviour of using the min and max
%   of the dataset.
%
% Usage: threshVals = getclim(imdata, dataFraction)
%
%          imdata: numeric array representing an image to be displayed
%    dataFraction: fraction of voxels to clip at each end (default 0.02)
%
%    threshVals: column vector of values to use for clims in imshow
%
% Example:
%   I = peaks(200);
%   min(I(:)), max(I(:))     % -6.5487, 8.1059
%   threshVals = getclim(I)  % -4.2936, 5.8228
%   I2 = I;
%   I2(153,106) = 3*I(153,106);
%   min(I2(:)), max(I2(:))   % -6.5487, 23.5936
%   threshVals = getclim(I2) % -4.2936, 5.8228
%   figure
%   subplot(2,2,1), imshow(I, []), title('I')
%   subplot(2,2,2), imshow(I, threshVals), title('I+getclim')
%   subplot(2,2,3), imshow(I2, []), title('I2')
%   subplot(2,2,4), imshow(I2, threshVals), title('I2+getclim')
%
% See also STRECHLIM, IMADJUST

% v0.3 (Jan 2013) by Andrew Davis (addavis@gmail.com)

%% check arguments
assert(isnumeric(imdata), 'imdata should be a numeric array')
if exist('dataFraction', 'var') ~= 1 || isempty(dataFraction), dataFraction = 0.02; end;
assert(isscalar(dataFraction) && dataFraction <= 1.0 && dataFraction >= 0.0, 'dataFraction should be a scalar between 0 and 1')

% vectorize, remove NaNs, sort
imdata = imdata(:);
imdata = imdata(isfinite(imdata));
imdata = sort(imdata);

% determine absolute number of values at extremes
N = length(imdata);
threshIndex = floor(N*dataFraction);

% determine data thresholds
threshVals = [imdata(threshIndex+1); imdata(end-threshIndex)];

Contact us