


Applies the meanshift algorithm to a joint spatial/range image.
See "Mean Shift Analysis and Applications" by Comaniciu & Meer for info.
Assumes X is an MxNxP array, where an X(i,j,:) represents the range data at locations
(i,j). This function runs meanshift on each of the MxN data points. It takes advantage
of the lattice structure of an image for efficiency (it only needs to calculate full
distance between two points if they are near each other spatially).
In the original formulation of the algorithm, after normalization of the data, the
search window around each point x has radius 1 (ie corresponding to 1 std of the data).
That is the search window only encloses 2*s+1 pixels, and of those, all which fall
within 1 unit from x are used to calcluate the new mean. If softflag==0 the original
formulation is used. If softflag==1, instead of using a fixed radius, each point p is
used in the calulation of the mean with points close to x given significantly more
weight. Specifically, each point p is given weight exp(-dist(x,p)). So instead of
having a fixed cutoff at r, the cutoff is 'soft' (same idea as in softmax), and occurs
at approximately r. The implementation remains efficient by actually using a hard
cutoff at points further then 2r spatially from x.
The resulting matrix M is of size MxNx(P+2). M(i,j,1) represents the convergent row
location of X(i,j,:) - (which had initial row location i) and M(i,j,2) represents the
final column location. M(i,j,p+2) represents the convergent value for X(i,j,p). The
optionaly outputs Vr and Vc are 2D arrays where Vr(i,j)=M(i,j,1)-i and
Vc(i,j)=M(i,j,2)-j. That is they represent the spatial offset between the original
location of a point and its convergent location. Display using quiver(Vc,Vr,0).
INPUTS
X - MxNxP data array, P may be 1
sig_spt - integer specifying spatial standard deviation
sig_rng - value specifying the standard deviation of the range data
softflag - [optional] 0 or 1 [see above]
maxiter - [optional] maximum number of iterations per data point
mindelta - [optional] minimum amount of spatial change defining convergence
OUTPUTS
M - array of convergent locations [see above]
Vr - spatial motion in row direction
Vc - spatial motion in col direction
EXAMPLE
I=double(imread('cameraman.tif'))/255;
[M,Vr,Vc] = meanshiftim( I,5,.2 );
figure(1); im(I); figure(2); im( M(:,:,3) );
% color image:
I=double(imread('hestain.png'))/255;
[M,Vr,Vc] = meanshiftim( I,5,.2 );
figure(1); im(I); figure(2); im( M(:,:,3:end) );
DATESTAMP
26-Oct-2005 4:00pm
See also MEANSHIFT, MEANSHIFTIM_EXPLORE