【发布时间】:2014-04-23 21:56:07
【问题描述】:
我有一个图像 U,当我想用盒子过滤器对它进行卷积时:
0 1 0
1 -4 1
0 1 0
我使用带有常量二维数组的 imfilter 函数,没有问题。但是,当我进行以下操作时:
u(i,j) = v(i-1,j)^2 * u(i-1,j) + v(i+1,j)^2 * u(i+1,j) + v(i, j+1)^2 * u(i,j+1) + v(i,j-1)^2 * u(i,j-1)
(我的过滤器的简化版本)。换句话说,我要在图像 U 上使用的过滤器与图像 V 的像素值相关,但在应用过滤器的同一位置。有没有办法在 MATLAB 中实现这样的操作,而不使用每个像素的嵌套 for 循环?
【问题讨论】:
-
您不希望获取
u.*(v.^2),然后将其与适当的过滤器进行卷积吗? -
您可以考虑使用具有 [1 1] 块大小和适当边框大小的 BLOCKPROC。在回调中,您将获得从 v 中查找像素的索引。实现起来应该很快,但运行起来很慢。查找 blockproc 并尝试一下,如果遇到困难,请回复。旁白:您可能对mathworks.com/help/images/ref/imguidedfilter.html 感兴趣
-
如果您打算遵循@Ashish 的建议,请小心:块处理〜= 移动过滤器!从这一点出发,我支持在过滤之前将两个图像相乘的方法。
-
吉格,就是这样。使用带有 BorderSize 的块大小为 [1 1] 会导致滑动窗口过滤器。 stackoverflow.com/questions/15195030/…