Je suis intéressé par la création d'une application de suivi de mouvement à l'aide d'OpenCV, et de nombreuses informations sont disponibles en ligne. Cependant, je suis un peu confus entre les fonctionnalités de correspondance et de suivi des fonctionnalités à l'aide d'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 (correspondance 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 permet d'éclaircir 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 ma région d'intérêt spécifiée?

Je vous remercie.

10
JDBones 24 nov. 2017 à 05:31

2 réponses

Correspondance des points clés = flux optique clairsemé

Le suivi KLT est un bon exemple de flux épars, voir la démo LKDemo.cpp (il y avait aussi un exemple de wrapper python, je ne m'en souviens plus maintenant).

Pour un exemple dense, voir samples / python / opt_flow.py, en utilisant la méthode Farnebäcks.

Vous avez raison d'être confus ... Le monde entier est confus sur ce sujet terriblement simple. La raison en est que les gens pensent que Lucas-Kanade est un flux clairsemé (en raison d'un exemple terriblement mal nommé et commenté dans openCV: LKdemo qui devrait s'appeler KLTDemo).

2
Stefan Karlsson 31 janv. 2018 à 14:40

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

Les algorithmes de flux optique ne regardent pas un espace de descripteur, mais à la place, examinent les correctifs de pixels autour des caractéristiques et essaient de faire correspondre ces correctifs à la place. Si vous êtes familier avec un flux optique dense, un flux optique clairsemé ne fait qu'un flux optique dense, mais sur de petites parcelles de l'image autour des points caractéristiques. Ainsi, le flux optique suppose une constance de luminosité, c'est-à-dire que la luminosité des pixels ne change pas entre les images. De plus, comme vous regardez autour des pixels voisins, vous devez supposer que les points voisins de vos entités se déplacent de la même manière que votre entité. Enfin, comme il utilise un algorithme de flux dense sur de petits patchs, les points où ils se déplacent ne peuvent pas être très éloignés dans l'image de l'emplacement d'origine de la fonction. Si tel est le cas, alors l'approche de résolution pyramidale est recommandée, où vous réduisez l'image avant de le faire afin que ce qui était autrefois une traduction de 16 pixels soit maintenant une traduction de 2 pixels, puis vous pouvez augmenter avec la transformation trouvée comme votre prieur.

Les algorithmes de correspondance des fonctionnalités sont donc bien meilleurs lorsqu'il s'agit d'utiliser des modèles dont l'échelle n'est pas exactement la même, ou s'il y a une différence de perspective dans l'image et le modèle, ou si les transformations sont importantes. Cependant, vos correspondances sont aussi bonnes que votre détecteur de caractéristiques est exact. Sur les algorithmes de flux optique, tant qu'il regarde au bon endroit, les transformations peuvent être vraiment, vraiment précises. Ils sont tous deux un peu coûteux en calcul; les algorithmes de flux optique étant une approche itérative, ils sont coûteux (et bien que vous pensiez que l'approche pyramidale peut absorber plus de coûts en fonctionnant sur 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 également coûteuses. Les algorithmes de flux optique OTOH peuvent 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, une occlusion mineure) peut vraiment le gâcher.

Lequel utiliser dépend certainement du projet. Pour un projet sur lequel j'ai travaillé avec des images satellite, j'ai utilisé un flux optique dense parce que les images du terrain désertique avec lesquelles je travaillais n'avaient pas de caractéristiques suffisamment précises (dans l'emplacement) et que différents descripteurs de caractéristiques semblaient relativement similaires. ne donne pas des tonnes de bons matchs. Dans ce cas, le flux optique était la meilleure méthode. Cependant, si vous faisiez un alignement d'image sur des images satellite d'une ville où les bâtiments peuvent occulter des parties de la scène, de nombreuses fonctionnalités resteront identiques et donneront un meilleur résultat.

Le tutoriel OpenCV Lucas-Kanade ne donne pas grand-chose de perspicacité mais devrait faire avancer votre code dans la bonne direction en gardant à l'esprit ce qui précède.

7
alkasm 24 nov. 2017 à 06:17
47465570