Hough-Transformation 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. Definition: Unter einer Geraden versteht man im Sinne des HoughAlgorithmus 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 n x a 0 Einen der unendlich vielen Haltepunkte der Geraden bekommt man immer durch Verlängerung (oder Stauchung) des Normalenvektors. Es folgt: n x pn 0 a ist der Haltepunkt und n ist die Normale mit . n 1 Aus n 1 folgt: cos 0 n sin o cos o cos o x p0 n x a sin 0 y sin 0 x cos 0 y sin 0 p0 0 p0 x cos 0 y sin 0 p0 x cos 0 y sin 0 Dieses Vorgehen nennt man „Gerade-zu-Punkt-Transformation“. Binärbild Die transformierten Punkte des Binärbildes im Hough-Raum. 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 nutzbar z.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 Ergebnis ist ein Bild mit Geraden ohne Anfangs- und Endpunkte Dabei dienen die durch die Hough-Transformation gefundenen Geraden als "Wegweiser" durch das Originalbild. 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. Ein interessanter Effekt ist, dass parallele Geraden in einer Akkumulator-Spalte stehen, da sie den selben Winkel phi haben. Kreiserkennung (x,y) r 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 Modell (2D) Bild (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! 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 Bildund 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: Bild Modell Beispiel: Alignment im 2D Die Punktepaare könnten ungünstig gewählt worden sein: 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. ALIGNMENT Für jedes Modell M (m ist die Anzahl der Modellpunkte) Für jedes Tripel der Modellpunkte mache Fü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 Modellpunkte mache 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 Bild Perspektivische Projektion Dem Betrachter nahe Objektteile wirken größer als gleichgroße, weiter entfernte Objektteile! Problem: Verzerrungen Modell Senkrechte Projektion 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 Modellauf 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 yKomponenten 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. Algorithmus für das geometrische Hashing Preprocessing Die 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 bezüglich des durch a defnierten Koordinatensystems dar. (b) Quantisiere c in einen diskreten Wert c‘. Trage die Information (A,a) in die Hashzelle H(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 bezü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 von Modellen und Basen (Histogramm). Paare mit genügend vielen Stimmen entsprechen potentiellen Treffern. (d) Für jeden potentiellen Treffer (A, b): Bestimme die optimale Transformation T für die gematchten Features von A und B und 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.