【问题标题】:Gradient direction not consistent (X vs Y) for an image图像的梯度方向不一致(X vs Y)
【发布时间】:2020-12-18 14:58:29
【问题描述】:

我了解渐变方向是从低值到高值。这是一个例子:

import numpy as np
import matplotlib.pyplot as plt
import math

I = np.zeros((3,4), dtype=np.float64)
I[:,0:3] = 1
Y,X = np.mgrid[0:3, 0:4]
Iy,Ix = np.gradient(I)

#plotting quiver plot 1
plt.quiver(X,Y, Ix,Iy,  color='r')
plt.imshow(I)

正如您在上面的图 1 中看到的,方向是从 0 值(低)到 1 值(高)。

当我翻转矩阵并遵循相同的程序时,方向是相反的(从高到低),如下所示:

I2 = np.zeros((3,4), dtype=np.float64)
I2[0:2,:] = 1
print(I2)
Iy2,Ix2 = np.gradient(I2)
plt.imshow(I2)
plt.quiver(X,Y, Ix2,Iy2,  color='r')

箭头不应该向上而不是向下吗?我错过了什么?

【问题讨论】:

  • 我猜这是 Matplotlib 问题。与绘图相比,图像通常以 y 轴反转的方式显示。只是为了检查,确保Iy 矩阵中的值是负数。
  • 感谢@CrisLuengo,确实Iy 术语需要一个负号来纠正它。 plt.quiver(X,Y, Ix2,-Iy2, color='r')
  • 是的,您可以这样更正它,但它不应该是必要的。我的评论想知道这是否是 np.gradient 或 Matplotlib 中的错误。
  • 我刚刚在 MATLAB 中重新定位了您的代码,它在那里按预期工作,Y 的箭头没有反转。
  • 是的,这绝对是plt.quiver 中的一个错误。 Iy2 值是正确的。单独执行plt.quiver 会正确显示箭头(指向下方,默认为负 y 方向)。添加图像会反转轴,但不会反转箭头的方向。

标签: python numpy image-processing computer-vision gradient


【解决方案1】:

为了纠正 y 轴的反转,颤动图需要在 Iy 术语前面加上负数。 plt.quiver(X,Y, Ix2,-Iy2, color='r')

【讨论】:

    猜你喜欢
    • 2020-09-12
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2020-04-25
    • 2011-08-01
    • 2016-11-27
    • 2018-06-24
    相关资源
    最近更新 更多