Краткий ответ: np.mgrid()
дает вам транспонированную (то есть повернутую) матрицу, см., Например, эту статью .
Далее я использую matplotlib.image
загрузить изображение (которое я сначала преобразовал обратно в .png).Я сглаживаю изображение (т.е. удаляю альфа-канал) и использую 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
)кажется, делать то, что вы хотите.