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!
quelle
Antworten:
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!
Dies ist übrigens die Grundidee eines sogenannten Partikelfilters (von dem Kondensation eine Methode ist). Gut gemacht, Sie haben die Grundidee selbst herausgefunden!
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.
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).
quelle
Wie wäre es mit diesem Code
https://www.youtube.com/watch?v=MKUWnz_obqQ
https://github.com/niitsuma/detect_laser_pointer
In diesem Code werden die HSV-Farben mit dem Hotelling-T-Quadrat-Test verglichen
quelle