Home>Programmation>C++

Projet : Scanner 3D


Le principe est d'éclairer un objet par un faisceau laser orienté dans une direction différente de celle de la caméra, par exemple 45°.

Dans le cas d'une ligne verticale les points seront décalés à gauche ou à droite en fonction de la profondeur de la scène à l'endroit où le rayon rencontre l'objet.

On récupère ainsi après calculs, un nuage de point. Ce nuage est ensuite utilisé pour créer un maillage de polygone dans l'espace.

Image de référence (jouet en plastique).

Le sol est plutôt réflectif, ce qui peut-être un problème pour la détection des contours (apparition d'une ligne parasite).

 

 



1 - Extraction du contour d'après photos

Ce n'est pas tout à fait d'une extraction de contour dont il est besoin. Néanmoins les techniques publiées vont être plutôt utiles.

Divers filtres sont utilisés ; ce sont matrices de convolution sauf Dériche qui est itératif ; dans tous les cas on combine la version verticale avec celle horizontale.

Le programme est écrit en C++ sur Visual Studio, l'affichage utilise OpenGL pour les besoins de la suite.

Prewit
 -1 0 1    -1 -1 -1     -2 -1  0
 -1 0 1  +  0  0  0  =  -1  0  1
 -1 0 1     1  1  1      0  1  2
Prewit
 -2 -1  0
 -1  0  1
  0  1  2
Laplacien
  0  0  0     0 -1  0     0 -1  0 
 -1  2 -1  +  0  2  0  = -1  4 -1 
  0  0  0     0 -1  0     0 -1  0

Sobel          
 -1 0 1    -1 -2 -1    -2 -2  0
 -2 0 2  +  0  0  0  = -2  0 -2
 -1 0 1     1  2  1     0  2  2

Deriche (alpha=1.0)

Deriche (alpha=10.0)
                        



La différence entre les deux Prewit est que dans le second cas une valeur négative est transformée en 0, tandis que dans le second elle est inversée (valeur absolue). Dans le cas de Deriche on applique une fonction affine pour transformer [a..b] en [0..255].

Les convolutions sont appliquées séparément sur chaque couche (R, V, B) à part Deriche sur la couche Rouge uniquement (pour l'instant).

Dériche 10.0 fait apparaître plus de détails qu'avec 1.0, mais l'objet ressort mieux aussi, ce qui est en fait gênant.

A suivre...