Masked k-order statistic filter for double data
refer to: F. Bellavia, D. Tegolo, C. Valenti, "Improving Harris corner selection strategy", IET Computer Vision 5(2), 2011. Only for academic or other non-commercial purposes.
With respect to standard matlab routines, any kernel mask can be used and it is faster for large kernel size (i.e. more than 30x30 kernel mask)
im - input 2D matrix
ker - kernel binary mask
idx - k-order index, in range [1,sum(ker(:)))
Use idx=1 for min filter (graylevel erosion), idx=sum(ker(:))/2+0.5 for median filter, idx=sum(ker(:)) for max filter (graylevel dilation), any other value for k-selection filter, non integer values interpolate between values, i.e. 5.6 give 0.4*I(5)+0.6*I(6) where I(n) is the n-th values in the sorted order inside the kernel mask.
r - result 2D matrix, of the same size of im, zero padding is used for the border.
The median filter implementation is based on:
W. Hardle, W. Steiger, "Algorithm AS 296: Optimal Median Smoothing", Journal of the Royal Statistical Society, Series C (Applied Statistics), pp. 258-264.
Jenny, change the two occurrences of calloc with mxCalloc in ordstatfilt2.c, rebuild the mex file and try again. I've uploaded the fixed (I hope) version with an usage example demo. This will be available as soon as matlab administrator will approve the submission, so check the file in the next days.
MATLAB crashes any time I try to use it.
added support to build the mex file with microsoft visual studio (thanks to Giosue' Lo Bosco)
fix crash on newer matlab version
2nd revision: removed some comment typos
Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.