3 pièce(s) jointe(s)
Transformation projective dans une mauvaise direction
Bonjour,
J'essaie de réaliser "une orthorectification" en utilisant les quatres lasers sur l'image. Connaissant la distance de prise de vue je peux avoir les laser de l'image orthorectifées.
A partir des lasers, j'utilise les fonction GetPerspectiveTransform et WarpPerspective de OpenCV qui sont idéal pour ce problème.
Néammoins j'ai l'impression que la rectification se fait dans une mauvaise direction (images ci-jointes) la transformation semble être verticale au lieu d'horizontale .
Voici les partie du code concerné:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
def rectif(In, cadreIn, cadreOut):
Out = cv.CloneImage(In); cv.Zero(Out)
mmat = cv.CreateMat(3,3, cv.CV_32FC1)
print ("mmat= %s"%repr(mmat))
cv.GetPerspectiveTransform(cadreIn , cadreOut, mmat)
cv.WarpPerspective(In, Out, mmat)#, flags=cv.CV_WARP_INVERSE_MAP )
return Out
# Classe
...
##methode de classe concernee
def launch_rectif(self):
global current_image
#Extraction des coordonnees laser array (4,2)
self.coord_laser = extraction_laser(current_image)
#conversion tuple
coord_laser = tuple((tuple(self.coord_laser[0]),\
tuple(self.coord_laser[1]),\
tuple(self.coord_laser[2]),\
tuple(self.coord_laser[3])))
#Calcul des coordonnees laser dans le cas orthogonal
height_laser_pix = 0.5*74.5/self.taille_pixel[0]
width_laser_pix = 0.5*74.5/self.taille_pixel[1]
image_center = np.array([np.sum(self.coord_laser[:,0])/4.0,np.sum(self.coord_laser[:,1])/4.0])
self.new_coord_laser = tuple(((image_center[0]-height_laser_pix, image_center[1]-width_laser_pix),\
(image_center[0]-height_laser_pix, image_center[1]+width_laser_pix),\
(image_center[0]+height_laser_pix, image_center[1]+width_laser_pix),\
(image_center[0]+height_laser_pix, image_center[1]-width_laser_pix)))
print(coord_laser)
print(self.new_coord_laser)
print(image_center)
#rectification
self.current_image = rectif(current_image, coord_laser, self.new_coord_laser) |
la fonction extraction_laser n'apparaît car très longue mais j'ai bien vérifier les valeurs renvoiés qui sont justes.
Merci d'avance.
2 pièce(s) jointe(s)
conversion (i,j)->(-j,i)=(x,y)
J'ai l'impression d'avoir cerné le problème:
Le cadre demandé par PerspectiveTransforme doit être dans un système (x,y) correspondant au coordonnées image hors je donnais les ordonnées (i,j) de la matrice de l'image.
Logiquement il faudrait faire la conversion suivante (x,y)=(j,-i) ou encore pour rester avec des valeurs d'indice positifs (x,y) = (j, height_image-i).
Pour le moment j'ai effectué la conversion suivante (x,y)=(j,i) (voir conv(j,i)).
On voit bien maintenant un carré avec les laser mais l'image n'est pas dans bien orientée.
J'ai aussi effectué par la suite la conversion (x,y) = (j, height_image-i) (voir conv(_j,i)).
Avez-vous une idée pour avoir la même image mais à l'endroit.