EXPLICATION THEORIQUE DES LDI
1.Ce qu est une LDI
Une LDI (Layered Depth Image) est en fait une image
a plusieurs couches. Cela permet d avoir l image visible (la premiere couche), mais aussi
les parties cachees (les couches suivantes). Cette structure permet un deplacement de l observateur, car sa reprojection
suivant le parcours de McMillan (voir l explication du warping) fera apparaitre eventuellement des parties
qui etaient cachees d un point de vue et qui ne le sont plus du point de vue nouveau.
Pour creer une LDI, nous avons besoin:
*d images de reference .ppm, de leurs .cam et .z respectifs
*d un .cam particulier, qui represente le point de vue de creation du LDI
Le choix du fichier .cam de point de vue de creation est particulierement important:
c est en fait un point de vue fictif duquel on va voir, et dans lequel les differents couches seront calculees.
Ainsi, si ce point de vue est trop proche, ou ne couvre pas l ensemble des objets, il y aura des disparitions d objets meme si ceux ci
sont sur les images de reference. Par contre, si ce point de vue est trop loin, il y aura plus d imprecisions, dues aux arondies. Il y a
une sorte de clipping fait par le choix du point de vue de creation. Tout objet que l on voudrait garder dans la LDI doit etre tel qu il serait visible si on se mettait dans le point de vue de creation.
2.Creation du LDI
Avec ces quelques donnees, le programme va construire la LDI. Pour cela, il va projeter chaque
image de reference dans le point de vue de creation (par un warping sur le point de vue de creation).
Il va superposer les images obtenues, et dans le cas ou les pixels d images differentes se reprojeteraient sur le meme endroits,
il va mettre ces projections dans differents couches, triees suivant l ordre croissant de leur profondeur.
De plus, il y a une marge de tolerance, appellee epsilon. Elle est telle que si deux points se projetent sur le meme pixel, et ont une distance inferieure a epsilon, on ne garde que le point le plus pres du point de vue. Cela permet de supprimer les doublons dus a des parties de l espace vues dans differentes images, et donc projetees plusieurs fois sur la LDI. Il est possible de prendre un epsilon negatif: alors tous les points sont gardes. Si l on veut supprimer des points sans trop perdre d informations, on peut prendre des epsilons de l ordre de 0.1 metre pour des scenes de taille reelle. La premiere couche du LDI constitue ce qui est visible.
La structure de donnees est la suivante: Une LDI est une matrice de LDP (Layered Depth Pixel, couches de pixels a profondeurs). Ces LDP sont un tableau trie suivant les distances de DP (Depth Pixel, pixel a profondeur). Ces DP sont une structure regroupant une couleur RGB et une profondeur. En fait, LDI contient aussi la resolution en x et en y et les parametres de camera, et LDP contient le nombre de DP dans son tableau.
Dans le programme, les structures sont codees de cette facon:
typedef struct {
unsigned char Rouge;
unsigned char Vert;
unsigned char Bleu;
float Distance;
} DepthPixel;
typedef DepthPixel* pDepthPixel;
typedef struct
int NombreLayer;
pDepthPixel* Layer; /*Layer est un tableau de pDepthPixel*/
} LayeredDepthPixel;
typedef LayeredDepthPixel* pLayeredDepthPixel;
typedef struct {
Vecteur3 a; /* Vecteur3 est un type definie autre part. C est un tableau 3 elements qui represente un vecteur colonne*/
Vecteur3 b;
Vecteur3 c;
float Focale;
Vecteur3 From;
} ParametreCamera;
typedef ParametreCamera* pParametreCamera;
typedef struct {
pParametreCamera pCamera;
int xres;
int yres;
pLayeredDepthPixel* Pixels; /*Pixels est un tableau de pLDP */
} LayeredDepthImage;
typedef LayeredDepthImage* pLayeredDepthImage;
3.Projection du LDI
Une fois le LDI cree, il ne reste plus qu a en faire une image. Pour cela, nous avons besoin d un fichier .cam, qui
representera le point de vue de projection du LDI. Ce .cam permet de definir d ou on va voir la scene,
scene qui aura ete mise dans la LDI.
Le programme va alors projeter chaque DepthPixel que contient la LDI, et grace a la projection et au parcours de Mc
Millan (voir l explication du warping), l image va etre calculee. Mais cette reprojection ne pourrait etre
faite sans ce que l on appelle le Splatting. Le principe est de reprojeter non pas un pixel, mais la surface 3D qui etait representee par un pixel dans l image de reference. Le but est en effet de supprimer les trous du a un effet de zoom sur certaines parties. Il y a aussi des trous du aux effets des arrondis (on prend l arrondi entier des coordonnees calculees par warping d un point, et donc il peut apparaitre des discontinuites). Pour l instant, le programme se contente de faire des splattings 3*3 (c est a dire qu un pixel est projete sous forme de 9 pixels, carre 3 par 3 dont le centre est la valeur entiere de la projection du pixel). On pourait penser que cela va reellement abimer l image: en fait, cela comble bien les trous, a moins d un zoom trop important, et ne pose de reels problemes qu aux bords des objets, la ou on les 8 pixels supplementaires peuvent couvrir des pixels d objets n ayant pas la meme couleur, et donc detruisant de l information.
Benoit Chevallier
Last modified: Fri Aug 27 09:45:26 MET DST 1999