2009-09-01 4 views
10

Ich habe einen Video-Feed. Dieser Video-Feed enthält mehrere Lichter, die mit unterschiedlichen Geschwindigkeiten blinken. Alle Lichter haben die gleiche Farbe (sie sind alle Infrarot-LEDs). Wie kann ich die Position und Häufigkeit dieser blinkenden Lichter erkennen?OpenCV: Erkennen blinkender Lichter in einem Video-Feed

Haftungsausschluss: Ich bin extrem neu zu OpenCV. Ich habe eine Kopie von Learning OpenCV, aber ich finde es ein wenig überwältigend. Wenn jemand eine Lösung in der OpenCV-Terminologie erklären könnte, wäre dies sehr zu begrüßen. Ich erwarte nicht, dass Code für mich geschrieben wird.

Antwort

8

Schwellwert jedes Bild in der Sequenz mit einem Schwellenwert, der die LED sichtbar macht. Wenn Sie einen Schwellenwert von nur auf setzen können, bleibt die LED erhalten und der Hintergrund wird entfernt. Sie müssen mehr oder weniger fertig sein, da Sie jetzt nur jede Position, die eine LED gesehen hat, verfolgen und zählen können .

Als mittlere Stufe, wenn es „Hintergrundrauschen“ in dem schwellen Bild wäre Erosion zu verwenden, kleine Fehler zu entfernen, und dann vielleicht auf „enge Löcher“ in dem Blobs erweitern Sie tatsächlich interessiert sind.

Wenn die Szene statisch ist, können Sie auch ein einfaches Hintergrundmodell erstellen, indem Sie den Median einiger Bilder wählen und das resultierende Medianbild aus einem beliebigen Rahmen und Schwellenwert entfernen. Dinge, die sich geändert haben (Ihre LEDs) werden stärker erscheinen.

Wenn sich die Szene bewegt, sehe ich keine andere (einfache) Lösung, als dafür zu sorgen, dass die LED hell genug ist, um den oben angegebenen Schwellenwert zu verwenden.

Wie für OpenCV: Wenn Sie wissen, was Sie tun möchten, ist es nicht sehr schwer, eine Funktion zu finden, die es tut. Der schwierige Teil kommt mit einer Methode zur Lösung des Problems, nicht mit der eigentlichen Codierung.

+0

Vielen Dank für die Tipps! Dies wird sicherlich helfen! –

1

Wenn die LEDs stationär sind, ist das Problem viel einfacher als wenn sie sich bewegen. Unter der Annahme, dass sie stationär sind, könnte eine Lösung zum Finden der Frequenz einfach darin bestehen, einen Vektor oder ein Array für jeden Pixelort, in dem Sie die Werte dieses Pixels speichern, vorzugsweise nach der von Kigurai beschriebenen Vorverarbeitung, über einen bestimmten Zeitraum hinweg zu behalten. Sie können dann die 1D-Fourier-Transformation dieser Wertvektoren berechnen und die Grundfrequenz als die erste signifikante Komponente nach dem DC-Peak finden. Wenn die DC-Spitze zu niedrig ist, bedeutet dies, dass dort keine LED geführt wird.

Hoffe, dieses Problem ist immer noch etwas aktuell, und dass meine Lösung sinnvoll ist.

+1

Nicht, dass deine Antwort falsch ist, aber um die Frequenz einer blinkenden LED zu finden, denke ich, dass Fourier-Transformationen übertrieben sein könnten. Einfach die Anzahl der Bilder "Aus" und die Anzahl der Bilder "An" zu zählen, sollte ein gutes Ergebnis ergeben, denke ich, obwohl das davon abhängt, wie "sauber" das Signal ist. –