web-dev-qa-db-fra.com

OpenCV - Fonctionnalité vs flux optique

Je suis intéressé par la création d'une application de suivi de mouvement à l'aide d'OpenCV. De nombreuses informations sont disponibles en ligne. Cependant, je suis un peu confus entre la correspondance des caractéristiques et les fonctions de suivi en utilisant un algorithme de flux optique clairsemé tel que Lucas-Kanade. Dans cet esprit, j'ai les questions suivantes:

  • Quelle est la principale différence entre les deux (adaptation des caractéristiques et flux optique) si j'ai spécifié une région de pixels à suivre? Je ne suis pas intéressé par le suivi en temps réel, si cela aide à clarifier les hypothèses.

  • De plus, comme je ne fais pas de suivi en temps réel, est-il préférable d'utiliser un flux optique dense (Farneback) pour garder une trace des pixels dans la région d'intérêt spécifiée? 

Je vous remercie.

7
JDBones

La fonctionnalité de comparaison utilise les descripteurs de fonctionnalité pour mettre en correspondance les entités les unes avec les autres (généralement) à l'aide de la recherche du voisin le plus proche dans l'espace du descripteur de fonctionnalité. L'idée de base est que vous avez des vecteurs descripteurs et que la même caractéristique dans deux images doit être proche l'une de l'autre dans l'espace descripteur, afin que vous correspondiez de cette façon.

Les algorithmes de flux optique ne considèrent pas un espace de descripteur, mais plutôt des correctifs en pixels autour d'entités et tentent de les faire correspondre. Si vous êtes familier avec le flux optique dense, le flux optique clairsemé ne fait que du flux optique dense, mais sur de petites parcelles de l'image autour des points caractéristiques. Ainsi, le flux optique suppose la constance de la luminosité, c'est-à-dire que la luminosité des pixels ne change pas entre les images. De plus, puisque vous regardez autour des pixels voisins, vous devez supposer que les points voisins de vos entités se déplacent de la même façon. Enfin, comme il utilise un algorithme d'écoulement dense sur de petites zones, les points où ils se déplacent ne peuvent pas être très éloignés de l'image par rapport à l'emplacement d'origine. Si tel est le cas, il est recommandé d’adopter une résolution pyramidale avant d’agrandir l’image, de sorte que la conversion de 16 pixels correspond désormais à une traduction de 2 pixels et que vous puissiez ensuite l’agrandir avec la transformation trouvée. votre prieur.

Ainsi, les algorithmes de correspondance des caractéristiques sont bien meilleurs lorsqu'il s'agit d'utiliser des modèles dont l'échelle n'est pas exactement la même, ou s'il existe une différence de perspective dans l'image et le modèle, ou si les transformations sont grandes. Cependant, vos correspondances sont aussi bonnes que votre détecteur de caractéristiques est exact. Sur les algorithmes de flux optique, les transformations peuvent être très, très précises, à condition qu'elles soient placées au bon endroit. Ils sont un peu coûteux en calcul; Les algorithmes de flux optique étant une approche itérative, ils sont coûteux (et bien que vous puissiez penser que l'approche pyramidale absorbe plus de coûts en exploitant plus d'images, elle peut en fait accélérer dans certains cas la précision souhaitée) et le plus proche voisin. les recherches sont aussi chères. Algorithmes de flux optique OTOH peut très bien fonctionner lorsque les transformations sont petites, mais si quelque chose dans votre scène perturbe votre éclairage ou si vous obtenez des pixels incorrects (comme, par exemple, même une occlusion mineure), vous risquez de le perdre.

Lequel à utiliser dépend définitivement du projet. Pour un projet sur lequel j'ai travaillé avec l'imagerie satellite, j'ai utilisé un flux optique dense car les images de terrain désertique avec lesquelles je travaillais ne présentaient pas suffisamment de caractéristiques précises (en position) et différents descripteurs de caractéristiques se trouvaient relativement similaires. pas donner des tonnes de grands matchs. Dans ce cas, le flux optique était la meilleure méthode. Toutefois, si vous aligniez des images sur une image satellite d'une ville où les bâtiments peuvent masquer certaines parties de la scène, de nombreuses fonctionnalités resteront identiques et donneront un meilleur résultat.

Le didacticiel OpenCV Lucas-Kanade ne donne pas beaucoup d’informations mais doit faire avancer votre code dans la bonne direction, en gardant à l’esprit ce qui précède.

5
Alexander Reynolds

correspondance des points clés = flux optique clairsemé

Le suivi KLT est un bon exemple de flux fragmenté, voir la démo LKDemo.cpp (il contenait aussi un exemple d'encapsuleur Python, vous ne pouvez pas vous en souvenir maintenant).

pour un exemple dense, consultez samples/python/opt_flow.py, à l'aide de la méthode Farnebäcks.

Vous avez raison de confondre ... Le monde entier est confus à propos de ce sujet terriblement simple. Une grande partie de la raison est parce que les gens croient que Lucas-Kanade est un flux rare (en raison d'un exemple terriblement mal nommé et commenté dans openCV: LKdemo qui devrait s'appeler KLTDemo).

3
Stefan Karlsson