iPhone iOS UIImage, wie man einen "Laserpointer" -Punkt auf einem Kamera-Feed erkennt?


9

Ich habe ein verfolgtes Roboterspielzeug und steuere es mit einem iPhone. Der Roboter gibt einen Live-Kamera-Feed mit bekannter Bildgröße aus und ich zeige ihn auf UIImage an.

Ich habe dem Roboter einen Laserpointer hinzugefügt und ihn entlang der Achse des Roboters befestigt. Ich versuche, den Laserpointerpunkt auf dem Bild zu erkennen und damit die Nähe des Objekts zu berechnen. Wenn der Laserpunkt weit von der Mitte entfernt ist, weiß ich, dass der Roboter an der Wand klebt und gesichert werden muss.

Wie kann ich einen Punkt mit hellweiß-roten Pixeln auf einem Bildschirm erkennen? Eine Lösung wäre, die Farbe von Pixeln innerhalb eines bestimmten Radius des Zentrums abzutasten und eine helle Farbe des Blobs zu erkennen. Kann jemand einen Algorithmus für diese Aktivität vorschlagen?

Ein anderer Ansatz wäre, die durchschnittliche Position des Punktes über die letzten paar Frames zu verfolgen und so den Schätzradius zu verringern. Wenn in einem vordefinierten Bereich kein Punkt vorhanden ist, kann der Suchbereich erweitert werden.

Schließlich möchte ich dem Roboter beibringen können, Teppiche um ihn herum zu erkennen. Teppich reflektiert einen Laserpointer auf eine bestimmte Weise, und ich möchte verstehen, wie viele Rahmen um den Roboter ähnliche Eigenschaften haben. Wenn ich weiß, wo sich der Laserpointer auf einem Bildschirm befindet, kann ich ein kleines Rechteck aus diesem Bild ausschneiden und sie miteinander vergleichen. Gibt es eine effiziente Möglichkeit, mehrere kleine Bilder miteinander zu vergleichen, um zu verstehen, ob ihre Silhouetten übereinstimmen?

Mir ist aufgefallen, dass der Laser von glänzenden Oberflächen reflektiert wird, und die Richtung dieser Reflexion kann mir etwas über die Ausrichtung der Oberfläche im Raum gemäß den Brechungsgesetzen sagen.

Danke!

Laserpointer schließen

Laserpointer 1


1
Können Sie den Laserpointer in einem Muster ein- und ausschalten? Wie ein Frame ist es ausgeschaltet, das nächste ist eingeschaltet, und Sie subtrahieren nachfolgende Frames, um es sehr deutlich zu machen.
Endolith

Das ist eine sehr gute Idee! Aber ich habe keine Kontrolle über den Laserpointer, er ist entweder ein- oder ausgeschaltet.
Alex Stone

@AlexStone Ich versuche, etwas Ähnliches zu erreichen. Der einzige Unterschied besteht darin, dass ich versuche, das Laserlicht an der Augenpupille zu erfassen. Können Sie mir mit dem iOS-Code oder einem Beispielcode helfen, den Sie mit opencv bei der Verfolgung des Laserstrahls verklagt haben? Schätzen Sie Ihre Hilfe im Voraus, danke AJ.
AmJa

Antworten:


10

OpenCV ist für iOS kompilierbar. Obwohl es möglicherweise nicht das effizienteste ist, haben Sie die Möglichkeit, den Algorithmus zu portieren. Ich habe ein ähnliches Marker-Tracking-Problem mit dem ConDensation-Algorithmus durchgeführt. Suchen Sie mit OpenCV nach Marker Tracking. Es ist ein SEHR großes Forschungsgebiet und der genaue Algorithmus, den Sie möchten, hängt vollständig von Ihrer Anwendung ab. Wenn ich mich richtig erinnere, gibt es ungefähr 3000 gemeldete Bildverarbeitungstechniken - eine gute auszuwählen ist eine echte Kunst!

Eine Lösung wäre, die Farbe von Pixeln innerhalb eines bestimmten Radius des Zentrums abzutasten und eine helle Farbe des Blobs zu erkennen. Kann jemand einen Algorithmus für diese Aktivität vorschlagen?

Dies ist übrigens die Grundidee eines sogenannten Partikelfilters (von dem Kondensation eine Methode ist). Gut gemacht, Sie haben die Grundidee selbst herausgefunden!

Ein anderer Ansatz wäre, die durchschnittliche Position des Punktes über die letzten paar Frames zu verfolgen und so den Schätzradius zu verringern. Wenn in einem vordefinierten Bereich kein Punkt vorhanden ist, kann der Suchbereich erweitert werden.

Dies wird als Zustandsbeständigkeit bezeichnet und kann auf verschiedene Arten modelliert werden. Der Kondensationsalgorithmus verwendet einen stochastischen Ansatz, der einem einfachen alten Kalman-Filter nicht unähnlich ist.

Gibt es eine effiziente Möglichkeit, mehrere kleine Bilder miteinander zu vergleichen, um zu verstehen, ob ihre Silhouetten übereinstimmen?

Dieser ist etwas schwieriger. Sie könnten versuchen, eine Vorlage zu finden, aber ich weiß nicht, wie gut sie unter iOS funktioniert (sehr umfangreiche Berechnungen und iOS-Kameras sind dafür nicht gut geeignet).


Paul, danke für eine unglaublich detaillierte Antwort! Ich habe das OpenCV-Framework und werde nach Beispielen für Projekte suchen, die es verwenden.
Alex Stone

Hallo Paul, hast du eine Idee zu der Beispiel-App für die Lasererkennung über eine iOS-Kamera mit openCV?
AmJa

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.