Mean Shift Segmentation
There are actually two steps in Mean-shift image segmentation: mean-shift filtering and then some merging and eliminating for segmentation. here’s a paper well states the process. I found it quite clear and easy to understand. Below are some notes on Mean Shift Segmentation.
1. Based on non-parametric density estimation, no assumptions about probability distributions, and no restriction on the spatial window size (which is different from bi-lateral filtering)
2. Spatial-range joint domain (x, y, f(x, y)), spatial domain refers to image spatial coordinates, while range domain refers to image dimension, such as gray image (1), rgb color image (3), etc
3. Finds the maximm in the (x, y, f) space, clusters close in both space and range correspond to classes.
4. The 3 parameters (such in EDISON) are :
sigmaS: — normalization parameter for spatial
sigmaR — normalization parameter for range domain
minRegionSize — minimum size (lower bound) that a ‘region’ is declared as a class
To understand the two normalization parameter, sigmaS and sigmaR, think about the window size in the kernel function in the kernel density estimation. It controls the ‘range’ or say smoothness of the kernel, or how fast the kernel decays. Larger the normalization parameter is, it is smoother in the corresponding space( either spatial or range), or decays slower. A ZERO value corresponds to a delta function, which only concentrate on the center, i.e. the filtering output will be the same as the input, all details (each pixel) are remained. Larger sigmaS smoothes the spatial, while larger sigmaR smoothes the range (color domain). And from the results I obtain, singmaS is much more sensitive as compare to sigmaR.
The most well known open source for mean-shift, which is also very fast, is EDISON. If you want to use it in Matlab, there are also some wrappers.
Left: Original, Middle (4, 4, 5), Right: (10, 4, 5)