# meanShiftIm

## PURPOSE

Applies the meanShift algorithm to a joint spatial/range image.

## SYNOPSIS

function [M,Vr,Vc] = meanShiftIm( X,sigSpt,sigRng,softFlag,maxIter,minDel )

## DESCRIPTION

``` 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
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).

USAGE
[M,Vr,Vc] = meanShiftIm( X,sigSpt,sigRng,[softFlag],[maxIter],[minDel] )

INPUTS
X        - MxNxP data array, P may be 1
sigSpt   - integer specifying spatial standard deviation
sigRng   - value specifying the standard deviation of the range data
softFlag - [0]- see above
maxIter  - [100] maximum number of iterations per data point
minDel   - [.001] 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
[M,Vr,Vc] = meanShiftIm( I,5,.2 );
figure(1); im(I); figure(2); im( M(:,:,3) );
% color image: