Wie kann man das De-Houghing eines Hough-transformierten Bildes durchführen?


9

Ich arbeite mit Code, der bei Rosetta Code gefunden wurde, um eine Hough-Transformation zu erstellen. Ich möchte jetzt alle Linien in einem Bild finden. Dazu benötige ich die ρ- und θ-Werte der einzelnen Peaks im Hough-Raum. Eine Beispielausgabe für ein Fünfeck sieht folgendermaßen aus:

Hough Space

Wie finde ich eine einzelne [θ, ρ] -Koordinate für jeden der im Hough-Raum sichtbaren 'Hot Spots'?

Antworten:


9

Sie finden die Koordinaten der Peaks und skalieren diese dann mithilfe der Achse in [θ, ρ] -Koordinaten.

Abhängig davon, wie verrauscht die Daten sind, wie viele falsche Peaks Sie erwarten und wie viel Zeit Sie haben, gibt es verschiedene Möglichkeiten, dies zu tun. Am einfachsten ist es, ein Niveau auszuwählen, das ein echter Peak ist, alle darunter liegenden Daten abzuschneiden und dann auf jedem Peak einen Schwerpunkt zu erstellen, um dessen Mittelpunkt zu erhalten.

Sie können das Bild auch erodieren / wählen, bis jeder Peak ein einzelnes Pixel ist.


1
+1 für eine genaue Antwort. Wie definieren / berechnen Sie center of gravity?
Dipan Mehta

Um eine höhere Genauigkeit zu erzielen, ermitteln Sie das Maximum, passen Sie ein Paraboloid an diesen Punkt und seine benachbarten Punkte an und ermitteln Sie dann den Peak des Paraboloids, der im Allgemeinen zwischen Pixeln liegt.
Endolith

2
@endolith - Im Allgemeinen wird bei Hough-Transformationen die Genauigkeit durch die Identifizierung von Kanten im Ausgangsbild und die "Diskretisierung" des Ergebnisses im Hough-Raum begrenzt. Wenn Sie ein genaueres Ergebnis benötigen, ist es normal, dass Sie zurückgehen und die Transformation für einen begrenzten Bereich von [θ, ρ] -Koordinaten wiederholen, um eine höhere Auflösung zu erhalten. Hough space um die gefundene
Kurslösung

@ DipanMehta - einfach über (x- Wert jedes Pixels) und (y ..) summieren und dann durch die X, Y-Breite des gesuchten Feldes dividieren - aber siehe Kommentar zum Endolith
Martin Beckett


2

Sie können die lokalen Maxima für einen bestimmten Radius lokalisieren. Beispielsweise scannen Sie das Hough-Bild und nehmen Peaks nur dann als Maxima, wenn sie in einem Fenster maximal sind .3×3

Der zweite Schritt könnte darin bestehen, die Spitzenposition auf Subpixelgenauigkeit zu verfeinern. Dies kann durch Parabelanpassung erfolgen.

f(x)xpf(x+p)

f(x+p)f(x)+pT.f'(x)+12pT.f(x)+p

Der Korrekturvektor ist dann

p=- -f(x)- -1f'(x)

Die Ableitungen können durch endliche Differenzierung aus dem Hough-Bild berechnet werden .

f(x)2×2f'(x)p

Die obige Gleichung kann gelegentlich Verschiebungen von mehr als 1 Pixel ergeben. In diesem Fall hat die Maximierer-Nachbarschaft keine parabolische Form, und Sie möchten möglicherweise die Korrektur nicht durchführen oder sollten den Kandidaten-Maximierer sogar fallen lassen.


0

Es gibt eine sehr gute Technik, die Mitte der 80er Jahre von Gerig und Klein entwickelt wurde. Es ist ein Backmapping-Verfahren, das den Hough-Raum analysiert, um den wahrscheinlichsten Punkt zu identifizieren, der jedem Kantenpunkt zugeordnet ist, und dann einen zweiten Hough-Raum erstellt, in dem die Zuordnung von Kantenpunkten zu Parametern eins zu eins und nicht eins zu viele erfolgt ist die übliche erste Stufe. Ich habe nicht den Hinweis zur Hand, sondern schaue in das wegweisende Hough-Übersichtspapier von Illingworth und Kittler (ungefähr 1987?).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.