2009-11-08 3 views
8

Ich hoffe, einige Hilfe mit 2D-Objekterkennung zu erhalten. Ich werde einen kurzen Überblick über den Kontext geben, in dem dies umgesetzt wird.Detect Marker in 2D-Bild

Es wird ein Bild von der Decke gemacht. Die Decke wird mit Markierungen versehen, so dass die Ausrichtung der Kamera bestimmt werden kann. Die Bilder werden immer nach oben gerichtet aufgenommen. Mein Ziel ist es, einen dieser Marker im Bild zu erkennen und seine Rotation zu bestimmen. Daher werden Rotation und Skalierung (in einem geringeren Ausmaß) die zwei Hauptfaktoren sein, die bei der Bilderfassung verwendet werden. Ich werde die Software entweder in C# oder Matlab schreiben (noch nicht ganz sicher).

Zum Beispiel könnte der Marker ein Pfeil wie folgt sein:

Reference Arrow

Ein Bild von der Decke genommen würde Marker enthalten. Die Software muss einen einzelnen Marker erkennen und feststellen, dass er um 170 Grad gedreht wurde.

Ceiling Arrows

Ich habe keine Erfahrung mit Bildanalyse. Ich weiß, dass die Bildverarbeitung ein ziemlich breites Thema ist und ich hoffe, dass ich einen Rat bekommen kann, in welche Richtung ich gehen sollte und welche Techniken für meine Anwendung am besten geeignet wären. Vielen Dank!

+0

Ich würde vorschlagen, den Titel Ihrer Frage auf "Detect Marker in 2D-Bild" zu ändern. Objekterkennung hat andere Konnotationen in der Bildanalyse. – Ivan

Antwort

3

Ich würde MATLAB empfehlen oder wenn Sie C# verwenden möchten, Emgu CV ist ziemlich gut.

Hough transforms sind eine gute Idee. Sobald Sie die Kanten in Ihrem Bild mit z. B. Canny edge detector erkennen, erhalten Sie ein Kantenbild (das binäre Bild mit nur 1 oder 0 für Werte).

Dann transformiert die Hough-Geradentransformation (im Wesentlichen) eine Linie um jedes weiße Pixel im Kantenbild (die Auflösung der Linie hängt von Ihnen ab) unter Verwendung einer parametrisierten Funktion für die Linie und berechnet die Gesamtzahl von Weiß (mit 1) Pixel entlang jeder gesponnenen Linie bewertet und speichert diese Information in einem großen Akkumulator, der die Daten speichert, die durch die Parameter der Linie indiziert sind.

alt text http://upload.wikimedia.org/wikipedia/en/a/af/Hough_space_plot_example.png

In dem obigen Beispiel die Parameterform für eine Zeile ist:

rho = x*cos(theta) + y*sin(theta) 

wobei rho die Entfernung und Theta den Winkel so

ist als Sie können sehen, wenn Sie den Behälter in einer bestimmten Ausrichtung betrachten, können Sie herausfinden, wie viele Linien in diesem Winkel ausgerichtet sind. Natürlich musst du etwas mehr Arbeit aufwenden, um herauszufinden, welche Linien in diesem Winkel ausgerichtet sind, da du 5 andere Linien pro Pfeil hast, aber das sollte nicht zu schwer sein.

+0

Ihr zweiter Absatz ist schlecht formuliert: Es sieht so aus, als ob die Hough-Transformation ein Kantendetektor ist, während es sich um einen Liniendetektor handelt. um vollständig zu sein, würde ein Sobel-Kantendetektor auch hier gut passen. –

+0

Hmm, ich glaube nicht. Es scheint ziemlich klar zu sein, dass der zweite Absatz das Kantenbild verwendet, um die Hough-Transformation zu erhalten. Zweitens ist die Vollständigkeit kein Problem, da es ** mehrere ** Flanken-Detektoren gibt, also sollte eine Erwähnung ausreichen, um das OP in die richtige Richtung zu lenken. In jedem Fall, danke für die Eingabe, werde ich den Absatz ändern. – Jacob

4

