gpt4 book ai didi

python - 如何在图像上绘制矢量场?

转载 作者:行者123 更新时间:2023-12-05 04:01:04 27 4
gpt4 key购买 nike

为了从视觉上理解涉及计算、梯度、散度、拉普拉斯等的图像操作所涉及的矢量、标量场,我试图将它们也绘制在所涉及的图像上。我从下面的渐变开始,但是

  1. 与下面的图像相比,旋转箭头组(看起来像这样)。我错过了什么?
  2. 另外,我该如何很好地缩放它们?

MWE:

test_img = cv2.imread('images/ring.png', cv2.IMREAD_GRAYSCALE)
r, c = test_img.shape
gd = 15

test_slice = test_img[::gd,::gd] # every 15th point

X, Y = np.mgrid[0:r:gd, 0:c:gd]
dY, dX = np.gradient(test_slice)

plt.figure(figsize=(10,10))
plt.quiver(X, Y, dX, dY, color='y')
plt.imshow(test_img, cmap='gray')
plt.show()

输出:

enter image description here

所需样式:(下面是图像的矢量场):

enter image description here

使用的示例图像: link

注意:我最初使用的是 png,然后 alpha 区域给出了 nan,所以现在我上传了 jpg。

最佳答案

简短的回答是:np.mgrid() 给你一个转置(即旋转)矩阵,参见 this article例如。

在下文中,我使用 matplotlib.image 加载图像(我首先将其转换回 .png)。我展平图像(即删除 alpha channel )并使用 imshow 和合适的颜色图(“Greys_r”)。然而,重要的部分在 Y, X = np.mgrid[0:r:gd, 0:c:gd] 中,如果您的图像不是正方形开始,您可能会发现自己与。

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

fname="/path/to/ring.png"
im = mpimg.imread(fname)
flat_image=(im[:,:,0]+im[:,:,1]+im[:,:,2])/3.

r, c = np.shape(flat_image)
gd = 4

test_slice = flat_image[::gd,::gd] # sampling

fig,ax=plt.subplots(1,1)
the_image = ax.imshow(
flat_image,
zorder=0,alpha=1.0,
cmap="Greys_r",
origin="upper",
interpolation="hermite",
)
plt.colorbar(the_image)
Y, X = np.mgrid[0:r:gd, 0:c:gd]
dY, dX = np.gradient(test_slice)
ax.quiver(X, Y, dX, dY, color='r')


plt.show()

生成的图像(然而,带有颜色图 viridis)似乎符合您的要求。 Image with quiver

关于python - 如何在图像上绘制矢量场?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55653745/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com