2009-09-01 8 views
10

J'ai un flux vidéo. Ce flux vidéo contient plusieurs voyants clignotant à des vitesses différentes. Toutes les lumières sont de la même couleur (ce sont toutes des LED infrarouges). Comment puis-je détecter la position et la fréquence de ces lumières clignotantes?OpenCV: Détecte les lumières clignotantes dans un flux vidéo

Désistement: Je suis extrêmement nouveau à OpenCV. J'ai une copie de Learning OpenCV, mais je trouve cela un peu écrasant. Si quelqu'un pouvait expliquer une solution dans la terminologie OpenCV, ce serait grandement apprécié. Je ne m'attends pas à ce que du code soit écrit pour moi.

Répondre

8

Seuil de chaque image de la séquence avec un seuil qui rend la LED: s visible. Si vous pouvez le seuil avec un seuil que seulement conserve la LED et supprime l'arrière-plan alors vous êtes plus ou moins fini car tout ce que vous devez faire maintenant est de garder une trace de chaque position qui a vu une LED et compte à quelle fréquence il se produit .

Comme étape intermédiaire, s'il y a « bruit de fond » dans l'image seuillée serait d'utiliser l'érosion pour éliminer les petites erreurs, puis se dilatent peut-être à des « trous à proximité » dans les blobs vous êtes réellement intéressé par.

Si la scène est statique, vous pouvez également créer un modèle de fond simple en prenant la médiane de quelques images et en supprimant l'image médiane résultante de toute image et de tout seuil. Les choses qui ont changé (vos LED) apparaîtront plus fortes. Si la scène est en mouvement, je ne vois pas d'autre solution (facile) que de s'assurer que les LED sont assez brillantes pour pouvoir utiliser l'approche de seuil donnée ci-dessus. Comme pour OpenCV: si vous savez ce que vous voulez faire, il n'est pas très difficile de trouver une fonction qui le fait. La partie difficile est de trouver une méthode pour résoudre le problème, pas le codage réel.

+0

Merci beaucoup pour vos conseils! Cela aidera certainement! –

1

Si les leds sont à l'arrêt, le problème est beaucoup plus simple que lorsqu'ils sont en mouvement. En supposant qu'ils sont stationnaires, une solution pour trouver la fréquence pourrait simplement être de conserver un vecteur ou un tableau pour chaque emplacement de pixel dans lequel vous stockez les valeurs de ce pixel, de préférence après le prétraitement décrit par kigurai, sur une certaine période. Vous pouvez ensuite calculer la transformée de Fourier 1D de ces vecteurs de valeur et trouver la fréquence au sol comme première composante significative après le pic DC. Si le pic DC est trop faible, cela signifie qu'il n'y a pas de LED.

J'espère que ce problème est encore un peu réel, et que ma solution est logique.

+1

Non que votre réponse soit fausse, mais pour trouver la fréquence d'une LED clignotante, je pense que les transformations de Fourier pourraient être exagérées. Le simple fait de compter le nombre de trames "off" et le nombre de trames "on" devrait donner un résultat assez bon je pense, bien que cela dépende de la façon dont le signal est "propre". –