【发布时间】:2017-07-22 05:20:21
【问题描述】:
如果我想将 medfilt2 函数应用于特定像素位置而不是整个图像,有没有办法?可以使用称为 IMask 的二进制图像来表示像素位置。
【问题讨论】:
如果我想将 medfilt2 函数应用于特定像素位置而不是整个图像,有没有办法?可以使用称为 IMask 的二进制图像来表示像素位置。
【问题讨论】:
懒惰的方法是在整个图像上应用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 中很常见。
我不明白这一点,但如果您定义传递给medfilt2 的矩阵是您想要处理的图像的子集但您必须注意填充(边界处的零/对称/等值)。
之后,您只需在图像中正确位置替换处理后的矩阵。
【讨论】: