2013-03-10 195 views
1

如何定义一个圆形滤波器,它的作用类似于中值滤波器(medfilt2),而不是[n n]的正方形邻域,在半径r的圆形邻域上执行中值? 我需要在2D图像上执行此操作。 (最好,当然应该快速工作)。 谢谢圆形中值滤波器matlab

回答

5

使用带有圆形域的ordfilt2。例如,

B = ordfilt2(A, order, domain) 

将A中的每个元素替换为由域中的非零元素指定的已排序相邻集合中的第th元素。在你的情况下创造的东西,如

domain=fspecial('disk',10)>0; 

这会产生一个很好的二进制盘(21×21矩阵),这可能是太大了您的需求圆形域,因此可以重新大小,以任何你需要使用fspecialimresize。然后,中位数是从排序的非零元素获得的中间值,因此:

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

很酷!谢谢 ! – matlabit 2013-03-10 10:02:21