【问题标题】:Matlab, how to apply medfilt2 function on specific pixel locationsMatlab,如何在特定像素位置应用 medfilt2 函数
【发布时间】:2017-07-22 05:20:21
【问题描述】:

如果我想将 medfilt2 函数应用于特定像素位置而不是整个图像,有没有办法?可以使用称为 IMask 的二进制图像来表示像素位置。

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    懒惰的方法是在整个图像上应用medfilt2,然后复制特定位置。例如

    A = magic(10); % sample matrix
    IMask = logical(randi([0 1],10)); % sample locations
    
    B = medfilt2(A);
    A(IMask) = B(IMask);
    

    不是很优雅,但可以完成这项工作,除非您的矩阵非常庞大并且IMask 大多是错误的。

    【讨论】:

    • 不幸的是,这是最快的方法。 medfilt2 由英特尔 IPP 和可选的 CUDA 加速(如果您有并行计算工具箱),因此分支和查找不过滤像素的异常会中断流程。例如,这在 CUDA 和 OpenCL 中很常见。
    【解决方案2】:

    我不明白这一点,但如果您定义传递给medfilt2 的矩阵是您想要处理的图像的子集但您必须注意填充(边界处的零/对称/等值)。

    之后,您只需在图像中正确位置替换处理后的矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2014-02-14
      • 2013-10-29
      相关资源
      最近更新 更多