[OSM-talk-fr] Orthorectification
Philippe Verdy
verdy_p at wanadoo.fr
Jeu 18 Oct 19:25:49 UTC 2012
Le 18 octobre 2012 19:55, Balaitous <balaitous at mailoo.org> a écrit :
> 3. Recentrage en prenant pour origine le barycentre du nuage de point
> (X, Y, Z)
Là encore un problème à la source des erreurs : les photos
"orthorectifiées" ne le sont pas nécessairement en fonction de l'effet
de perspective (notamment les prises de vue en altitude basse). La
correction de cet effet ne peut pas se contenter d'utiliser un
barycentre unique, mais nécessite une dimension supplémentaire (liée
au degré de liberté supplémentaire introduit par l'altitude de
l'appareil de prise de vue). De la 3D on passe à la 4D (cette
dimension supplémentaire est la distance entre le point au sol visible
dans l'image dont on a les coordonnées 3D, et le centre optique de
l'appareil de pise de vue, mais en projection pour l'image finale en
2D, cette dimension pourra être ignorée : on travaille en coordonnées
homogènes).
De l'effet de déformation « œil de poisson » des objectifs en grand
angle, c'est plus difficile à corriger (il faudrait avoir une
description précise des propriétés géométriques de l'optique de
l'appareil). La seule façon d'en tenir compte de façon correcte est de
ne pas traiter l'image en la découpant simplement en facettes
triangulaire planes, mais en utilisant une transformation "lissante" à
base de splines (au moins quadratiques sinon cubiques), et d'augmenter
le nombre de points de référence pour réduire la surface des triangles
retenus quitte à en augmenter le nombre (les splines à calculer
contiendront donc davantage de noeuds).
Toute la difficulté est là, dans le nombre de paramètres et de degrés
de libertés pris en compte, et dans le choix des transformées pour
tenir compte des effets à corriger.
Le calcul des paramètres initiaux peut sembler compliqué, mais en fin
de compte un traitement efficace des images 2D peut avoir lieu en
utilisant une matrice de transformation simpel mais efficace et
comportant plus de dimensions que 2 ou 3.
A mon avis cette matrice carrée doit avoir au minimum 4 dimensions, ce
qui implique que pour chaque point 2D de l'image cible, il faut
d'abord calculer les 2 coordonnées dans l'image source, et calculer
les 2 autres coordonnées par une transformée *non* linéaire tenant
compte des effets à corriger, mais pour simplifier on peut
effectivement faire ce calcul des 2 autres coordonnées manquantes
uniquement sur les points de référence, pour ensuite estimer les
autres points 4D de l'image par triangulation linéaire dans cet espace
4D augmenté et non dans le seul espace 2D de l'image source.
Comme ensuite la matrice de transformation 4D est aussi linéaire, on
peut combiner l'interpolation 4D des coordonnées 2D sources et la
matrice en une transformation linéaire unique.
On obtient alors en résultat des coordonnées 4D aussi, dont il ne
reste plus qu'à ignorer les deux dernières coordonnées (représentant
la hauteur dans la direction de la verticale de chaque point de
l'image obtenue, et la distance de ce point au centre optique
transformé de la prise de vue initiale, dans une direction variable
mais passant par ce centre optique "déplacé").
Dans les faits, pour produire une image orthorectifiée, on utilise
plutôt la transformée inverse (on part des corrdonnées 2D de chaque
pixel dans l'image rectifiée, pour en déduire une position dans
l'image source). Cela se fait par l'inversion de la matrice 4x4 (si on
s'est contenté d'une triangulation plane), ou 5x5 (avec une
transformation lissante à base de "spline" quadratique), ou 6x6
(spline cubique).
Plus d'informations sur la liste de diffusion Talk-fr