about me

projects

MPEG & DVD

doc

leisure

Sam Hocevar’s .plan

This is an experimental blog engine. RSS feeds: everything | blog | Debian (DPL only) | VideoLAN | GNOME | Mono

Arrêtez de me péter les couilles avec la cam 3D

Posted on Mon, 20 Mar 2006 15:46:11 +0100 - Keywords:

Bon, j’en ai un peu assez du buzz ridicule autour du pet project de Divide, une caméra 3D dont finalement personne ne sait ni comment elle marche ni finalement trop à quoi elle sert. Alors puisqu’on ne cesse de me parler de ce truc génial et de me demander ce que j’en pense, et que je ne peux pas poster sur le blog de Divide pour répondre aux insultes de ses potes, voilà quelques mots ici.

Ma rencontre avec Divide

Comme je l’ai constaté lors de ma rencontre le 19 mars avec Divide, il est très difficile d’avoir un discours s’adressant à la fois à des gens qui ne connaissent rien au sujet, à des gens qui s’y intéressent vaguement, et à des gens qui le maîtrisent, sans se faire taxer de condescendance, pédanterie ou d’imprécision.

C’est donc en toute bonne foi que je me suis permis d’expliquer tout au long de la discussion les concepts de géométrie épipolaire (qui, en passant, est à la base de toute la théorie de la reconstruction 3D), de wide baseline matching, ou de dispositifs catadioptriques. C’est sur cette dernière explication que Divide s’est levé outré et a décidé que la discussion devait s’arrêter là, s’en allant sans daigner me serrer la main. Je reste néanmoins convaincu que personne n’avait la moindre idée de ce dont je parlais, et que l’explication n’aurait pas fait de mal ; la famille des miroirs catadioptriques est très utilisée en vision parce qu’elle permet de résoudre des contraintes d’encombrement et de vision 360° sans trop perdre d’information. Mais bon, ça permettait à ceux qui croient que juger un travail signifie critiquer une personne de ne pas perdre la face, tant mieux pour eux.

Il m’est difficile de ne pas revenir sur le comportement de Vanth qui n’a pas cessé de me balancer des arguments d’autorité (me renvoyant systématiquement au CV de Divide et à son moteur 3D, qui franchement n’avait rien à voir avec la choucroute) ou d’homme de paille (m’attribuant les arguments d’autres personnes présentes pour me contredire et ignorer ce que je disais). Selon ce sinistre individu je ne serais venu « que pour dire “ton truc c 2 la merd, g vu dé gen y fon mieu alor di moi comen tu fé stp conar sinon lol je te di je te croi pa lol de mdr” », je suis un « zigoto », mon but est « clair » et consiste à « au passage insulter divide », je suis « très très [frustré] de voir quelqu’un [faire] mieux que [moi] », j’ai « tenté de lui soutirer des infos en tentant de rabaisser son travail », et le « truc quelconque » de Divide « [me] fait chier parce que la personne en question est meilleur(sic) que [moi] », et au final mon comportement a été « puéril et haïssable » (franchement, Divide, choisis mieux tes fanboys, celui-là te dessert plus qu’autre chose).

La caméra cachée

J’aimerais d’abord que tout le monde comprenne que je ne suis pas là pour descendre le boulot de Divide. Le boulot que je vois, je l’apprécie à sa juste valeur, je connais mon sujet. En revanche il ne faut pas non plus me prendre pour le couillon qui va avaler n’importe quoi, et en tant que scientifique il est normal (je dirais même indispensable) que je m’écrie “bullshit!” quand j’en vois. Donc autant je veux bien admirer ce qui a été fait, autant qu’on ne vienne pas me péter les couilles pour que je m’extasie devant une chimère, merci.

Alors cette caméra, d’abord, elle n’existe pas. Pas encore. Tout le monde le sait, mais ça vaut quand même le coup de le rappeler. Les « résultats » qu’on a vus utilisent en fait une photo. Et je mets « résultats » entre guillemets parce qu’on ne voit même pas la prise de vue originale, il est donc quasiment impossible de savoir ce qu’on va juger. C’est vraiment facile (ce mot est gentil ; dans une conférence n’importe qui dans le public dirait « malhonnête ») de montrer des « résultats » que personne ne peut tenter de reproduire. Je rappelle que ça n’est pas un comportement réservé au milieu de la recherche : dans l’industrie aussi, quand on rédige un brevet, on se fait envoyer chier assez vertement par le relecteur s’il n’y a pas d’état de l’art.

Un peu de reconstruction 3D

Pour le moment tout ce qu’il m’est donc permis d’apprécier c’est un algorithme de reconstruction 3D basé sur une prise de vue photo. Divide dit dans sa présentation « une photo », mais son algorithme est basé sur de la corrélation (ce qu’il appelle pixel matching et subpixel matching), c’est donc que sous une forme ou une autre il a au moins deux photos et non une seule, un peu comme la très classique paire d’images œil gauche / œil droit :

Tsukuba left Tsukuba right

Il est bien entendu possible que les prises de vue soient fusionnées d’une façon ou d’une autre, un peu dans ce genre (pour les curieux, la première est ce qu’on obtient avec un système catadioptrique à miroirs plans, la seconde avec un catadioptre courbe, du genre paraboles de révolution, et la troisième avec deux filtres rouge et cyan et deux miroirs plans, ça fera plaisir à certains):

Tsukuba upside-down Tsukuba polar Tsukuba red/cyan

