# fichier cameras # Le nombre de camera: nbcam 1 # Pour chaque camera (0..nbcam-1)..... # matrice pour la camera 0 (16 nombres, rangee par rangee) # on doit avoir une matrice pour toutes les cameras matrix 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 matrix 1 1 0 0 b 0 1 0 0 0 0 1 0 0 0 0 1 # le point 2D est {x,y} # le point image 0 avec profondeur k (disparite d=1/k) est Q={x,y,1,d} # le point 3D correspondant est P=Inverse[m0].Q # P = {x,y,1,d} -> euclidien {x/d,y/d,1/d} # reprojete dans cam0 -> {x,y,1,d} -> {x,y,1} -> {x,y} euclidien ok # reprojete dans cam1 -> {x+bd,y,1,d} -> {x+bd,y,1} ok # le point 2D est {x,y} # le point image 1 avec profondeur k (disparite d=1/k) est Q={x,y,1,d} # le point 3D correspondant est P=Inverse[m1].Q # P = {x-bd,y,1,d} -> euclidien {x/d-b,y/d,1/d} # reprojete dans cam0 -> {x-bd,y,1,d} -> {x-bd,y,1} -> {x-bd,y} euclidien ok # reprojete dans cam1 -> {x,y,1,d} -> {x,y,1} -> {x,y} euclidien ok # le modele de camera est toujours le suivant: # # q = m p # p est le point 3D, q est le point image # p = {X,Y,Z,1} # q = {u,v,w,h} # le point euclidien est toujours = {u/w,v/w} # # a partir d'un point image {x,y} on peut definir le point a la profondeur k # Q = {x,y,1,1/k} # Et on peut obtenir le point 3D par # P = Inverse[m].Q # ou P = {u,v,w,h}. Le point 3D euclidien est {u/h,v/h,w/h}. # ## image de la camera 0 (pas obligatoire! une camera peut etre "virtuelle") ## On suppose si une image est de taille (xs,ys) ## alors les pixels onts des coordonnees (0..xs-1,0..ys-1) image 0 img/camera0.ppm