Hallo, bei einigen Kanten- und Eckendetektoren für Grauwert-Bilder braucht man die Approximation der 1. oder 2. partiellen Ableitungen (woraus Gradient und Hesse-Matrix folgen) für bestimmte Pixel. Soweit ich es richtig verstanden habe, wird die erste partielle Ableitung durch die Differenz (der Grauwerte) zu den benachbarten Pixeln berechnet. Und was sind dann die zweiten partiellen Ableitungen? Es wäre toll, wenn mir jemand für folgendes Beispiel die Approximationen der ersten und zweiten partiellen Ableitung mit Rechenweg und Erklärung berechnen könnte (damit ich eine Vorstellung bekomme) : 10 14 15 11 09 08 13 16 23 08 08 12 39 22 10 07 11 29 17 12 04 10 34 22 09 Es geht um das mittlere Pixel mit dem Grauwert 39. Wenn ich richtig liege, dann wäre die erste partielle Ableitung nach x : (39 - 12, 39 - 39, 39 - 22) = (27, 0, 17) und nach y : (39 - 16, 39 - 39, 39 - 29) = (23, 0, 10) Danke im Vorraus, der Peter
Schau dir mal den Sobel-Operator (1. Ableitung) und den Laplace-Operator an (2.Ableitung). Ersterer hat eigentlich die Filtermaske (vertikale Kanten)
1 | [ -1 0 1 ] |
2 | [ -2 0 2 ] |
3 | [ -1 0 1 ] |
wobei also auch die Zeilen über und unter des aktuellen Pixels zu einen gewichteten Mittelwert zusammengefasst werden. Die '2' soll nur die aktuelle Zeile stärker wichten. 1-dimensional nur auf die Zeile deines Zentralpixels '39' bezogen, multiplizierst du also die Vektoren der Faltungsmaske mit deinem Datenvektor zusammen: [-1 0 1]*[12 39 22]' = 10 Der Laplace-Operator ist eigentlich überall definiert als
1 | ∇²f = ∂²f/∂²x² + ∂²f/∂²y² |
Die partielle Ableitung nach x ist also diskret ∂²f/∂²x² = f(x+1, y) + f(x-1,y) - 2*f(x,y), in y-Richtung ∂²f/∂²y² = f(x,y-1) + f(x,y+1) - 2*f(x,y). Addierst du beides zusammen, kriegst du die Filtermaske in 2D:
1 | [ 0 1 0 ] |
2 | [ 1 -4 1 ] |
3 | [ 0 1 0 ] |
Die Maske legst du mit dem Element -4 in der Mitte über deine 39. Dann multiplizierst du jedes Element der Filtermaske mit dem Pixel, über dem das Element liegt und addierst das zusammen. Hier ist also 12 + 16 + 22 + 29 - 4*39 dein gefilterter Wert. Siehe Faltung.
:
Bearbeitet durch User
Peter schrieb: > Es wäre toll, wenn mir jemand für folgendes Beispiel die Approximationen > der ersten und zweiten partiellen Ableitung mit Rechenweg und Erklärung > berechnen könnte (damit ich eine Vorstellung bekomme) : Im eindim. Fall lässt es sich sehr leicht hinschreiben, z.B. für eine Funktion f(x) ist d_f / d_x ~= [f(x+delta)-f(x-delta)] / [2*delta] oder auch einseitig d_f / d_x ~= [f(x+delta)-f(x)] / delta und d^2_f / (d_x)^2 ~= [f(x+delta)-2*f(x)+f(x-delta) / delta^2 Das dann auf einen Filter zu übertragen sollte wohl einfach sein.
Sigi schrieb: > d^2_f / (d_x)^2 ~= [f(x+delta)-2*f(x)+f(x-delta) / delta^2 Genau, so wird das nur unter Anwendung der Definition für die Ableitung hergeleitet. Und die Funktionswerte der 2-dimensionalen Funktion f:ℕ×ℕ↦ℕ für ein (x,y)∈ ℕ×ℕ entspricht jeweils einem Pixel. Mehr ist da nicht dahinter. Literatur: z.B. Gonzales/Woods oder halt Netz: Faltung
Vielen Dank für die Antworten. Hat mir sehr geholfen! Soweit verstanden. Da ich auch die Hesse-Matrix des Pixels brauche, fehlt mir noch die Ableitung nach x und y, also
Wie bestimme ich die für ein Pixel?
Eigentlich müsstest Du das jetzt selber auflösen können, wenn Du das Prinzip verstanden hast. Sigi hat Dir die Definition der Ableitungsregel gegeben und gemäß https://de.wikipedia.org/wiki/Partielle_Ableitung kannst du machen:
Müsstest also nur nach deiner erste Ableitung nach y nochmal nach x ableiten.
:
Bearbeitet durch User
Ja, du kannst aber noch folgende Erweiterung vornehmen: Sollten deine Pixel nicht quadratisch sein, dann ändert sich die Ableitung bei Rotation. Führe also für X- und Y-Ableitung verschiedene Deltas ein, die an die Pixelmasse angepasst sind (=> Rotationsinvarianz der Ableitung).
Also genau die gleiche Formel, nur mit einem jeweils verschiedenen Delta für die x und die y-Richtung (z.B. dann DeltaX und DeltaY)? Im meinem Anwendungsfall rechne ich mit der 8er bzw. 26er-Nachbarschaft von Bildern. Da sollten die Pixel doch quadratisch sein Delta in beide Richtungen gleich 1, oder?
Lass bitte die Multiplikations-Punkte zwischen den partiellen Ableitungsoperatoren weg - ist zwar klar, was gemeint ist, aber eben der Notation wegen. Nun setzt du jetzt noch δ=1, kriegst also ∂²f/∂x∂y = (f(x-1,y-1) + f(x-1,y+1) - f(x+1,y-1) + f(x+1,y+1) ) / 4. und stellst Dir daraus die Filtermaske auf:
1 | [ 0.25 0 0.25 ] |
2 | [ 0 0 0 ] |
3 | [ 0.25 0 0.25 ] |
Sigi schrieb: > Ja, du kannst aber noch folgende Erweiterung > vornehmen: Sollten deine Pixel nicht quadratisch > sein, dann ändert sich die Ableitung bei > Rotation. Jo, guter Hinweis. Für's allgemeine Verständnis wird die Annahme δ=1 aber in beiden Richtungen sicher erstmal reichen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.