1

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

4

1 回答 1

5

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

B = ordfilt2(A, order, domain)

将 A 中的每个元素替换为由 domain 中的非零元素指定的已排序邻居集合中的第一个元素. 在您的情况下,使用类似的东西创建一个循环域

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

这会生成一个不错的二进制磁盘(21x21 矩阵),这可能对您的需要来说太大了,因此可以使用fspecialor重新调整大小到您需要的任何内容imresize。那么中位数就是从域的排序非零元素中得到的中间值,所以:

B = ordfilt2(A,round(0.5*numel(find(domain)))),domain);
于 2013-03-10T08:57:56.953 回答