【发布时间】:2015-07-16 18:24:42
【问题描述】:
我正在尝试使用 Python 获取图像的Gradient Vector Field(类似于this matlab question)。
这是原图:
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
import Image
from PIL import ImageFilter
I = Image.open('test.png').transpose(Image.FLIP_TOP_BOTTOM)
I = I.filter(ImageFilter.BLUR)
p = np.asarray(I)
w,h = I.size
y, x = np.mgrid[0:h:500j, 0:w:500j]
dy, dx = np.gradient(p)
skip = (slice(None, None, 3), slice(None, None, 3))
fig, ax = plt.subplots()
im = ax.imshow(I, extent=[x.min(), x.max(), y.min(), y.max()])
ax.quiver(x[skip], y[skip], dx[skip], dy[skip])
ax.set(aspect=1, title='Quiver Plot')
plt.show()
这是结果:
问题在于向量似乎不正确。当您放大图像时,这一点会变得更加清晰:
为什么有些向量按预期指向中心,而有些则没有?
可能调用np.gradient的结果有问题?
【问题讨论】:
标签: python image image-processing numpy gradient