Bonsoir,
C'est avec une très grande admiration que j'ai lu le long fil sur le redressement de perspective.
Il y est démontré que la géométrie projective permet de redresser des perspectives.
C'est l'un des problèmes de la photogrammétrie. C'est une fonction à 9 paramètres, disons, en gros, 3 points définis en XYZ.
Le cas du redressement de façade est assez différent, d'abord parce qu'on considère qu'une façade est plane, et ensuite, il est très rare de connaitre les dimensions, enfin en matière de mesure on admet généralement qu'il faut des observations en sur-nombre.
A la fin de ce long fil, on utilise un logiciel existant, certes gratuit, mais on ne sait pas ce qu'il fait.
En conclusion, il ne reste plus que 6 paramètres, on a donc fait une transformation plane.
Bonne soirée.
Les mathématiques ne servent à rien d'autre qu'à permettre de résoudre des problèmes.
Oui, bon, je vais essayer de rester strictement dans le domaine scientifique.
GIMP : j'ai l'impression très nette que le "redressement" n'est qu'une interpolation bilinéaire, c'est à dire qui transforme un quadrilatère en un autre quadrilatère, éventuellement rectangle. En tout cas, rien à voir avec la géométrie projective. Mais je peux me tromper.
#Entrée de coordonnées des sommets des quadrilatères quad et QUAD
a = [-11.7042, 0.6021]; b = [-9.1551, 8.2267]; c = [-2.0568, 12.192];
d = [0.,0.]
quad=[a,b,c,d]
E = [-11.7042, 0]; F = [-11.7042, 12.192]; G = [0, 12.192]
QUAD=[E,F,G,d]
#Formule de l'interpolation bilinéaire
p,q,r,s,t,u,v,w=var('p,q,r,s,t,u,v,w')
Coeffs=[p,q,r,s,t,u,v,w]
x,y=var('x,y')
M=[p*x+q*x*y+r*y+s, t*x+u*x*y+v*y+w]
#Équations pour l'interpolation bilinéaire de quad sur QUAD
intbilX=[QUAD[i][0]-M[0].subs(x=quad[i][0],y=quad[i][1])\
for i in range(4)]
intbilY=[QUAD[i][1]-M[1].subs(x=quad[i][0],y=quad[i][1])\
for i in range(4)]
#Résolution du système d'équations pour trouver les coefficients
#de l'interpolation bilinéaire de quad sur QUAD
Sol=solve(intbilX+intbilY, [p,q,r,s,t,u,v,w],solution_dict=True)[0]
#Interpolation bilinéaire de quad sur QUAD
MSol=[M[i].subs([coeff==Sol[coeff] for coeff in Coeffs]) for i in range(2)]
#Dessins
desquad=line(quad+[a])
desQUAD=line(QUAD+[E],color='red')
diag=line([a,c])
l=var('l')
parDIAG=[MSol[i].subs(x=(1-l)*a[0]+l*c[0], y=(1-l)*a[1]+l*c[1])\
for i in range(2)]
DIAG=parametric_plot(parDIAG,(l,0,1),color='red')
show(desquad+desQUAD+diag+DIAG, aspect_ratio=1)
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 7 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :