This function performs a Kuwahara filtering on images. It is optimized using vectorization, convolution and the fact that, for every subregion
variance = (mean of squares) - (square of mean).
A nested-for loop approach is still used in the final part as it is more readable, but a commented-out, fully vectorialised version is provided as well.
This function is about 2.3 times faster than KuwaharaFast at
http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=13474&objectType=file
with a 5x5 window, and even faster at higher window sizes (about 4 times on a 13x13 window)
Kuwahara Filter description
The Kuwahara filter works on a window divided into 4 overlapping subwindows (for a 5x5 pixels example, see below). In each subwindow, the mean and variance are computed. The output value (located at the center of the window) is set to the mean of the subwindow with the smallest variance.
( a a ab b b)
( a a ab b b)
(ac ac abcd bd bd)
( c c cd d d)
( c c cd d d)
References:
http://www.ph.tn.tudelft.nl/DIPlib/docs/FIP.pdf
http://www.incx.nec.co.jp/imap-vision/library/wouter/kuwahara.html |