meanshiftim

PURPOSE ^

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

SYNOPSIS ^

function [M,Vr,Vc] = meanshiftim( X, sig_spt, sig_rng, softflag, maxiter, mindelta )

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
 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

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:
Generated on Wed 03-May-2006 23:48:50 by m2html © 2003