Vision en relief, anaglyphes à partir d'images RGB+profondeur

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche

Un anaglyphe est une image construite pour être vue en relief à l’aide de deux filtres de couleurs différentes (lunettes 3D) disposés devant chacun des yeux de l’observateur. On utilise le phénomène de stéréoscopie pour retranscrire le décalage entre nos deux yeux afin de recréer l'effet de relief. L'ensemble des fonctions utilisées pour la construction de l'anaglyphe ont été écrites en python à l'aide de la bibliothèque OpenCV. Elles seront classées dans l'annexe.

Constitution d'un anaglyphe

Pour construire un anaglyphe, on utilise la superposition de deux images de couleurs complémentaires que l'on tire d'un même point de vue. Ces images sont décalées pour recréer la vision d'un oeil droit et gauche. La restitution du relief est donnée en plaçant un filtre de l’une de ces deux couleurs complémentaires sur un œil et un filtre de l’autre couleur sur l’autre œil : ainsi, chaque œil ne perçoit que les éléments de l'image visibles à travers le filtre de la même couleur.

Décalage de la vision entre les deux yeux

Création du décalage

Principe

Le décalage effectué sur l'image permet de recréer la vision de l'oeil droit et de l'oeil gauche. Ce décalage n'est pas linéaire, il est dépendant de la profondeur de l'élément que nous sommes entrain de traîter: il varie en fonction des éléments présent sur l'image et est plus ou moins grand selon la proximité de l'élément vis-à-vis du plan choisi comme origine de l'image. Nous avons ainsi une image de profondeur associée à notre image de base en couleur RGB. On note ici que plus on tire vers le blanc alors plus l'élément est éloigné.

Image RGB
Image de profondeur associée
















Calcul du décalage

Chacun des pixels de l'image RGB est maintenant lié à un décalage propre qui est défini par :

             , le shift étant le décalage arbitraire maximum

Formation de l'oeil droit et gauche

L'image de référence RGB est séparée pour générer deux images : une rouge, constituant l'image de gauche et une cyan(vert+bleu), constituant l'image de droite. Le rouge et le cyan étant deux couleurs complémentaires.

Correspondance des pixels

Le principe de séparation de l'image RGB est de trouver, pour chaque pixel de l'image, sont correspondant décalé dans l'image de gauche et dans l'image de droite. Ces pixels, décalés sur l'axe horizontal x, se retrouvent en position x_initial - décalage du pixel calculé via la profondeur pour l'oeil gauche et x_initial + décalage pour l'oeil droit.


Image RGB Gauche
Image RGB Droit














Séparation des canaux

L'image est en format couleur RGB. Chaque pixel possède donc trois différents canaux : un rouge, un vert et un bleu. Ces trois petits composants électroluminescents s'allument ensemble à une certaine intensité pour donner la couleur du pixel par synthèse additive.

Afin de créer un anaglyphe, il faut donc séparer ces canaux et ajouter la composante rouge à l'image gauche et les composantes vertes et bleues à l'image droite. Ces deux images, une fois visionnées avec le filtre des lunettes 3D, représentent maintenant notre vision de l'oeil droit et de l'oeil gauche d'une même image.

Vision oeil gauche
Vision oeil droit














Limites

Limites de l'anaglyphe

Un anaglyphe présente de nombreuses limites d'un point de vue biologique. Cette vision en relief tiens sur la superposition de ces deux images mais si les points sont trop décalés par rapport a leur homologue dans l'autre image, alors notre cerveau se perd et re-sépare les deux images ce qui casse l'impression de recréer la vision droite et gauche.

La distance de l'observateur vis-à-vis de l'ecran joue un grand facteur dans ce phénomène. S'il est trop loin ou trop près, alors le décalage créé ne représentera pas le bon écart perçu et cela pourrait supprimer l'impression de relief jusqu'à rendre notre vision confuse.

Une autre problématique de l'anaglyphe est la création de ce qu'on appelle « fantômes ». En effet, l'anaglyphe à pour but d'être projeté sur un écran de téléviseur ou d'ordinateur. Ces dispositifs visuels ne transmettent cependant pas la couleur de la même manière et, pour l'observateur, le filtrage n'est pas non plus parfait surtout que les lunettes sont parfois différentes. Il existe notamment des lunettes où le rouge et le cyan sont inversé ou encore certaines utilisent d'autres couleurs complémentaires comme le magenta et le vert. La conséquence de ceci est une séparation imparfaite des deux images, l'oeil droit se met alors à distinguer des éléments destinés à l'oeil gauche et inversement.


Limites de l'algorithme

Comme nous l'avons vu, les pixels de l'image RGB sont décalés afin de créer les images droite et gauche mais ce décalage est la source des lacunes de l'anaglyphe. Certains pixel sont décalés en dehors de l'image, d'autres s'écrivent les uns sur les autres du fait d'un décalage linéaire ou enfin, on peut retrouver ce qu'on appelle des « trous ». Ces trous sont fortement visibles sur les images des yeux droit et gauche représentés. Il sont dûs à la place devenue vacante d'un pixel qui à été décalé et dont aucun autre n'est venu prendre la place.


Optimisation et création de l'anaglyphe

Interpolation et remplissage des trous

Pour optimiser le rendu de l'anaglyphe, il est nécessaire de remplir les trous créés par le décalage des pixels. Pour le faire on utilise l'interpolation ce qui consiste à déduire en quelque sorte l'information manquante. Nous avons ici deux procédés d'interpolation possibles. Dans un premier cas, nous pouvons raisonner par la moyenne des pixels entourant le trou pour le remplir petit à petit en restant fidèle à l'entourage de chaque pixel. Le second principe constitue à prolonger les valeurs des deux extrémités du trous afin que les pixels se rejoignent au milieu. Cependant, notre vision et notre cerveau ont un très grand mal à distinguer les petis écarts de couleurs ce qui pose des problèmes lors de l'utilisation de la première méthode d'interpolation. Notre vision se trouble et il nous est très compliqué de trouver un point fixe où poser notre regard. À l'inverse, les changements de couleur plus bruteaux et plus prononcés sont facilement distingués et facilitent notre façon de regarder l'image. L'interpolation par prolongement des extrémité est donc une meilleure façon de remplir les trous. On obtiens deux images plus agréables afin de former notre anaglyphe.


Vision gauche après remplissage des trous
Vision droite après remplissage des trous














Création de l'anaglyphe

L'anaglyphe se génère maintenant en superposant les images rouge et cyan. Les composantes RGB de cette nouvelle image sont donc l'association de celles des images décalées.


Anaglyphe


Ajout d'une trackbar

Pour permettre un contrôle des aspects de l'anaglyphe, la bibliothèque OpenCv permet d'ajouter une trackbar à l'image ce qui permet d'en modifié les paramètres. La variable ici changée est le shift c'est-à-dire la valeur maximale que peux atteinde notre décalage de pixel. Ce shift est donc variable en temps réel pour produire différents anaglyphes. Il est également possible de changer le point où l'on décide de porter le regard de l'observateur, de mettre donc la vision "normale" plus ou moins proche dans l'image.


Anaglyphe shift = 14
Anaglyphe shift = 38

















Annexe

Calcul du max/min de la profondeur
Crée le tableau qui répertorie le décalage nécessaire à chaque pixel
Décalage et création des images droite et gauche
Fonction de remplissage des trous
Création finale de l'anaglyphe
Ajout de la trackbar à l'anaglyphe