如何定义一个像中值滤波器(medfilt2)一样的圆形滤波器,而不是[n n]的平方邻域,在半径为r的圆形邻域上执行中值? 我需要在2d-image上执行此操作。 (最好当然应该快速工作)。 感谢
答案 0 :(得分:5)
将ordfilt2
与循环域一起使用。例如,
B = ordfilt2(A, order, domain)
将A中的每个元素替换为域中非零元素指定的有序邻居集合中的order-th元素。在您的情况下,创建一个类似
的循环域domain=fspecial('disk',10)>0;
这会产生一个漂亮的二进制磁盘(21x21矩阵),这可能对您的需求来说太大了,因此可以使用fspecial
或imresize
重新调整大小。然后,中位数是从域的排序的非零元素获得的中间值,因此:
B = ordfilt2(A,round(0.5*numel(find(domain)))),domain);