【发布时间】:2014-11-15 12:25:15
【问题描述】:
我正在尝试实现一种图像处理算法,该算法涉及计算每个单元格的 4 个相邻邻域的乘积。也就是说,要为 X 计算一个新的矩阵 Y,其中 y[i, j] = x[i-1, j] * x[i, j-1] * x[i+1, j] * x[i, j+1]。越界的邻居应该被忽略。
现在我只能想到这种方法:使用 scipy.ndimage.filters.correlate 并传入带有 0 和一个 1 的权重来获得四个矩阵,每个矩阵都包含一个方向上每个单元格的邻居,就像传入 weight = [[0, 0, 0], [1, 0, 0], [1, 1]] 一样,我得到了a[i, j] = x[i-1, j],以及其他权重我可以得到b[i, j] = x[i, j-1]、c[i, j] = x[i+1, j]、d[i, j] = x[i, j+1]。然后我使用np.multiply 来计算这四个矩阵的乘积。
但是,这种方法有点太慢了,我不能忽略边界。有没有另一种方法可以用 numpy/scipy 做到这一点,所以我不必诉诸 for 循环?
【问题讨论】:
-
如果你先记录日志,那将是一个补充。
-
2x2 卷积离散拉普拉斯算子在相加后会非常接近。只需要取消中项。 en.wikipedia.org/wiki/Discrete_Laplace_operatordocs.scipy.org/doc/scipy/reference/generated/…
-
@Paul 感谢帮助,但是矩阵中可能有负数,所以我不能先取日志。