function vl_plotss(ss, varargin) % VL_PLOTSS Plot scale space % VL_PLOTSS(SS) plots the scale space SS. SS is a structure % with the following members: % % ss.firstOctave:: % The index of the first octave in the scale space. % % ss.lastOctave:: % The index of the last octave in the scale space. % % ss.octaveResolution:: % The octave resolution, i.e. the nubmer of subdivisions % per octave. % % ss.octaveFirstLevel:: % The index of the first level of subdivisions for each octave. % % ss.octaveLastLevel:: % The iundex of last leve of subdivisions for each cotave. % % ss.data:: % A cell array of 3D arrays representing the scale space data. % The cell array has a length equal to the nubmer of octaves % contained in the scale space. Each entry is a 3D array, the % first two dimensions of which correspond to image rows and % columns respectively, and the third to scale levels. % % ss.sigma0:: % Base smoothing. % % A scale space is a representation of a 2D signal (image) at % multiple scales. In the simplest case, a scale SIGMA is defined as % the input image I(x,y) convolved by a Gaussian kernel of isotropic % standard deviation SIGMA: % % I(x,y;sigma) = (g_sigma * I)(x,y) % % where scales are sampled as follows: % % sigma(o,s) = sigma0 2^{o + s / ss.octaveResolution), % ss.firstOctave <= o <= ss.lastOctave, % ss.octaveFirstLeve <= s <= ss.octaveLastLevel. % % Moving from one octave to the next, the size of the kernel % doubles. Hence the effective bandwith of the signal halves, and % resolution can be reduced by half. Typically, for example, sigma0 % = 1.6, so at octave 0 the image can be effectively sampled with a % step of 1, and the resolution of octave 0 is the same as the one % at which the input image is presented. Then at octave o the % sampling step is 2^o. % % ss.octaveResolution is the number of scale subdivisions per % octave. ss.firstOctave and ss.lastOctave give the additional % flexibility of specifying a range for the level index s to exceed % the standard setting [0, ss.octaveResolution-1]. In this manner % the same scales can be represented twice, at two sampling % rates. This is often convenient in feature computation (e.g. to % find local maxima in scale of a function). % % VL_PLOTSS(SS, 'Option', value) supports the following options: % % Uniform:: false % If TRUE then use a fixed gray scale for all the levels. % Author: Andrea Vedaldi % Copyright (C) 2007-12 Karel Lenc, Andrea Vedaldi, and Michal Perdoch % 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.uniform = false ; opts.clim = [] ; opts = vl_argparse(opts, varargin) ; numOctaves = numel(ss.data) ; if opts.uniform & isempty(opts.clim) minv = +inf ; maxv = -inf ; for i = 1:numOctaves minv = min(minv, min(ss.data{i}(:))) ; maxv = max(maxv, max(ss.data{i}(:))) ; end opts.clim = [minv maxv] ; end clf ; for i = 1:numOctaves vl_tightsubplot(numOctaves, i) ; vl_imarraysc(ss.data{i}, 'clim', opts.clim) ; axis image off ; title(sprintf('octave %d', ss.firstOctave - 1 + i)) ; end