Même dans ce cas on parle de deux (ou davantage) images, parce que la phase calculatoire passe forcément par un redressement des images (on dit « normalisation »). Comme on connaît les paramètres de notre ou nos caméras (distance focale, taille du capteur, colorimétrie), des systèmes optiques qu’on leur a mis au cul (miroirs), de l’écartement des centres optiques (virtuels ou non), etc., c’est pas trop difficile. Parfois on ne connaît pas tout (caméras libres, objectifs déformants, focale variable, etc.) et on est obligés de s’aider un peu de ce qu’on voit dans l’image pour calculer ces paramètres. L’ensemble de tous ces paramètres s’appelle la géométrie épipolaire et comme je l’ai déjà dit c’est la base. On peut bien entendu implémenter son algo directement sur les images non normalisées, mais c’est souvent se tirer une balle dans le pied, surtout dans la phase expérimentale.

Je reviens un peu sur l’image obtenue avec les filtres rouge/cyan (plus communément applée anaglyphe, je sais pas pourquoi j’ai bien envie d’en parler, sûrement parce que ça me rappelle Priscilla). L’intéret a priori c’est qu’on ne perd pas en résolution, puisque l’image conserve la même taille. On applique une transformation toute bête pour extraire l’information qui nous intéresse. Prenons l’exemple de Priscilla :

Priscilla anaglyph Priscilla red component Priscilla cyan component

Malheureusement, une fois cette séparation chromatique effectuée, on est quand même bien emmerdés, vous allez voir. On peut bien appliquer une formule nous donnant l’intensité des pixels en fonction de la couleur :

Priscilla red intensity Priscilla cyan intensity

On voit bien qu’on a perdu pas mal d’information dans la composante cyan et que les images sont beaucoup trop dénaturées, c’est manifeste dans les coudes. Lorsqu’on filme une scène avec d’excellentes textures bien contrastées (par exemple un feuillage) il y a de bonnes chances que ça se passe bien. Malheureusement dès qu’on filme un visage (aux teintes rosées), ou un objet aux couleurs très vives, le système se ramasse complètement. Idem pour le ciel, dont suivant la couleur on va être incapable de déterminer la profondeur même s’il est nuageux.

Bref, la séparation chromatique, même si ça marche pas mal pour le cerveau humain (et encore, on fait bien attention à ne pas utiliser de couleurs trop vives et proches des filtres qu’on utilise), ça ne marche quasiment pas en reconstruction 3D, ou alors pour des applications hyper spécifiques où on connaît a priori l’histogramme de la scène et les types de textures. Il vaut mieux diviser par deux la résolution X ou Y plutôt que de perdre des données vitales pour la reconstruction parce que l’objet devant la caméra a une sale couleur.

Donc voilà, Divide a son jeu d’images et il fait de la corrélation. Ça consiste à exhiber une fonction permettant de transformer une image du jeu en une autre, qui vérifie des propriétés intéressantes (de continuité, de robustesse, de cohérence visuelle...) et qui nous dit à la fin quels pixels (ou sous-pixels) de la première image correspondent à quels pixels de la seconde. Ensuite, grâce à la géométrie épipolaire, on peut par triangulation déduire la distance de chaque point de la scène à la caméra. Ça donne quelque chose comme ça par exemple :

Depthmap (scanline optimisation)

J’ai volontairement pris un algo ancien (datant des années 80) parce qu’il souffre des mêmes artefacts que les tous premiers essais de Divide, et montre en même temps que c’est bien du matching par ligne de pixels (peut-être ce qui s’appelle scanline optimisation) qu’il fait. D’autres algos plus sexy donnent ce genre de résultats :

Depthmap (belief propagation)

Il n’existe pas d’algorithme général qui marche à tous les coups. C’est illusoire non seulement mathématiquement, mais aussi pratiquement, parce que selon la scène il y a toujours une technique qui sera meilleure qu’une autre et ce ne sera jamais la même. Mais il y a bien entendu des techniques qui marchent super bien en moyenne.

Que vaut l’algo de Divide ?

C’est difficile à dire, bien entendu, puisque comme je l’ai déjà dit on n’a pas les images originales qu’il a employées pour sa reconstruction. Je peux en citer les points forts :

Parmi les points faibles, j’ai en tête :

Par ailleurs, sans en être certain, je doute qu’il y ait un support pour une fenėtre de corrélation variable (bien qu’il prétende que le système marchera tout aussi bien à 20 cm qu’à 10 km). Je ne peux pas juger le reste. De toute façon pour le moment il n’y a pas de reste. Bref, pour un système de caméra 3D, il y a pour le moment du code de corrélation qui me semble ma foi plutôt efficace, et... ben c’est tout. Donc pas vraiment de quoi vermifuger un abribus. En gros, les 5% les plus faciles ont été faits (et encore) et le reste va être d’un tout autre acabit :

Not impressed

Comme dit et redit, un système qui fait la même chose ça existe depuis des lustres et pour vraiment pas cher (un catadioptre à miroirs plans c’est peanuts) et ne pas le dire c’est soit naïf soit malhonnête.

Tant qu’il y aura ces petites phrases du genre « beaucoup plus d’applications, dans le cinéma, en médecine, voire dans le militaire » ou qu’à chacune de mes critiques on répondra « tu extrapoles sur le système » en balayant le reste avec dédain, et qu’on ne verra rien, je me gausserai.

Show the last 10 | 20 | 50 entries.