Comment obtenir des nuages ​​de points denses à partir de caméras stéréo?


12

J'essaie d'utiliser une caméra stéréo pour la reconstruction de scènes, mais je ne peux généralement obtenir que des nuages ​​de points clairsemés (c'est-à-dire que plus de la moitié de l'image n'a pas d'informations de profondeur appropriées).

Je me rends compte que les algorithmes de traitement stéréo reposent sur la présence de texture dans les images et ont quelques paramètres qui peuvent être modifiés pour obtenir de meilleurs résultats, tels que la plage de disparité ou la taille de la fenêtre de corrélation. Même si je règle ces paramètres, je ne suis jamais en mesure d'obtenir des résultats qui sont même à distance proches de ce qui peut être obtenu en utilisant un capteur actif tel que le Kinect.

La raison pour laquelle je le souhaite est que, très souvent, les nuages ​​de points correspondant à des régions adjacentes n'ont pas suffisamment de chevauchement pour que j'obtienne une correspondance, de sorte que la reconstruction est gravement altérée.

Ma question aux experts en vision par ordinateur est la suivante: que puis-je faire pour obtenir des nuages ​​de points plus denses en général (sans modifier arbitrairement mon environnement de bureau)?


C'est une bonne question, mais je pense que plus de détails sont nécessaires. Quels algorithmes avez-vous essayé de calculer les correspondances? Pourriez-vous préciser ce que vous entendez par "régions adjacentes" et "chevauchement?".
Josh Vander Hook

Quand je dis «régions adjacentes», je veux dire des portions d'espace physique qui ne sont pas équivalentes mais qui ont une intersection non vide, que j'ai appelée «chevauchement». C'est-à-dire le type de régions qui généreraient des nuages ​​de points qui pourraient être appariés et assemblés dans un algorithme ICP.
georgebrindeiro

En ce qui concerne l'algorithme, j'utilise toujours la solution la plus simple possible que j'ai pu trouver: le nœud ROS stereo_image_proc , qui applique l'algorithme global de correspondance de blocs disponible dans OpenCV. Je serais très intéressé à entendre parler de réglages de paramètres qui pourraient ne pas être directement accessibles pour moi via le nœud ROS ou d'autres algorithmes connus pour fournir de meilleurs résultats.
georgebrindeiro

Réponses:


4

Vous pouvez essayer d'ignorer la détection du point saillant, et simplement échantillonner de manière dense sur l'image (sous forme de grille) et calculer un descripteur de fonctionnalité à chaque point d'échantillonnage. Vous pouvez probablement même aller jusqu'à calculer un descripteur pour chaque pixel.

Vous pourriez perdre l'invariance d'échelle, mais je pense que cela ne fera pas trop mal pour la vision stéréo car les objets seront à peu près à la même échelle dans les deux images.

Une autre approche pourrait consister à combiner plusieurs algorithmes de détection de points saillants: coins, bords, taches, etc. Ensuite, vous devez utiliser le même algorithme de descripteur de fonctionnalités pour tous les points détectés, mais cette dernière partie peut être quelque peu délicate à mettre en œuvre.


2

Ainsi, les algorithmes de traitement d'image stéréo que j'ai utilisés dans le passé ont été mis en œuvre pixel par pixel. Nous venons d'utiliser le modèle de caméra sténopé et avons fait des mesures à l'ancienne avec du ruban à mesurer jusqu'à ce que nos estimations de profondeur correspondent à la réalité.

Les équations pour une paire de caméras parallèles sont:

  • d=
  • f=
  • Cadres de coordonnées:
    • x,y,z=
    • uR,vR
    • uL,vL
    • Remarque: les coordonnées de la caméra ont leur origine dans le cadre de coordonnées entre les caméras (c'est-à-dire que les axes u font face à des directions opposées)

uL=f(xd)zuR=f(x+d)z

zuR=f(x+d)zuL=f(xd)

z(uRuL)=2df

z=2dfuRuL

y=vLz+dff

x=uLz+dff

En utilisant ces équations, vous pouvez calculer un nuage stéréo dense. Un pour chaque pixel de vos caméras.


Merci pour l'effort, mais je connais la modélisation stéréo. Le problème est généralement exactement celui de la correspondance entre les coordonnées (u, v) dans les caméras gauche et droite. muksie a donné quelques idées sur la façon de traiter cela et sylvain.joyeux a souligné une excellente bibliothèque stéréo qui mène à de meilleurs résultats, cependant ...
georgebrindeiro

1

Lorsque vous dites "plus de la moitié de l'image n'a pas d'informations de profondeur appropriées", quelle moitié?

Un problème que nous avons rencontré est que si la distance à l'objet est du même ordre de grandeur que votre ligne de base (généralement associée à des caméras très grand angle), alors les algorithmes stéréo denses "standard" ne fonctionnent pas si bien. Nous utilisons la bibliothèque libelas, et ses développeurs nous ont dit que cela s'appelait une "grande chaîne stéréo de base" et qu'il s'agissait d'un autre problème.


Quand j'ai dit que la moitié de l'image n'avait pas d'informations de profondeur appropriées, je voulais dire que sur tous les pixels, seulement environ la moitié avait des disparités calculées (ne formant pas nécessairement une région contiguë). Je n'ai pas le même problème que vous avez mentionné avec le rapport distance / objet / ligne de base, mais c'était très intéressant d'entendre parler de cette bibliothèque et que cela peut être un problème. Merci!
georgebrindeiro

1
Quoi qu'il en soit, je vais essayer les libelas depuis que j'ai trouvé un wrapper ROS pour cela!
georgebrindeiro

0

Jetez un œil aux leaders KITTI Stereo Benchmark . Cette référence pénalise les algorithmes pour ne pas produire de disparité à un moment donné, de sorte que les plus performants produisent des sorties denses (même s'ils n'ont pas beaucoup de motifs pour leur estimation à plusieurs points). Certaines méthodes ont du code accessible au public qui est lié, que vous pouvez essayer.

Notez qu'ils ne sont pas pénalisés pour avoir pris beaucoup de temps, donc de nombreuses méthodes prendront l'ordre de quelques minutes par image à exécuter et peuvent ne pas convenir à votre application. De nombreuses méthodes basées sur CNN ont été introduites, mais elles fonctionnent très bien, tout en fonctionnant en moins d'une seconde (sur un GPU). Au moins l'un d'entre eux (CRL) a un code public.

Si vous n'obtenez toujours pas d'estimations de profondeur décentes avec celles-ci sur vos images, alors vous voyez peut-être les limites de ce qui est réalisable à partir d'une approche visible. Il doit fondamentalement y avoir une texture distinctive dans la zone pour pouvoir bien faire correspondre les points, ou vous avez besoin d'une base pour faire des hypothèses solides (par exemple, la douceur) dans les régions sans texture.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.