Ich bin nicht direkt in diesem Bereich, aber ich würde Ihnen sagen, um mit der Kantenerkennung speziell zu beginnen. Wenn Sie einen Hintergrund in der Mathematik haben/Entwicklung sind die Materialien recht einfach zu verstehen:

Dies schien ein paar Ideen zu wecken: http://www.cfar.umd.edu/~fer/cmsc426/lectures/edge1.ppt

2

Sie müssen Kantenerkennung erkunden, so schauen Sie in Hough-Filter. Danach müssen Sie in Muster-Klassifikatoren und Feature-Extrahierung suchen.

This paper hat einen Algorithmus, der ohne Kantenerkennung zu funktionieren scheint. This book excerpt ist mehr auf die Art der Symbolerkennung ausgerichtet, die Sie beabsichtigen, sobald Sie die Kantenerkennung durchgeführt haben.

3

wie immer in Computer Vision, ist Ihr erstes Problem Bildbeleuchtung und Akquisition. Bevor Sie fortfahren, stellen Sie fest, wie Ihre Marker an der Decke gedruckt werden, wie ihre Form aussieht, mit welchem ​​Licht Sie sie sehen und mit welcher Kameraeinstellung Sie sich die Marker anschauen.

mit einem guten Material, einem guten Licht und einer guten Kamera, haben Sie möglicherweise kein Problem, das Bild zu verarbeiten. Sie können zum Beispiel einen vollen Pfeil in einem retro-reflektierenden Material drucken, mit einem längeren Schwanz als Ihr Beispiel, verwenden Sie ein farbiges Licht und einen entsprechenden Filter auf der Kamera. Alles, was du auf deinem Bild hast, sind Pfeile ... es gibt viele andere Möglichkeiten, das Bild zu bekommen, das dir da helfen wird.

Sobald Sie einfache Pfeile haben, gibt Ihnen eine einfache Blobanalyse (die aus der Berechnung statistischer Momente von Objekten im Bild besteht) viele Informationen: Jeder Pfeil sollte Werte haben, die für die 7 hu Momente fast gleich sind Um Objekte effizient zu filtern, gibt Ihnen die aus den zentralen Momenten berechnete Orientierung den Winkel des Pfeils. Blob-Analyse ist nur statistisch, es ist extrem schnell.

3

Mehrere Systeme wurden entwickelt Marker und ihre Orientierung robust zu erkennen:

Wenn Ihr primäres Ziel ist nicht zu lernen, aber um die Anwendung funktionieren zu lassen, würde ich vorschlagen, dass Sie eine von diesen verwenden. Es ist keine einfache Aufgabe für einen Anfänger, die Position und Ausrichtung eines zufälligen Markers in einem Bild zuverlässig zu erkennen.

Auf der anderen Seite, , wenn Sie in das Lernen männlich interessiert sind, würde ich Ihnen auch Hinweise auf ARToolKit und its publications (and their references) die erklären, wie robust Markierungserkennung zu implementieren.

1

Eine rigorose Weise die Ausrichtung eines unter projektiven Geometrie erworben bebilderten (die meisten Kameras) wird mit Hilfe der Fluchtpunkte und Fluchtlinien zu bestimmen. Gute Nachrichten für Sie: Ihr Marker kann verwendet werden, um diese Informationen zu finden!Weitere gute Nachrichten, Ihr Bild kann gleichgerichtete sein, so dass die Bildspalten (die Y-Achse) der Aufwärts-Abwärts-Richtung entsprechen. Mehr zu diesem Thema finden Sie in Kapitel 8 von Hartley und Zisserman's Buch, Multiple View Geometrie in Computer Vision.

Denken Sie auch daran, dass Sie wahrscheinlich an der radiale Verzerrung Problem, die Verzerrung durch das Objektiv der Kamera arbeiten müssen. Die anderen Jungs haben Recht mit dem Pfeilerkennungsproblem: Sie müssen Kantenerkennung verwenden und danach Hough transformieren oder Vorlage entspricht. Siehe Gonzalez und Woods Buch Digitale Bildverarbeitung für Details.