【发布时间】:2013-02-25 12:58:52
【问题描述】:
如何定义一个类似于中值滤波器 (medfilt2) 的圆形滤波器,而不是 [n n] 的正方形邻域,而是在半径为 r 的圆形邻域上执行中值? 我需要对 2d 图像执行此操作。 (而且最好当然应该快速工作)。 谢谢
【问题讨论】:
标签: matlab image-processing filter computer-vision median
如何定义一个类似于中值滤波器 (medfilt2) 的圆形滤波器,而不是 [n n] 的正方形邻域,而是在半径为 r 的圆形邻域上执行中值? 我需要对 2d 图像执行此操作。 (而且最好当然应该快速工作)。 谢谢
【问题讨论】:
标签: matlab image-processing filter computer-vision median
将ordfilt2 与循环域一起使用。例如,
B = ordfilt2(A, order, domain)
将 A 中的每个元素替换为由 domain 中的非零元素指定的已排序邻居集合中的第一个元素。在您的情况下,使用类似
的内容创建一个循环域domain=fspecial('disk',10)>0;
这会生成一个不错的二进制磁盘(21x21 矩阵),这可能对您的需要来说太大了,因此可以使用fspecial 或imresize 重新调整大小以适应您的需要。那么中位数就是域的排序后的非零元素得到的中间值,所以:
B = ordfilt2(A,round(0.5*numel(find(domain)))),domain);
【讨论】: