圆形中值滤波器matlab

时间:2013-03-10 07:55:09

标签: matlab image-processing filter computer-vision median

如何定义一个像中值滤波器(medfilt2)一样的圆形滤波器,而不是[n n]的平方邻域,在半径为r的圆形邻域上执行中值? 我需要在2d-image上执行此操作。 (最好当然应该快速工作)。 感谢

1 个答案:

答案 0 :(得分:5)

ordfilt2与循环域一起使用。例如,

B = ordfilt2(A, order, domain)

将A中的每个元素替换为域中非零元素指定的有序邻居集合中的order-th元素。在您的情况下,创建一个类似

的循环域
domain=fspecial('disk',10)>0;

这会产生一个漂亮的二进制磁盘(21x21矩阵),这可能对您的需求来说太大了,因此可以使用fspecialimresize重新调整大小。然后,中位数是从域的排序的非零元素获得的中间值,因此:

B = ordfilt2(A,round(0.5*numel(find(domain)))),domain);