I am trying to get a Gradient vector field of an image using Python (similar to this question in mataba ).
This is the original image: 
Here is my code:
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()
This is the result: 
The problem is that the vectors seem to be wrong. This point becomes clearer when zooming in:

Why do some of the vectors point to the center as expected, while others do not?
Perhaps there was a problem with the result of calling np.gradient ?
python numpy image image-processing gradient
Rodrigo Baravalle
source share