/usr/share/octave/site/m/vlfeat/toolbox/imop/vl_imarraysc.m is in octave-vlfeat 0.9.17+dfsg0-6+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | function J = vl_imarraysc(A, varargin)
% VL_IMARRAYSC Scale and flattens image array
% J=VL_IMARRAYSC(A) constructs an image mosaic similar to
% J=VL_IMARRAY(A), but it rescales the range of each image in the
% array. If A is an array of grayscale images, J will index all the
% colors in the current colormap; if A is a true color image, J will
% span the range [0,1].
%
% If A is of an integer class, J will be of class single SINGLE class.
%
% VL_IMARRAYSC(...) displays the image J rather than returning it.
%
% VL_IMARRAYSC() accepts the options of VL_IMARRAY() and:
%
% CLim:: []
% Rescale the specified range of values rather than the actual
% range of each image.
%
% Uniform:: [false]
% Rescale the range of all the images together, rather than on
% an image-by-image basis.
%
% CMap:: []
% Use the specified color map as a reference rather than the
% current or default one.
%
% Algorithm::
% CLim is seet to the image range [m, M], where m is the minimum
% value of an image and M is the maximum. The image range CLim is
% then affinely mapped to the integers from 1 to C, where C is the
% number of colors in the colormap, or to the range [0,1] for true
% color images. The mapping is done so that the first color is
% assigned the first subinterval of length C of the range [m,M]
% and so on.
%
% See also: VL_IMARRAY(), VL_HELP(), IMAGE().
% Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson.
% All rights reserved.
%
% This file is part of the VLFeat library and is made available under
% the terms of the BSD license (see the COPYING file).
opts.clim = [] ;
opts.cmap = colormap ;
opts.uniform = false ;
[opts, varargin] = vl_argparse(opts, varargin) ;
numDimensions = ndims(A) ;
if numDimensions <= 3
numChannels = 1 ;
numImages = size(A,3) ;
numLevels = size(opts.cmap,1) ;
elseif numDimensions == 4
numChannels = size(A,3) ;
numImages = size(A,4) ;
numLevels = 1 ;
if numChannels ~= 3
error('A has more than three dimensions and the third one is not equal to three.') ;
end
else
error('A has neither 2, 3 or 4 dimensions.') ;
end
if opts.uniform & ~isempty(opts.clim)
error('UNIFORM cannot be used in combination with CLIM.') ;
end
if isinteger(A)
A = single(A) ;
end
if opts.uniform && numDimensions < 4
opts.clim = [min(A(:)) max(A(:))] ;
end
for k = 1:numImages
if isempty(opts.clim)
if numChannels == 1
tmp = A(:,:,k) ;
else
tmp = A(:,:,:,k) ;
end
dataMin = min(tmp(:)) ;
dataMax = max(tmp(:)) ;
else
dataMin = opts.clim(1) ;
dataMax = opts.clim(2) ;
end
a = numLevels / (dataMax - dataMin + eps) ;
b = - dataMin * a ;
if numChannels == 1
A(:,:,k) = max(min(floor(a * A(:,:,k) + b + 1),numLevels),1) ;
else
A(:,:,:,k) = max(min(a * A(:,:,:,k) + b,numLevels),0) ;
end
end
if nargout == 0
vl_imarray(A,varargin{:}, 'cmap', opts.cmap) ;
else
J = vl_imarray(A,varargin{:}, 'cmap', opts.cmap) ;
end
|