Hi!
Ich weiß, es ist vielleicht Offtopic, da es (noch) nicht direkt mit der Programmierung in Python zusammenhängt, sondern zunächst um eine prinzipielle mathematische Frage geht:
Mir liegt eine Matrix aus z-Koordinaten vor, die eine Fläche abbilden. Ich möchte nun die Gradienten der Einträge berechnen und plotten. Ich habe dies bereits mit Differenzenquotienten in x- und y getan und das Ergebnis sieht gut aus; Nachteil dieser Methode ist jedoch, dass eine Matrix mit anderen Dimensionen herauskommt, und die Gradienten für jeden Eintrag ja nur leicht versetzt an diesem gelten.
Daher wurde mir hier im Forum der Sobel-Operator empfohlen. Diesen habe ich exemplarisch auf eine fiktive Matrix angewandt. Kann hier wer bitte drüberschauen, ob das so korrekt ist?
Die erste auf der Abbildung zu sehende Matrix ist die Ausgangsmatrix. Die erste Zeile und Spalte stellen die Rasterkoordinaten in x und y dar (also an welchen Stellen in x- und y die inneren Matrixeinträge gemessen wurden) dar und sind nicht weiter zu beachten. Die roten Zahlen sind die z-Koordinaten, zu denen es Gradienten zu berechnen gilt.
Die Berechnung von Gx und Gy, bzw Gges habe ich drunter angefügt .
Die Gradientenmatrix belege ich an erste bzw. letzte Zeile und Spalte mit 0 (Randproblem); den ersten berechneten Eintrag habe ich an den in meinen Augen richtigen Stelle eingetragen
Stimmt das so? Gibt es verbesserungswürdiges?
Besten Dank für eure Hilfe!!!
Sobeloperator auf Matrix anwenden
Ich weiss zwar nicht was du da genau machen willst,
aber deine Gx-Matrix scheint nicht richtig.
Die Matrix für den "right sobel" sieht eigentlich so aus:
-1 0 1
-2 0 2
-1 0 1
Du hast da in der linken unteren Ecke aber ein -2
Für weitere Kernel-Matrizen ...guckst du hier:
https://setosa.io/ev/image-kernels/
aber deine Gx-Matrix scheint nicht richtig.
Die Matrix für den "right sobel" sieht eigentlich so aus:
-1 0 1
-2 0 2
-1 0 1
Du hast da in der linken unteren Ecke aber ein -2
Für weitere Kernel-Matrizen ...guckst du hier:
https://setosa.io/ev/image-kernels/
tonikae hat geschrieben: ↑Donnerstag 3. Februar 2022, 12:22 Ich weiss zwar nicht was du da genau machen willst,
aber deine Gx-Matrix scheint nicht richtig.
Die Matrix für den "right sobel" sieht eigentlich so aus:
-1 0 1
-2 0 2
-1 0 1
Du hast da in der linken unteren Ecke aber ein -2
Für weitere Kernel-Matrizen ...guckst du hier:
https://setosa.io/ev/image-kernels/
okay, ich habe keine ahnung was mir da passiert ist. du hast natürlich recht. auch passen in meinem Gx teilweise die Vorzeichen nicht.
Trotzdem: Ist mein Vorgehen prinzipiell so richtig?
tonikae hat geschrieben: ↑Donnerstag 3. Februar 2022, 12:22 Ich weiss zwar nicht was du da genau machen willst,
aber deine Gx-Matrix scheint nicht richtig.
Die Matrix für den "right sobel" sieht eigentlich so aus:
-1 0 1
-2 0 2
-1 0 1
Du hast da in der linken unteren Ecke aber ein -2
Für weitere Kernel-Matrizen ...guckst du hier:
https://setosa.io/ev/image-kernels/
wobei: wenn ich den wikipedia-artikel lese
https://de.wikipedia.org/wiki/Sobel-Operator
sieht Gx so aus:
1 0 -1
2 0 -2
1 0 -1
Gy
1 2 1
0 0 0
-1 -2 -1
okay, vielen dank; sieht wirklich mächtig aus und ist interessant zum rumspielen;
trotzdem: das "intelligenteste" / mathematisch beste wäre sobel-left + right bzw top/bottom zu überlagern oder? wie es im Wikipedia-Artikel gemacht wird?
trotzdem: das "intelligenteste" / mathematisch beste wäre sobel-left + right bzw top/bottom zu überlagern oder? wie es im Wikipedia-Artikel gemacht wird?
okay, sorry. Recht hast du.
Also, ich untersuche Metalloberflächen auf Defekte, beispielsweise Löcher, Spritzer oder Kugelförmige Ausbildungen, die beim Schaffungsprozess entstanden sind; an diesen finden sich lokal starke Steigungen (eben an den Löchern oder den Erhebungen); diese interessieren mich (beispielsweise ob bestimmte Defekte bestimmte Gradienten aufweisen etc). Nutzt dir die Info etwas?
Mithilfe der Gradienten würde ich dann gerne eine Heatmap zum jeweiligen Bauteil erstellen und diese einer Objekt-Erkennungs KI übergeben (YOLOv4).
Das ganze habe ich ja bereits mit Differenzenquotienten gemacht und das funktioniert gut & sieht gut aus, nur meint mein Betreuer, dass meine Bildung der Differenzenquotienten unsauber ist und Sobel sauberer wäre
Also, ich untersuche Metalloberflächen auf Defekte, beispielsweise Löcher, Spritzer oder Kugelförmige Ausbildungen, die beim Schaffungsprozess entstanden sind; an diesen finden sich lokal starke Steigungen (eben an den Löchern oder den Erhebungen); diese interessieren mich (beispielsweise ob bestimmte Defekte bestimmte Gradienten aufweisen etc). Nutzt dir die Info etwas?
Mithilfe der Gradienten würde ich dann gerne eine Heatmap zum jeweiligen Bauteil erstellen und diese einer Objekt-Erkennungs KI übergeben (YOLOv4).
Das ganze habe ich ja bereits mit Differenzenquotienten gemacht und das funktioniert gut & sieht gut aus, nur meint mein Betreuer, dass meine Bildung der Differenzenquotienten unsauber ist und Sobel sauberer wäre
Na dann kommt es eben drauf an, wie die KI die Daten haben will. Wenn die einfach nur mit Schwellwerten arbeitet, und nicht mit 2D-Daten, dann kannst du das schon kombinieren zu einem Steigungswert. Wobei ich dann die Frage stellen wuerde, warum du nicht gleich zB sowas wie canny edge drueberlaufen laesst, dass kombiniert diverse Verfahren (Sobel inklusive) zu gut abgrenzbaren Features.