Jan 03, 2016
Hough-Transformation
Die Hough-Transformation ist ein Verfahren zur Detektion kollinearer Punkte.Mit ihr können Objekte erkannt werden, die sich in geschlossener parametrisierbarer Form darstellen lassen. Beispiele hierfür sind Kreise, Ellipsen oder Linien.Auf das Auffinden gerader Linien möchte ich hier etwas genauer eingehen.
Hough-Transformation
Definition:Unter einer Geraden versteht man im Sinne des Hough-Algorithmus eine Menge von kollinearen Punkten.
Mathematische Definition
Im kartesischen Koordinatensystem wird eine Gerade normalerweise durch ihre Steigung m und den y-Achsenabschnitt t beschrieben:
y = m*x + t
nach t aufgelöst ergibt das t = -m*x + y
Hessesche Normalform
Einen der unendlich vielen Haltepunkte der Geraden bekommt man immer durch Verlängerung (oder Stauchung) des Normalenvektors.
Es folgt:
ist der Haltepunkt und ist die Normale mit .
Aus folgt:
0 axn
0 npxn
a
n
1n
1n
o
nsin
cos0
0
0
0sin
cos
sin
cosoo p
y
xaxn
0sincos000 pyx
000sincos yxp
Dieses Vorgehen nennt man „Gerade-zu-Punkt-Transformation“.
000sincos yxp
Die transformierten Punkte desBinärbildes im Hough-Raum.
Binärbild
Die Hough-Transformation arbeitet vorteilhaft auf einem Binärbild oder einem Gradientenbild.
Binärbild
Gradientenbild
Zielsetzung der Hough-Transformation:
• Finden von vorgegebenen geometrischen Strukturen in einem (segmentierten) Bild
• Überprüft wird, ob einzelne Segmente der Referenzstruktur ähnlich sind
• Robust gegenüber Rauschen und systematischen Fehlern
• Erkennt auch teilweise verdeckte (unvollständige) Strukturen
• Ursprünglich zur Detektion kollinearer Bildpunkte verwendet
• Referenzstruktur entsprechend eine Gerade
Hough-Algorithmus
Hough-Algorithmus
Der (r,phi)-Raum wird diskretisiert (z.B. 1° oder 5° Stufen) Die Radiusachse wird entsprechend der benötigten
Genauigkeit gewählt Daraus entsteht ein endliches, zweidimensionales Feld (r,phi) Dieses Feld wird als Akkumulator bezeichnet jedes Element
im Akkumulator entspricht einer Geraden im (x,y)-Koordinatensystem(statt Geraden sind auch andere parametrisierte (paramterisierbare) Referenzstrukturen nutzbarz.B. Kreise -> drei Parameter (x,y,r) oder Ellipsen - fünf Parameter (x,y,r1,r2,phi)
Der Akkumaltor wird mit Null initialisiert Nun werden die Punkte des Bildes mit der Hough-
Transformation in den (r,phi)-Raum überführt und in den Akkumulator eingetragen (die betroffenen Zellen werden inkrementiert)
Jedes Maximum im Akkumulator (Zellen deren Wert einen gegebenen Schwellenwert/Genauigkeitswert überschreiten) repräsentiert genau eine Gerade im Bild (Cluster evtl. auf einen Punkt reduzieren)
Ergebnis ist ein Bild mit Geraden ohne Anfangs- und Endpunkte Tracking
Man fährt auf den Geraden das Originalbild ab und registriert wann die Grauwertdifferenz einen Schwellenwert überschreitet und man sich zu einer hohen Warscheinlichkeit auf einer Objektkontur befindet.
Dabei dienen die durch die Hough-Transformation gefundenen Geraden als "Wegweiser" durch das Originalbild.
Ergebnis ist ein Bild mit Geraden ohne Anfangs- und Endpunkte Tracking
Ein interessanter Effekt ist, dass parallele Geraden in einer Akkumulator-Spalte stehen, da sie den selben Winkel phi haben.
r(x,y)
Kreiserkennung
Ellipsenerkennung
2. Modellbasierende Objekterkennung
Die Objekterkennung ist das zentrale Problem der Bildverarbeitung. Es beinhaltet die Identifikation und Lokalisierung von gegebenen Objekten in einem Bild.
1. Alignment:Unter Objekterkennung verstehen wir also hiefür,
das Erkennen von Zusammenhängen zwischen einem Bild und einer bestimmten Ansicht eines
bekannten Objekts.Es wird also geprüft, inwiefern ein Objekt aus einer
Modelldatenbank mit einem Bild übereinstimmt.
Beispiel: Alignment im 2D
(ai,am) und (bi,bm) sind Paare von korrespondierenden charakteristischen Bild- und Modellpunkten.
Wir betrachten im Folgenden lediglich diese beiden Punktpaare! Modell und Bild oben dienen nur der Anschauung!
Modell (2D) Bild (2D)
Beispiel: Alignment im 2D
Schritt 1:
Verschieben der Modellpunkte, so dass bm = bi
Beispiel: Alignment im 2D
Schritt 2:
Rotation von am um bm, so dass die gedachten Kanten aibi und ambm aufeinander liegen.
Beispiel: Alignment im 2D
Schritt 3:
Skalieren, so dass ai = am und bi = bm
Beispiel: Alignment im 2D
Zum korrekten Alignment im 2D bedarf es also der Berechnung
eines Verschiebungsvektors,
eines Rotationswinkels,
und eines Skalierungsfaktors.
Hierzu ist das Wissen um zwei Paare korrespondierender charakteristischer Bild-
und Modellpunkte notwendig.
Beispiel: Alignment im 2D
Die Berechnung des Alignments für diese Punktepaare ist damit beendet.
Nun wird das ganze Modell anhand dieser Parameter transformiert, und verglichen, wie gut das Alignment
tatsächlich war.
Es wird danach bewertet, wieviel Prozent der Kanten des ausgerichteten Modells nun wirklich auf den Kanten des Bildes
liegen.
Ein erfolgreiches Alignment ist nämlich nicht automatisch die Garantie für ein sinnvolles Match:
Beispiel: Alignment im 2D
Die Punktepaare könnten ungünstig gewählt worden sein:
Modell Bild
Die Punktepaare könnten ungünstig gewählt worden sein:
Beispiel: Alignment im 2D
Aufwandsersparnis durch Alignment
Im Zweidimensionalen genügten zwei Punktpaare zur Berechnung des Alignments. Wir werden später zeigen, dass
im Dreidimensionalen drei Punktpaare genügen.
Dies ist der Hauptgedanke hinter der Alignment-Idee!
Was gewinnen wir, wenn wir uns auf drei Punktpaare beschränken können?
Aufwandsersparnis durch Alignment
Gegeben seien i charakteristische Bild-, und m charakteristische Modellpunkte. Daraus ergeben sich p = i*m mögliche Paare
von Bild- und Modellpunkten.
Welche Paare führen zum besten Alignment?
Sei A im folgenden die Menge aller möglichen Paare:
A = { (c1, d1), ... , (ci, d1),
... ,
(c1, dm), ... , (ci, dm) }
Aufwandsersparnis durch Alignment
naiv:
jede mögliche Kombination dieser Punktpaare bildet ein mögliches Match.
Aufwand: exponentiell
besser:
es genügen drei Punktpaare für ein mögliches Match.
Aufwand: kubisch
Der Alignment Algorithmus
Gegeben ist ein Bild I mit n Punkten.ALIGNMENTFür jedes Modell M (m ist die Anzahl der Modellpunkte)
Für jedes Tripel der Modellpunkte macheFür jedes Tripel der Bildpunkte mache
Aufstellen der Hypothese, dass diese in Korrespondenz sind und errechnen einer Transformation basierend auf der hypothetischen Korrespondenz. Für jede der verbleienden m-3 Modellpunktemache
Anwenden der Transformation. Finden einer Korrespondenz zwischen den transformierten Modellpunkten und den Bildpunkten.Messen der Qualität der Transformation(basierend auf der Anzahl der Modellpunkte, die verkuppelt sind mit den Bildpunkten).
Im Folgenden: Alignment im Detail
Wie findet man charakteristische Bild- bzw. Modellpunkte?
Wie kann man diese Punkte klassifizieren, um korrespondierende Bild- und Modellpunktpaare zu finden?
Wie berechnet man aus den drei Punktpaaren das Alignment, also die Parameter für Rotation, Verschiebung und Skalierung?
Finden von charakteristischen Bild- bzw. Modellpunkten
Finden von charakteristischen Punkten
Ziele:
Man versuche, möglichst Punkte mit unverwechselbaren Eigenschaften zu finden, um die Zahl der Punktepaare gering
zu halten. Dies beschleunigt den Algorithmus.
Die Eigenschaften der Punkte sollten sich auch unter Transformationen wie Rotationen möglichst wenig verändern.
Geeignete Punkte könnten z.B. Scheitelpunkte sein, oder Eckpunkte, an denen viele Kanten aufeinandertreffen.
Finden von charakteristischen Punkten
Vorgehensweise:
(1) Aus einem Graustufenbild extrahiere man die Kanten mittels eines geeigneten Filters.
(2) Man unterteile die Kanten an bestimmten Punkten in einzelne Segmente.
(3) Zuletzt weise man jedem Segment einen oder zwei charakteristische Punkte zu.
Finden von charakteristischen Punkten
1. Schritt: Kantenerkennung
Gegeben sei ein Graustufenbild. Daraus können mit geeigneten Filtern die Kanten extrahiert werden.
Finden von charakteristischen Punkten
2. Schritt: Kantensegmentierung
Man unterteile die Kanten an den Punkten, in denen sich die
Krümmung der Kante ändert, also Linkskurven in Rechtskurven oder
Geraden übergehen, und umgekehrt.
Im Bild sind diese Krümmungsänderungen durch
schwarze Punkte gekennzeichnet.
Finden von charakteristischen Punkten
3. Schritt:
Definiere charakteristische Punkte
Die Kanten sind nun in Links- und Rechtskurven sowie gerade Stücke
eingeteilt.
Einer Kurve weise man ihren Mittelpunkt als charakteristischen
Punkt zu, einem geraden Stück seine beiden Endpunkte.
Klassifizierung von charakteristischen Punkten
Klassifizierung von charakteristischen Punkten
Ziel:
Durch eine detaillierte Beschreibung eines Punktes kann die Anzahl der möglichen Punktepaare von Bild und Modell
reduziert werden.
Die Anzahl an charakteristischen Punkten soll recht klein bleiben, um den Algorithmus nicht zu verlangsamen.
Idee:
Beschreibung in mehreren Genauigkeitsstufen
Klassifizierung von charakteristischen Punkten
Man betrachte das Modell nach verschiedenen Glättungen, z.B. durch einen Gauss-Filter.
Klassifizierung von charakteristischen Punkten
Nun teile man das Modell für jede Glättungsstufe in Kantensegmente ein, wie zuvor beschrieben. Natürlich ergeben
sich jeweils andere Einteilungen.
Klassifizierung von charakteristischen Punkten
Nun teile man das Modell für jede Glättungsstufe in Kantensegmente ein, wie zuvor beschrieben. Natürlich ergeben
sich jeweils andere Einteilungen.
Klassifizierung von charakteristischen Punkten
Nun teile man das Modell für jede Glättungsstufe in Kantensegmente ein, wie zuvor beschrieben. Natürlich ergeben
sich jeweils andere Einteilungen.
Klassifizierung von charakteristischen Punkten
Man benutze die Kantensegmente der kaum gefilterten Modelle, um die der stark gefilterten Modelle zu beschreiben.
Dies geschieht am einfachsten in einer Baumstruktur.
Klassifizierung von charakteristischen Punkten
Nun wird jedes Kantensegment noch nach bestimmten Kriterien beschrieben:
Ist das Segment gerade (straight) oder gekrümmt (curved)?
Ist ein gekrümmtes Segment geöffnet (open) oder geschlossen (closed)?
Entspricht das Segment einem einzelnen Kantensegment einer schwächeren Filterung (single), oder gleich mehreren
(multiple)?
Klassifizierung von charakteristischen Punkten
Klassifizierung von charakteristischen Punkten
Da bei starker Filterung nur wenige Punkte übrigbleiben, wählen wir diese aus, um das Alignment durchzuführen. Die
Punkte sind ja durch sehr viele Merkmale charakterisiert!
Gegebenenfalls kann es jedoch von Vorteil sein, Punkte eines schwach gefilterten Modells zu verwenden.
Mehrstufige Alignments können bessere Resultate liefern, obwohl der Aufwand kaum größer wird.
Berechnung des Alignments
Problem: Verzerrungen
Modell
PerspektivischeProjektion
Dem Betrachter nahe Objektteile wirken größer als gleichgroße, weiter entfernte Objektteile!
Bild
Problem: Verzerrungen
ModellSenkrechteProjektion
Bild
Das Objekt sei so weit vom Betrachter entfernt, daß Verzerrungen nicht wahrnehmbar seien. Nun wirkt lediglich das
Modell im Ganzen kleiner! Das kann leicht durch eine Skalierung modelliert werden.
Berechnung des Alignments
Da wir die perspektivische Projektion durch senkrechte Projektion und einen Skalierungsfaktor approximieren, sind Distanzen, die sich (z.B. bei Drehungen) in z-Richtung ändern,
nicht interessant.
Wir werden sehen, dass drei Paare von korrespondierenden Bild- und Modellpunkten ausreichen, um das Alignment zu
berechnen.
Wir berechnen also den Verschiebungsvektor, die Rotationswinkel und den Skalierungsfaktor, um die drei
Modell- auf die drei korrespondierenden Bildpunkte auszurichten.
Berechnung des Alignments
Das 2D- Bild befindet sich in der x-y-Ebene; das Modell darüber ist zwar ebenso zweidimensional, kann aber im Raum bewegt
werden, hat also dreidimensionale Ausdehnung.
Berechnung des Alignments
Verschiebung der Modellpunkte, so dass die x- und y-Komponenten von am und ai gleich sind. Der Einfachheit halber
wählen wir die von ai von Anfang an gleich Null.
Berechnung des Alignments
Rotation um z-Achse, so dass die Kanten aibi ambm parallel übereinanderliegen.
Berechnung des Alignments
Die Achsen des Koordinatensystems werden o.B.d.A so gewählt, dass die y-Komponente von bi und bm gleich Null ist.
Berechnung des Alignments
Rotation um die y-Achse, so dass bi und bm dieselben x- und y Koordinaten haben. Obwohl sich die z-Komponente von bm
auch ändert, interessiert sie uns nicht.
Berechnung des Alignments
Rotation um die x-Achse, so dass ci und cm dieselben x- und y Koordinaten haben. Obwohl sich die z-Komponente von cm
auch ändert, interessiert sie uns nicht.
2. geometrisches Hashing:Das geometrische Hashing oder allgemeiner die
Indexierungs Methode konstruiert während der Zeit des Kompilierens eine Tabelle mit verschlüsselt
Modellinformationen.Zur Laufzeit, werden die Hypothesen von den
Verbindungen zwischen einem Objekt und dem Modell mittels der Tabelle nachgeprüft und dann wird die
gefundene Lösung bewertet.
Algorithmusfür das geometrische Hashing
PreprocessingDie Hashtabelle H enthält “Kollisionslisten“Für jedes Modell A:
1. Extrahiere die Features von A, seien dies A =(A1, … ,An).2. Für jede Basis a von Features in A:
Für alle übrigen Features Ai ist nicht Element von a, i = N:
(a) Stelle das Feature Ai in Koordinaten c be- züglich des durch a defnierten Koordinatensystems
dar.(b) Quantisiere c in einen diskreten Wert c‘.Trage die Information (A,a) in die HashzelleH(c‘) ein.
Die Laufzeit des Preprocessings ist
O(mn d+1)
für m Modelle mit je n Features, wobei jede Basis aus d Features besteht.
Erkennungsphase des geomethrischen Hashing:1. Extrahiere die Features von B, seien dies B =
(B1,…,Bn).2. Wähle eine Basis b von Features in B:
Für alle übrigen Features Bi ist nicht Element von b, i=N: (a)Stelle das Feature Bi in Koordinaten c be-züglich des durch b defnierten
Koordinatensystems dar.(b) Quantisiere c in einen diskreten Wert c’.Jeder Eintrag (A, a) ist Element von H(c’) erhält eine Stimme.(c) Zähle die Stimmen aus für alle Paare vonModellen und Basen (Histogramm). Paaremit genügend vielen Stimmen entsprechenpotentiellen Treffern.(d) Für jeden potentiellen Treffer (A, b):Bestimme die optimale Transformation Tfür die gematchten Features von A und Bund bewerte die gefundene Lösung.
3. Falls keine gute Lösung gefunden wurde, wiederhole Schritt 2.
Die Laufzeit von Schritt 2 der Erkennungsphase ist
O(hn d+1)
wobei h die durchschnittliche Füllungsdichte der betrachteten Hashzellen ist.
In günstigen Fällen ist
h = O(1),
jedoch kann schlimmstenfalls
h = mnd+1
sein.
Hinzu kommt noch die Laufzeit für die Bearbeitung der gefundenen Treffer.