Wie kann ich mit Computer Vision eine Form in einem Bild finden?

8

Ich habe ein einfaches Foto, das ein Logo-Bild enthalten kann oder auch nicht. Ich versuche herauszufinden, ob ein Bild die Logoform enthält oder nicht. Das Logo (rechteckige Form mit einigen zusätzlichen Funktionen) könnte verschiedene Größen haben und könnte mehrere Vorkommen haben. Ich möchte Computer Vision-Techniken verwenden, um den Standort dieser Logo-Vorkommen zu identifizieren. Kann mir jemand in die richtige Richtung weisen (Algorithmus, Technik?), Um dieses Ziel zu erreichen?

Ich bin ein ziemlich Neuling für Computer Vision, also wäre jede Richtung sehr dankbar.

Danke!

    
Ryan 12.03.2010, 03:27
quelle

1 Antwort

14

Praktische Probleme

Da Sie eine skaleninvariante Methode benötigen (das ist der richtige Jargon für "könnte verschiedene Größen haben") SIFT (wie in Logo erwähnt Anerkennung in Bildern , danke Overrider!) ist eine gute erste Wahl, sie ist heutzutage sehr beliebt und ist einen Versuch wert. Sie können hier einen Code zum Herunterladen finden. Wenn Sie Matlab nicht verwenden können, sollten Sie wahrscheinlich mit OpenCV gehen. Selbst wenn Sie SIFT aus irgendeinem Grund verwerfen, werden Sie ein paar wichtige Dinge über die Objekterkennung lernen, wenn Sie versuchen, es zum Laufen zu bringen.

Allgemeine Beschreibung und Sprache

Dieser Abschnitt ist hauptsächlich dazu da, um Ihnen einige wichtige Schlagworte vorzustellen, indem Sie eine breite Klasse von Methoden zur Objekterkennung beschreiben, so dass Sie sich diese Dinge ansehen können. Wichtig: Es gibt viele andere Methoden, die nicht in diese Klasse fallen. Wir nennen diese Klasse "Feature-basierte Erkennung".

Also gehen Sie zuerst und finden Sie Funktionen in Ihrem Bild. Dies sind charakteristische Punkte des Bildes (Ecken und Linienübergänge sind gute Beispiele), die viele Invarianzen haben : was auch immer Sie für Ihr Bild tun (Skalierung, Drehung, Helligkeitsänderung, Hinzufügen eines Bits) von Lärm usw.) wird es nicht die Tatsache ändern, dass es an einem bestimmten Punkt eine Ecke gibt. "Pixelwert" oder "vertikale Linien" sind schlechte Eigenschaften. Manchmal enthält eine Funktion neben einer Position auch Zahlen (z. B. die Hervorhebung einer Ecke).

Dann machst du etwas auf, wie entferne Features, die nicht stark genug sind.

Dann gehst du zu deiner Datenbank . Das ist etwas, das Sie im Voraus erstellt haben, normalerweise indem Sie mehrere schöne und saubere Bilder von allem, was Sie zu finden versuchen, machen, Feature-Erkennung auf ihnen ausführen, Dinge aufräumen und sie in einer Datenstruktur für Ihre nächste Phase arrangieren -

Nachschlagen Sie müssen eine Reihe von Funktionen aus Ihrem Bild nehmen und versuchen, sie mit Ihrer Datenbank abzugleichen: Entsprechen sie einem Objekt, nach dem Sie suchen? Das ist ziemlich nicht-trivial, da Sie auf jeden Fall alle Teilmengen der Menge der Features, die Sie gefunden haben, betrachten müssen, die exponentiell ist. Es gibt also alle Arten von intelligenten Hashing-Techniken, wie Hough-Transformation und geometrisches Hashing .

Jetzt sollten Sie etwas überprüfen. Sie haben einige Stellen im Bild gefunden, die verdächtig sind: Es ist wahrscheinlich, dass sie Ihr Objekt enthalten. Normalerweise wissen Sie, wie groß die Größe, Ausrichtung und Position Ihres Objekts ist, und Sie können etwas Einfaches (wie eine Faltung ) verwenden, um zu überprüfen, ob es wirklich da ist.

Sie haben eine Reihe von Wahrscheinlichkeiten, im Grunde genommen: Wie wahrscheinlich ist es, dass Ihr Objekt dort ist? Hier machen Sie eine Ausreißererkennung . Wenn Sie nur 1-2 Vorkommen Ihres Objekts erwarten, werden Sie nach den größten Wahrscheinlichkeiten suchen, die herausragen, und nur diese Punkte nehmen. Wenn Sie viele Vorkommnisse erwarten (z. B. die Gesichtserkennung auf einem Foto einer Gruppe von Personen), suchen Sie nach sehr niedrigen Wahrscheinlichkeiten und verwerfen sie.

Das ist es, du bist fertig!

    
AVB 12.03.2010 17:34
quelle