在MATLAB图像处理工具箱中提供了二维统计顺序滤波函数ordfilt2函数。二维统计顺序滤波是中值滤波的推广,对于给定的n个数值{al ,a2,...,an},将它们按大小顺序排列,将处于第k个位置的元素作为图像滤波输出,即序号为k的二维统计滤波。ordfilt2函数语法格式为:
句法
B = ordfilt2(A,order,domain)
%将A中的每个元素替换为由域中非零元素指定的有序邻居集合中的orderth元素
B = ordfilt2(A,order,domain,S)
%过滤器A,其中ordfilt2使用对应于域的非零值的S值作为附加偏移量。您可以使用此语法来实现灰度形态学操作,包括灰度扩张和侵蚀。
B = ordfilt2(___,padopt)
%过滤器A,其中padopt指定ordfilt2如何填充矩阵边界。
其中,(1)A是输入矩阵,指定为2-D,实数,非稀疏,数字或逻辑数组。
(2)order是用于替换目标像素的元素,指定为类double的实数标量整数。
(3)domain是邻域,指定为数字或逻辑矩阵,包含1和0。域相当于用于二值图像操作的结构元素。 1值元素定义了过滤操作的邻域。下表给出了一些常 见过滤器的例子:
其功能是:对图像X作顺序统计滤波,order为滤波器输出的顺序值,domain为滤波窗口。S是与domain大小相同的矩阵,它是对应domain中非零值位置 的输出偏置,这在图形形态学中是很有用的。例如:
B=ordfilt2(X,5,ones(3,3)),相当于3×3的中值滤波
B=ordfilt2(X,1,ones(3,3)),相当于3×3的最小值滤波
B=ordfilt2(X,9,ones(3,3)),相当于3×3的最大值滤波
B=ordfilt2(X,1,[0 1 0;1 0 1;0 1 0]),输出的是每个像素的东、西、南、北四个方向相邻像素灰度的最小值。
(4)S是附加偏移量,指定为与域大小相同的矩阵。
(5)padopt是填充选项,指定为以下任一值:
Option | Description |
\'zeros\' |
Pad array boundaries with 0\'s (用0填充数组边界) |
\'symmetric\' |
Pad array with mirror refiections of itself (对称填充) |
Examples
%Read image into workspace and display it.
A = imread(\'snowflakes.png\'); figure imshow(A)
%Filter the image and display the result. B = ordfilt2(A,25,true(5)); figure imshow(B)