非线性空间滤波
非线性空间滤波对图像的处理是针对邻域进行的。用一个m×n的滤波器的中心点滑过一幅图像,在这个过程中,对滤波器包围的像素执行一些非线性的操作便是非线性空间滤波。例如将每个中心点处的响应处理为邻域内的最大像素值或最小像素值,或者是处理为邻域内像素的几何平均值,这些操作都是非线性空间滤波的方式。
线性空间滤波可以参考这篇文章Matlab中函数imfilter的使用和线性空间滤波中相关与卷积的区分
colfilt
函数colfilt实现对图像的非线性滤波。该函数按列的形式组织数据,通过占用更多的内存来换取更快的速度适合大多数图像处理应用。
若图像f的大小为M×N,邻域的大小为m×n,函数colfilt生成一个最大尺寸为mn×MN的矩阵A。矩阵A中的每一列为图像中被邻域包围的像素。
比如一幅5×5的图像,选择邻域大小为3×3
对其进行零填充,得到
矩形框中的元素则是矩阵A中的第一列元素,所以矩阵A的行数为mn,这样A每一列的元素个数便为mn,与邻域的大小相同;矩阵A的列数为MN,具有的列数刚好和图像的大小相同。
调用格式
g = colf