Ich versuche, das Gradientenvektorfeld zu erhalten eines Bildes mit Python (ähnlich wie diese Matlab-Frage ).
Dies ist das Originalbild:
Hier ist mein Code:
%Vor%Das ist das Ergebnis:
Das Problem ist, dass die Vektoren inkorrekt zu sein scheinen. Dieser Punkt wird deutlicher, wenn Sie das Bild vergrößern:
Warum zeigen einige der Vektoren wie erwartet auf das Zentrum, während andere nicht?
Vielleicht gibt es ein Problem mit dem Ergebnis des Aufrufs von np.gradient
?
Ich denke, deine seltsamen Ergebnisse sind zumindest teilweise, weil p vom Typ uint8
ist. Sogar numpy diff führt zu eindeutig falschen Werten für ein Array dieses dtype. Wenn Sie in eine Ganzzahl mit Vorzeichen konvertieren, indem Sie die Definition von p
durch die folgende ersetzen: p = np.asarray(I).astype(int8)
, dann sind die Ergebnisse von diff korrekt. Der folgende Code gibt mir das, was wie ein vernünftiges Feld aussieht,
Dies ergibt Folgendes:
und close up das sieht aus wie du es erwartest,
Tags und Links python image image-processing gradient numpy