Sous-sections

Simplification de la surface

La reconstruction du tampon de profondeur de la scène à une position donnée est basée sur la variation de profondeur affectant chacun des pixels de la caméra, quand celle-ci se déplace le long de la trajectoire. Considérant un pixel à l'écran, nous représentons sa variation de profondeur entre l'instant $ t=0$ (départ) et $ t=1$ (arrivée) et nous créons une structure approximant au mieux cette variation.

Acquisition des échantillons

Pour obtenir cette variation de profondeur, nous effectuons le rendu de la scène complexe pour un nombre fixé de positions sur la trajectoire et en stockant à chaque fois le tampon de profondeur. Nous discrétisons donc la trajectoire en un nombre arbitraire de points, plus il y en aura, meilleure sera l'approximation des variations de profondeurs.

Considérant un pixel isolé, le principe de la méthode est d'approximer sa variation de profondeur en un ensemble restreint d'intervalles de variation linéaire (des segments).


Compression

Le nombre d'intervalles de variation linéaire est fixé de façon à contrôler l'espace mémoire nécessaire. Le problème est donc de trouver la meilleure façon de répartir un nombre fixé de segments pour approximer au mieux la variation réelle de profondeur. En figure 4.2, nous avons représenté la position de la caméra en abscisse et la profondeur du pixel sur les ordonnées.

L'algorithme que nous avons créé est adaptatif : nous commençons par approximer l'ensemble des points par un seul segment joignant le point de la profondeur de départ au point de la profondeur d'arrivée. Ensuite, le segment est divisé en deux à l'abscisse présentant la plus grande différence de profondeur entre la profondeur réelle et le segment (figure 4.2(a)).

Ensuite, l'algorithme est appliqué aux deux nouveaux segments créés. Par la suite, nous subdivisons, parmi un ensemble donné de segments, celui qui génère le point de plus grande différence entre la profondeur réelle et la profondeur linéairement approximée.

Durant la segmentation, nous supprimons tous les segments montrant une disparité de profondeur, c'est à dire ceux qui relient deux points consécutifs sur l'axe des abscisses (figure 4.2(b)). Cette disparité de profondeur correspond à une brutale variation de profondeur due à une bordure dans l'image (voir la figure 2.21 page [*] de la section 2.3.4 sur l'interpolation de points de vue par pixel).

Quand nous atteignons le nombre fixé de segments, l'algorithme se termine.

Finalement, nous obtenons un liste ordonnée de segments pour chacun des pixels. Chaque segment correspond à un intervalle de déplacement de la caméra et est constitué des informations suivantes :

\begin{displaymath}
\begin{cases}
\textrm{une profondeur de départ} & d_{0}\\
\...
... d_{1}\\
\textrm{l'abscisse du point d'arrivée} & T\end{cases}\end{displaymath}

Les segments sont stockés dans l'ordre des $ T$ croissants, c'est à dire, comme le montre la figure 4.2(c), de gauche à droite.

Figure 4.2: Segmentation de la variation de profondeur d'un pixel de l'écran. Abscisses : abscisse curviligne de la caméra sur la trajectoire. Ordonnées : profondeur du pixel.
\includegraphics[%
width=0.70\columnwidth,
keepaspectratio]{eps/eguk-approx-points.eps}

Décompression

La décompression est l'opération qui permet de retrouver la profondeur d'un pixel de l'écran à un instant $ t$ donné de la trajectoire. Pour déterminer cette profondeur, nous devons simplement trouver le segment $ S_{i}$ qui se termine avec $ T_{i}>t$, en partant du début de la liste. A partir des données de profondeur de départ et d'arrivée stockée par le segment, la profondeur $ d$ du point est obtenue avec une simple interpolation linéaire :

$\displaystyle d=d_{0}+\frac{t-T_{i}}{T_{i}-T_{i-1}}(d_{1}-d_{0})$

Finalement, ceci nous permet de retrouver la profondeur de chaque pixel, pour un instant donné du mouvement de la caméra le long de la trajectoire. Pour obtenir la profondeur de l'image complete, nous effectuons ce parcours de liste pour chaque pixel.

Porquet Damien 2005-03-02