Bild Farbverlauf-Vektor-Feld in Python

Ich versuche, das Gradienten-Vektorfeld ein Bild mit Python (ähnlich dieses matlab Frage).

Dies ist das ursprüngliche Bild:
Bild Farbverlauf-Vektor-Feld in Python

Hier ist mein 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()

Dies ist das Ergebnis:
Bild Farbverlauf-Vektor-Feld in Python

Das problem ist, dass die Vektoren scheinen falsch zu sein. Dieser Punkt wird klarer, wenn Sie Heranzoomen des Bildes:

Bild Farbverlauf-Vektor-Feld in Python

Warum einige der Vektoren Punkt, um das Zentrum als erwartet, während andere dies nicht tun?

Vielleicht gibt es ein Problem mit dem Ergebnis des Aufrufs np.gradient?

Schreibe einen Kommentar