2011-03-10 5 views
2

J'ai donc utilisé gnu-gsl et CImg pour implémenter certaines des techniques fondamentales de l'espace projectif pour la rectification affine et métrique. J'ai terminé le calcul d'une rectification affine mais, j'ai du mal à comprendre comment appliquer la matrice de rectification affine à l'image originale (entrée).transformations d'images

Mon processus de réflexion actuel consiste à parcourir l'image d'entrée pour chaque coordonnée de pixel. Multipliez ensuite la coordonnée de pixel originale (convertie en une coordonnée homogène) par la matrice de rectification affine pour obtenir la coordonnée de pixel de sortie.

Accédez ensuite à l'image de sortie en utilisant la coordonnée de pixel de sortie et effectuez une opération de mélange (addition) sur l'emplacement de pixel de l'image de sortie avec la couleur de pixel de l'image originale.

Cela vous semble-t-il correct? Je reçois beaucoup de valeurs vraiment bizarres après avoir multiplié la coordonnée de pixel originale par la matrice de rectification affine.

Répondre

1

Non, vos valeurs ne doivent pas être étranges. Pourquoi ne faites-vous pas un exemple simple, une petite échelle avec une petite traduction; par exemple.

x' = 1.01*x + 0.0*y + 5; 
y' = 0.0*x + 0.98*y + 10; 

Maintenant, le pixel en (10,10) doit correspondre à (15,1,19,8), n'est-ce pas?

Si vous voulez créer une belle image de sortie, vous devriez trouver la projection avant et ensuite le projet vers l'image d'entrée et interpolez-là plutôt que d'essayer de se fondre dans l'image de sortie. Sinon, vous finirez avec des lacunes dans la sortie.

Vous devez faire attention à votre terminologie ici; il me semble que vous faites des projections, parfois appelées déformation dans la communauté de l'infographie. La rectification est autre chose, mais cela dépend de ce que vous faites.

+0

J'ai compris qu'une grande partie de mon problème était liée à la normalisation des coordonnées. * soupir * quelque peu évident. Cela dit, j'ai remarqué que la plupart des coordonnées de l'image que j'ai récupérées du système sont des valeurs négatives. Ils ressemblent en fait à des coordonnées de pixels, juste négatives. Un peu étrange ... Je suppose que je pourrais comparer ce que gnu-gsl fait contre Matlab. En ce qui concerne l'application de la transformation, j'ai trouvé un code de référence qui conduit une multiplication matricielle-vectorielle (par élément). Cela semble faire l'affaire. –

+0

Il me semble que vous devriez faire un petit exemple de vérité au sol, avec des données de test connues, des paramètres connus et des résultats connus. Ensuite, les problèmes de normalisation des coordonnées, l'emplacement de l'origine, etc. peuvent être levés pendant que vous réparez votre système. – koan