Redressement image en perspective — Les-mathematiques.net The most powerful custom community solution in the world

Redressement image en perspective

Bonjour,

J'ai une image numérique représentant un carré vue en perspective, comme ci-dessous. Celui-ci est texturé, et on voudrait le redresser pour voir effectivement un carré (vue de dessus donc). Quelle est la transformation qui permet de passer d'une image à l'autre ?

Merci !
23723

Réponses

  • Mon cher Infophile
    Voici ta figure.

    file.php?8,file=23724

    La transformation qui fait passer du carré $ABCD$ au trapèze isocèle $AB'C'D$ est une transformation projective plane appelée homologie.
    Dans le cas qui t'intéresse, c'est l'homologie $f$ de pôle $O$ d'axe $AD$ transformant $B$ en $B'$.
    L'image $M' = f(M)$ d'un point $M$ est situé sur la droite $OM$ et on a l'égalité entre birapports: $(O,m,M', M) = (O,b,B',B)$.
    Inutile de te dire que cette transformation a disparu définitivement de notre enseignement depuis des décennies et ne doit plus intéresser que les photographes ou les militaires.
    Quand l'axe de l'homologie est rejeté à l'infini, l'homologie devient une homothétie mais l'homothétie elle aussi vient de disparaitre.
    Bof!
    Mais d'autre part il faut que l'on vous dise: tout va très bien, tout va très bien, etc, etc...
    Amicalement
    Pappus
    PS
    Des années 1930 aux années soixante, on a cru naïvement que l'étude de certaines transformations simples du plan en Terminales faciliterait ultérieurement l'enseignement de la théorie des groupes.
    Je plains maintenant les enseignants de cette théorie!23724
  • Ceci dit, il y a des logiciels de retouche d'images numériques qui sont gratuits et qui permettent de réaliser ta demande. J'utilise "GIMP" ; cependant, tu as intérêt à expérimenter la figure de pappus car la transformation n'est pas sans inconvénients esthétiques. L'image ci-dessous, à gauche, est une vue de la façade de la cathédrale de Spire (en bon français) que j'ai redressée de façon volontairement grotesque ; à droite la photo originale.

    Bruno23728
    23729
  • Bien sûr, car la photo est déjà elle-même la projection conique sur un plan d'une image 3-D!
    J'avais déjà raconté dans un autre fil comment l'aviation américaine s'était servie du groupe projectif pour améliorer ses techniques de bombardement (en particulier des populations civiles en Allemagne ou au Japon), (on dit maintenant traitement des objectifs, c'est plus tendance), en utilisant ce qu'on appelle les points focaux.
    Amicalement
    Pappus
  • Bonjour,

    Merci pour ce schéma très explicite !

    Mais si je comprends bien pour $M(x,y)$ donné le birapport $(O,m,M',M)$ est une quantité fonction de $x'$ et $y'$ où $M'(x,',y')$ $$g:(x',y')\mapsto (O,m,M',M)$$

    Comme $(O,b,B',B)$ est constant égal à $\alpha$, l'égalité des birapports s'écrit : $$g(x',y')=\alpha$$

    Cette équation définit une conique, et donc le point $M'$ n'est pas unique. Mais comme de plus $O,M,M'$ alignés on a : $$det(\vec{OM},\vec{OM'})=0\Leftrightarrow \begin{vmatrix}x-x_O&x'-x_O\\y-y_O&y'-y_O\end{vmatrix}=0\Leftrightarrow \beta x'+\gamma y'=0$$

    En injectant $y'$ dans $g(x',y')=\alpha$ on a une équation du second degré qu'on résout et bingo j'ai $y'$ puis $x'$ en fonction de $x$ et $y$.

    Ou bien vous avez plus simple comme méthode ? (sachant que c'est dans l'objectif d'être implémenté)

    Merci !
  • Bonjour Infophile ! Heureux de te revoir au phôrum !

    "Ou bien vous avez plus simple comme méthode ?" : est-ce une formule du type $(x,y)\mapsto(x',y')$ que tu recherches ? Si c'est le cas, il te faudra sans doute un post-traitement car l'image d'un pixel ne sera pas un pixel, mais l'homologue d'un pixel.
  • Les formules donnant $x'$ et $y'$ doivent être de la forme:
    $x' = \dfrac{ax+by+c}{a''x+b''y+c''}$, $y' = \dfrac{a'x+b'y+c'}{a''x+b''y+c''}$
    où $\begin{vmatrix} a&b&c\\a'&b'&c'\\a''&b''&c'' \end{vmatrix} \ne 0$
    Amicalement
    Pappus

    [Il ne faut pas confondre \verb+"+ qui donne $"$ avec \verb+' '+ qui donne $' '$ (l'espace n'est pas indispensable). Bruno]
  • Bonjour john_john !

    Ravi de vous croiser sur le forum également !

    "Si c'est le cas, il te faudra sans doute un post-traitement car l'image d'un pixel ne sera pas un pixel, mais l'homologue d'un pixel."

    Tout à fait j'ai réfléchis au problème, pour un centre de pixel $M(x,y)$ de l'image carrée $ABCD$ je calcule $M(x',y')=f(x,y)$ qui se retrouve quelque part dans $AB'C'D$ et je peux faire ensuite une interpolation bilinéaire avec les 4 pixels "autour" de $M'$. (Bon en réalité ce n'est pas vraiment une interpolation exacte puisque les distances de $M'$ aux centres des pixels voisins ne représente pas une "vraie" distance dans l'image en perspective, il faudrait à la rigueur que j'effectue la transformation inverse pour calculer les vraies distances).

    J'ai besoin de cette transformation car on filme des faces d'un cube vu du dessous, et je dois repérer les coordonnées d'un doigt sur celles-ci (dans le repère de la face).

    Bien cordialement
  • La construction qui suit te permettra sans doute de calculer plus facilement les cordonnées de $M$ en fonction de celles de $m$ : la droite $cm$ coupe $AB$ en $\gamma$ et la droite $dm$ coupe $AB$ en $\delta$. Alors l'image $M$ de $m$ est à l'intersection de $C\gamma$ et de $D\delta$.

    Explication : l'homologie conserve les alignements et, ici, elle fixe les points de $AB$.

    Ne t'étonne pas de trouver une expression homographique, càd des quotients de formes affines (ou alors, les expressions sont linéaires, mais par rapport aux coordonnées homogènes). En effet, cette homologie n'est pas une transformation affine !
    file.php?8,file=23738

    Cordialement, j__j23738
  • Bonjour,

    j'ai parcouru le fil en diagonale, le fait est que je cherche une activité à mener avec des élèves de seconde avec pour base et objectif pédagogique de travailler au corps les fonctions homographiques, qui pour moi n'est qu'une torture de calcul littéral que je leur inflige.

    N'ayant que peu de recul en la matière peut-être pourriez m'orienter vers un keutru à creuser.
    -> Ils ont des portables pour prendre des photos, on peut sans doute bidouiller avec geogebra ensuite.
    (L'illustration mentionnée par Pappus ne me botte pas trop, bien qu'elle est un intérêt historique, voire culturel et philosophique, puisque des fois y a pas de quoi être fier des applications qu'on peut faire de la science, aussi cela peut valoir le coup de faire réfléchir à cela aussi).

    pardon pour le squattage de fil, merci pour vos idées.

    S
  • file.php?8,file=23743

    @samok : tu peux présenter l'homologie à partir de cette figure en 2D censée traduire la 3D ; on désire projeter sur $P$ à partir du plan $p$ avec $S$ comme pôle de projection. Si on connaît un couple $a,A$ de points homologues, alors on peut construire l'image $M$ de tout point $m$. Pour les besoins de la figure, on s'imagine les points $a,m $dans le plan $p$ et $A,M$ dans $P$ ; le point $S$ est vu comme extérieur aux deux plans et enfin $n$ est sur l'arête du dièdre.23743
  • On peut voir la figure de j_j comme plongée dans l'espace euclidien ambiant.
    L'application $f: m \mapsto M$ définit sur un certain ouvert $U$ du plan $p$ un difféomorphisme:
    $f: U \longmapsto f(U) = V; m \mapsto M$ sur un ouvert $V$ du plan $P$
    1° Quels sont ces ouverts $U$ et $V$?
    2° Montrer qu'il existe dans le plan $p$ deux points $\omega_1$ et $\omega_2$, appelés points focaux, pour lesquels l'application linéaire tangente $Tf_{\omega_1} \in \mathcal L(p, P)$, (resp.$Tf_{\omega_2}\in \mathcal L(p, P)$) est une similitude?
    Amicalement
    Pappus
  • file.php?8,file=23750

    Voilà déjà une figure débarrassée des deux plans servant de prétexte à la construction. En outre, les points $m$ décrivant la droite $\delta$ sont ceux pour lesquels la construction échoue (image à l'infini) et les points $M'$ sont ceux pour lesquels la construction inverse échoue (antécédent à l'infini).

    Donc, dans cette carte affine, l'homologie envoie le complémentaire de la première droite sur le complémentaire de la seconde.23750
  • Les points focaux de Pappus ?

    Pour fixer les idées, faisons en sorte que la droite~$\Delta$ soit l'axe~$Ox$ et que le point~$S$ soit sur~$Oy$ ; la
    transformation est alors de la forme
    \[(x,\,y)\mapsto\dfrac{h}{(\lambda-1)y+h}\cdot(x,\,\lambda y).\]
    Cela confirme que les droites exceptionnelles~$\delta$ et~$\delta'$ sont horizontales (n'importe comment, elles n'ont pas le
    droit de rencontrer~$Ox$). Puisque $\partial y'/\partial x$ est toujours nul, la jacobienne est une similitude ssi $\partial
    x'/\partial y=0$ et $\partial y'/\partial y=\pm\partial x'/\partial x$. Cela donne en général deux points {\em focaux} : ils ont
    pour coordonnées $(0,\,h)$, càd~$S$, et $(0,\,\dfrac{1+\lambda}{1-\lambda}\cdot h)$, sauf horreur ou emission. Le cas $\lambda=1$ est sans
    intérêt ; le cas $\lambda=-1$ correspond au cas d'une homologie involutive.
    Reste à interpréter la configuration de ces deux points ; cela ne doit pas être trop dur. Au doigt mouillé : ils sont harmoniquement conjugués par rapport aux droites exceptionnelles.

    @infophile : tu peux utiliser ces formules pour tes calculs, en te ramenant à $AB=Ox$ mais le point $O$ de Pappus s'appelle $S$ chez moi. Il te reste à chercher $h$ et $\lambda$ pour que $C$ et $C'$ soient homologues.
  • Mon cher j_j
    Il y a le calcul en cartes que tu as fait, OK!
    Mais après il faut revenir dans l'espace et placer les points focaux dans les plans $p$ et $P$ en relation avec le centre de perspective $S$. (Je n'arrive pas à dire le perspecteur!)

    Au voisinage d'un point focal, une application projective a pour approximation affine une similitude, ce qui dans le cas de photos aériennes représentait un gain de temps considérable dans leur interprétation et leur traitement dans les années 40. Aujourd'hui, ce sont des ordinateurs qui font automatiquement ce travail.

    Il est curieux de constater que ce sont sans doute des questions militaires qui ont conduit à s'intéresser à ces points!
    Si on considère une transformation projective du plan euclidien, différente d'une similitude, elle a en général deux points focaux $F$ et $F'$.
    Il me semble avoir dans un fil antérieur déterminé les points focaux d'une transformation projective ayant trois points fixes distincts. De ces deux points focaux, il y en a un pour lequel l'application linéaire tangente est une similitude directe et il est appelé en conséquence point focal direct et pour l'autre, l'application linéaire tangente est indirecte et c'est le point focal indirect.
    Je ne veux pas dire de bêtises mais je crois que la connaissance des points focaux et de leurs images détermine entièrement une transformation projective.
    Toutes ces configurations passionnantes sont désormais off limits ad vitam aeternam!
    Amicalement
    Pappus
  • Bonjour Pappus,
    d'ailleurs, j'ai déterminé par le calcul les points focaux dans le cadre de l'homologie d'infophile et non pas dans celui de mon explication pour samok ; je ne pense pas que cela change grand chose d'ailleurs. J'y retourne !

    Amicalement, j__j
  • (merci j_j, je ne sais pas encore quoi en faire, mais merci)
  • file.php?8,file=23756

    La figure est faite dans le plan $\Pi$ passant par le centre de perspective $S$ et perpendiculaire à l'intersection $L$ des plans $p$ et $p'$.
    (J'ai changé la notation du plan image!)
    Le point $\Omega$ est donc l'intersection $\Pi \cap L$.
    Soient $O$ et $O'$ les projections orthogonales de $S$ sur les plans $p$ et $p'$.
    J'ai tracé en rouge les bissectrices intérieures et extérieures de l'angle $\widehat{OSO'}$ et noté leurs quatre intersections avec les plans $p$ et $p'$.
    Alors $F_+$ et $F_-$ sont les points focaux de la projection $p \mapsto p'$ et $F'_+$ et $F'_-$ sont ceux de la projection inverse $p'\mapsto p$
    Amicalement
    Pappus
    PS
    Je pars aujourd'hui en télègue sur les grands chemins, les explications suivront donc dès que possible à moins que quelqu'un veuille bien s'y coller!
    C'est le moment ou jamais de faire une belle épure avec $L$ pour ligne de terre!
    Elle aurait pu faire autrefois l'objet d'une épreuve d'écrit à l'X ou à l'ENS.
    Et si on médite un peu sur cette figure formée simplement de banales bissectrices, on s'aperçoit qu'elle est devenue inaccessible aux meilleurs de nos agrégatifs!
    Sic transit gloria mundi!23756
  • En fait, pas besoin de se fatiguer car j'en avais déjà parlé il y a trois ans dans ce fil sur les Points Focaux
    Amicalement
    Pappus
  • On rapporte qu'en 1492, quand le dernier sultan fuit Grenade alors que les chrétiens s'emparaient de la ville, il se retourna pour jeter un dernier regard à l'Alhambra et pleura. Sa mère eût pour lui ses mots impitoyables : "Ne pleure pas comme une femme sur ce que tu n'as su défendre comme un homme."

    source : La symétrie ou les maths au clair de lune Marcus de Sautoy (traduit de l'anglais par R.Clarinard)

    Dans l'exposition "Les mathématiques, un dépaysement soudain", il y a un mathématicien dont je ne me souviens plus bien du nom, peut-être Bourguignon (un DL à l'ordre 1 il a une brosse dure sur la tête), énumère les genres de matheux existants. Il y a un genre que j'aime bien : "les passeurs de mathématiques".
    C'est dans cette optique que j'espère une idée d'activité, c'est joli tous ces gros mots mais ce serait mieux d'avoir un keutru qui donne du sens autour de ces tructures pour avoir moins la chaire de poule qui a perdu ses oeufs d'or sur les murmures des lamentations.

    Là où j'en suis :
    - prendre une photo d'un parallélogramme
    -> est-ce un carré ?
    - prendre une photo d'un parallélépipède
    -> est-ce un cube ?

    S
  • Bonjour Samok.

    Des arcs de cercles ?

    Tout dépend de ta focale, non ?

    amicalement,

    e.v.
    Personne n'a raison contre un enfant qui pleure.


  • Bonjour,

    J'ai utiliser les deux méthodes mentionnées par john_john pour déterminer les coordonnées du point $M(x',y')$ image de $m(x,y)$. La première suggérée fonctionne mais il est difficile d'écrire l'expression sous forme homographique. La deuxième en revanche m'intéresse davantage mais ne fonctionne pas chez moi... l'expression analytique de la transformation est-elle bonne ? (J'imagine que l'erreur vient de moi mais sait-on jamais)

    1) Par la conservation de l'alignement

    J'ai reproduit sous geogebra la construction, qui semble bien fonctionner.

    file.php?8,file=23768

    Simplement en déterminant les intersections des droites on trouve que :

    $$x_I=\frac{x_Fy-y_Fx}{y-y_F}\quad x_J=\frac{x_Ey-y_Ex}{y-y_E}$$

    puis que : $$x'=\frac{Lx_J}{x_J+L-x_I}\quad y'=\frac{L(x'-x_I)}{L-x_I}$$

    Et il se trouve que ça donne le bon résultat pour l'image de $m(2.7,2.04)$ qui est $M(2.39,2.09)$

    2) Par la détermination de $h$ et $\lambda$ dans l'expression analytique

    Dans le repère toujours d'axe $(O_x)=(AB)$ mais d'axe $(O_y)$ passant par $S$, on est bien d'accord que $C(L-x_S,L)$ et $E(x_E-x_S,y_E)$ ?

    Comme la transformation $f$ envoie $C$ sur $E$ on a un système de 2 équations en $h$ et $\lambda$ que l'on résout. Maple fait cela très bien, on obtient l'expression de $h$ et $\lambda$. Enfin l'expression analytique de $f$ dans le repère initial est bien $g:(x,y)\mapsto f(x+x_S,y)$ ?

    Car en essayant $g(m)$ je n'obtiens pas du tout la même valeur à savoir $M(2.39,2.09)$.

    Je joins ma feuille Maple, j'ai pu faire une erreur d'étourderie aussi ! Je vérifie demain, il commence à se faire tard.

    23768
  • Bonjour Infophile,
    ma construction et mon expression algébrique marchent dans le cas d'un carré déformé en trapèze isocèle : dans ce cas la droite $AB$ est laissée fixe point par point par l'homologie et c'est ce que j'ai supposé car ta figure initiale ainsi que la réponse initiale de Pappus le suggéraient. En matière de photo, c'est ce qui se produit dans le cas d'une bascule simple (plan objet et plan image parallèles). Sinon, construction et calculs se compliquent un peu (tout en restant dans le cadre de l'algèbre linéaire)

    Le mieux serait que tu précises les coordonnées de tous ces points !

    Bien cordialement, j__j
  • Je vois l'erreur, j'ai envoyé $C$ sur $E$ au lieu d'envoyer sur $F$... je refais les calculs.

    OK cela fonctionne. J'arrive donc bien déterminer avec cette méthode la transformation qui envoie le carré sur le trapèze, sous forme homographique. Et j'ai déterminé la transformation inverse également.

    Je vais implémenter tout ça et je reviens dans quelques temps vous montrer le résultat.

    Merci pour ce petit cours de géométrie, on n'a jamais eu l'occasion d'étudier ces notions en cours.

    Bien cordialement !
  • Bonjour,

    Cela fonctionne bien sur une image. En traçant à "main levée" le trapèze et les lignes de fuites je passe de :

    23790
    23791
  • De rien, Infophile, et heureux de t'avoir été utile !

    Bien cordialement, j__j
  • Bonjour,

    A tout hasard, auriez-vous une idée pour supprimer l'effet "fisheye" sans connaître les paramètres de la caméra ? Je ne pense pas que cela soit possible, car la focale et les paramètres de distorsions dus à la lentille s'évaluent en général en calibrant la caméra. Or nous n'avons pas accès à la caméra qui se trouve dans une boite fermée :

    23794
    23795
  • Rebonjour,

    En attendant de trouver une réponse "physique" au problème, j'ai bricolé un maillage en approchant les bords arrondis par des arcs de cercles (en rouge) de centre $c_1$ et $c_2$ et de rayon $r_1$ et $r_2$. Puis j'interpole linéairement ces deux cercles en considérant le cercle (bleu) de centre $c_{\alpha}=(1-\alpha)c_1+\alpha c_2$ et de rayon $r_{\alpha}=(1-\alpha)r_1+\alpha r_2$. Et je considère l'intersection $K$ de ce cercle avec la droite $d_{\theta}$ (en vert) faisant un angle $\theta$ avec $(AD)$

    file.php?8,file=23834

    En faisant varier les paramètres $\alpha$ et $\theta$ avec un pas constant, j'obtiens le maillage suivant :

    file.php?8,file=23835

    Et je suis alors en mesure d'une pierre deux coups de "redresser l'image" en un carré. Mais il est clair qu'on dénature l'image. Alors que la transformation perspective respectait les positions exactes. Malheureusement sans pré-traitement du fisheye je ne peux pas l'utiliser...

    Encore merci à vous !23834
    23835
  • Bonjour,

    Comme je le disais ce maillage redresse le trapèze en un carré mais l'image est un peu déformée car la discrétisation sur [AD] et [BC] (voir figure geogebra du post précédent) n'est pas uniforme en réalité. Donc l'idée de faire varier le rayon du cercle bleu linéairement n'est pas assez satisfaisante. Je cherche donc un autre modèle non linéaire, pour cela j'ai placé une grille (espacée régulièrement) sur le cube et j'ai observé l'image déformée :

    23885
  • Je viens sur ce vieux fil à l'occasion d'un autre fil "Redresser une image".

    Il y a une erreur dans le message de john_john plus haut : il fait comme si l'homographie du plan préservait la droite $(AB)$ point par point, ce qui n'est bien sûr pas le cas en général. Par exemple le point d'intersection de $(AB)$ avec $(cd)$ (avec les notations de la figure) est envoyé à l'infini. La droite $(AB)$ est préservée point par point si et seulement si $(CD)$ est parallèle à $(cd)$.
  • Le redressement de façade partir d'une photo est que technique que je connais.
    A mon avis pour éviter des discussions stériles, le mieux est de traiter un exemple.
    Envoyez une photo de facade, et chacun produira le résultat qu'il obtient.
    Il est vrai que les problèmes reatifs aux aberrations de l'objectif sont un peu hors-sujet.
  • Bonjour.

    Dans une intervention précédente, j'ai mis une photo de facade originale à droite et redressée à gauche. Tu peux les récupérer d'un simple clic.

    Bruno
  • Bonjour,
    La construction proposée par John_john, un peu plus haut dans le fil (carré ABCD - trapèze ABcd), par laquelle M est l'image de m, s'applique-t-elle aussi à C image de c et à D image de d ? cela ne me parait pas évident.
    Amicalement
    Louis
  • Comme je l'ai déjà dit, cette construction est fausse.
  • Voilà,
    Volontairement je ne l'ai pas récadrée.
    On pourrait rajouter une correction du rapport hauteur sur largeur; Mais comme je n'ai pas les informations nécessaires, je ne peux que donner l'image brute.
    31045
  • Comme Bruno, j'ai essayé dans GIMP :

    et dans GIMP, on voit même la matrice de l'homographie :

    Le (0,0,1) dans la dernière colonne vient de ce que je n'ai pas bougé l'origine du repère (le coin supérieur gauche).

    On peut aussi constater que si on a un redressement à peu près correct de la façade, les choses ne vont bien sûr pas comme il faut pour les objets qui ne sont pas dans le plan de la façade.31046
    31047
  • Bon, je sais pas trop quoi répondre. La matrice indiquée est la matrice d'une transformation affine.
    D'ailleurs, je crois avoir lu quelque-part que cette transformation (la perspective) n'était pas linéaire, donc, je comprends pas comment on peut écrire sa matrice de transformation.
    Les calculs et formules nécessaires datent de trop longtemps pour ma mémoire et il faudrait que je m'y replonge.
    Est-ce nécessaire, puisqu'apparemment cette transformation semble satisfaie tout le monde ?
  • Non, ce n'est pas une transformation affine. C'est la matrice d'une homographie du plan projectif. Comment ça marche ? Les points du plan projectif ont 3 coordonnées homogènes $(x,y,z)$ (avec $x,y,z$ pas tous les trois nuls) ; "homogènes" veut dire définies à un facteur scalaire près, autrement dit $(x,y,z)$ et $(\lambda x,\lambda y,\lambda z)$ ($\lambda\neq 0$) sont des systèmes de coordonnées d'un même point.
    Les points du plan "ordinaire" de coordonnées $(x,y)$ sont les points du plan projectif de coordonnées homogènes $(x,y,1)$, ou $(\lambda x,\lambda y,\lambda)$, autrement dit tous les points de troisième coordonnée homogènes non nulle. Les autres points, de coordonnées homogènes $(x,y,0)$, sont les points à l'infini (dans la direction du vecteur $(x,y)$).

    Soit $M= (m_{i,j})$ une matrice $3\times 3$ inversible à coeffcients réels. Elle définit une transformation du plan projectif : $\begin{pmatrix} x\\ y\\ z\end{pmatrix} \mapsto M\,\begin{pmatrix} x\\ y\\ z\end{pmatrix}$, qu'on appelle une homographie. La matrice d'une homographie n'est définie qu'à un facteur scalaire près.
    Avec les coordonnées "ordinaires", une homographie s'écrit
    $$ (x,y)\mapsto \left(\dfrac{m_{1,1}x+m_{1,2} y+m_{1,3}}{m_{3,1}x+m_{3,2} y+m_{3,3}},\,\dfrac{m_{2,1}x+m_{2,2} y+m_{2,3}}{m_{3,1}x+m_{3,2} y+m_{3,3}}\right)\;.$$
    Parmi les homographies, il y a les transformations affines (qu'on peut caractériser par le fait qu'elles envoient points à l'infini sur point à l'infini). Mais il y en a beaucoup d'autres, heureusement.

    C'est une présentation assez sommaire. Mais si tu t'intéresses vraiment au redressement de perspective, je ne peux que t'encourager à étudier la géométrie projective. C'est vraiment l'outil mathématique adapté.
  • Bon, si tu le dis ...
    En matière de sécurité, j'en rajoute une couche. J'ai essayé (et réussi) à charger le logiciel indiqué. D'abord, c'était énorme, puis ça a planté FireFox, et apparemment j'ai récupéré des choses indésirables.
    Je te propose une photo en perspective que tu te feras certainement un plaisir de redresser.
    C'est une image assez ancienne, mais elle a l'avantage d'avoir des fenêtre de dimensions égales, ce qui permet d'avoir un contrôle facile et visuel du résultat

    PS je crois que j'ai vraiment chopé une cochonnerie. Je ne vois même plus l'image que j'ai insérée.31053
    31054
  • Parlons de mathématiques, veux-tu ? On est ici sur un forum de mathématiques après tout.
    Tu as une transformation qui redresse une photo. Tu n'expliques pas comment tu procèdes, secret indutriel sans doute. Mais peu importe.
    Est-ce que ta transformation préserve l'alignement ?
    - Si non, c'est un bidouillage approximatif. Je ne te ferai pas l'injure de penser ça.
    - Si oui, c'est qu'il s'agit d'une homographie, en vertu du théorème fondamental de la géométrie projective qui affirme qu'une bijection du plan projectif réel sur lui-même qui préserve l'alignement est une homographie, donnée par une formule
    $$ (x,y)\mapsto \left(\dfrac{m_{1,1}x+m_{1,2} y+m_{1,3}}{m_{3,1}x+m_{3,2} y+m_{3,3}},\,\dfrac{m_{2,1}x+m_{2,2} y+m_{2,3}}{m_{3,1}x+m_{3,2} y+m_{3,3}}\right)\;,$$
    où la matrice $M=(m_{i,j})$ est déterminée à un facteur scalaire près par les images de 4 points choisis sur la photo de départ.
    Tu ferais donc des homographies sans le savoir. A ta place, j'essaierai d'apprendre de la géométrie projective. Mais je ne suis pas à ta place.
  • @dlzlogic.
    La matrice indiquée est la matrice d'une transformation affine.

    Une matrice ne représente pas que des applications linéaires ou affines, mais ici on n'en est pas loin. Ce qui semble t'échapper, c'est que la matrice indiquée par Ga? est carrée $3 \times 3$, si elle représente une application linéaire, c'est une application de $\R^3$ dans lui-même (ou d'un espace de dimension trois dans un autre via des bases). Mais dans le cas dont nous parlons, il s'agit d'une \og\ transformation \fg\ du plan dans lui-même.

    C'est ce que les géomètres appellent une \og\ transformation homographique \fg\ d'un plan, un peu plus compliqué que le plan affine. La caractérisation la plus simple dans le cas du plan réel c'est celle donnée par Ga? : une application bijective qui conserve l'alignement.

    Bruno
  • Bonjour,
    @ Bruno,
    Je suis sûr que tu as raison. Mais je dois pas être doué, quand j'ai établi mes formules et méthodes il y a une bonne dizaine d'années, 3 points ne suffisaient pas à faire un redressement de façade. Par contre 3 points dont nécessaires à une transformation affine.
    Comme l'initiateur de ce sujet a besoin de précision je lui conseille la prudence.
    Cordialement.
  • mes formules
    Secret ? :D
    Les formules pour écrire une homographie du plan étant donnés 4 points et leurs images ne posent pas de problème et ne relèvent pas vraiment du secret-défense.
    3 points ne suffisaient pas à faire un redressement de façade. Par contre 3 points dont nécessaires à une transformation affine.
    Peut-être devrais-tu envisager de t'équiper en lunettes. Je l'ai écrit plusieurs fois, et je me cite :
    "la matrice $ M=(m_{i,j})$ est déterminée à un facteur scalaire près par les images de 4 points choisis sur la photo de départ."
    Là, tu as vu, cette fois ?
  • Soyons explicite. On veut la matrice (bien définie à un facteur scalaire près) de l'homographie du plan qui envoie le point $M_i$ de coordonnées $(x_i,y_i)$ sur le point $M'_i$ de coordonnées $( x'_i,y'_i)$ pour $i=1,\ldots,{\red 4}$. On suppose qu'il n'y a pas trois points alignés parmi les $M_i$ (resp. $M'_i$).
    Il existe un unique triplet $(\lambda_1,\lambda_2,\lambda_3)$ tel que
    $$\begin{pmatrix}x_4\\ y_4\\ 1\end{pmatrix}=\sum_{i=1}^3 \lambda_i \,\begin{pmatrix}x_i\\y_i\\1\end{pmatrix}\;.$$
    Les $\lambda_i$ sont les coordonnées barycentriques de $M_4$ dans le repère affine $(M_1,M_2,M_3)$ . Aucun des $\lambda_i$ n'est nul, et la matrice
    $$A=\begin{pmatrix} \lambda_1x_1&\lambda_2x_2&\lambda_3x_3\\ \lambda_1y_1&\lambda_2y_2&\lambda_3y_3\\ \lambda_1&\lambda_2&\lambda_3\end{pmatrix}$$
    est inversible.
    On fabrique de la même manière une matrice inversible $A'$ de taille 3 à partir des points $M'_i$. Alors la matrice de l'homographie est $A'\,A^{-1}$.
  • Bonjour Ga,
    D'abord un préalable, je suis correct dans mes messages, alors il me semble que tu peux l'être aussi.
    La méthode que j'ai employée fonctionne de la façon suivante : Etant donné une image en perspective, on recherche les points de fuite. Le point de fuite suivant l'horizontale et le point de fuite suivant la verticale. C'est pour cette raison que les notions de verticale et d'horizontale sont nédessaires. On peut en faire abstraction si on peut déterminer 2 directions perpendiculaires. C'est la cas pour notre ami iamtit, puisque sa base de référence est un rectangle. Ensuite, ce n'est que l'application de Thalès, avec une petite translation.

    Dans la matrice donnée par l'outil utilisé, la troisième colonne (0;0;1), sauf erreur, ne sert qu'à la translation, et la troisième ligne contient des valeurs TX, TY.
    Il s'agit typiquement d'une transformation affine qui est la composition d'une rotation, d'une homothétie, d'une translation et d'une affinité; C'est la transformation généralement utilisée pour faire du calage de plan (au sens de cartes géographiques)..

    Il est sans-doute possible de réaliser la transformation à l'aide de 4 points homologues quelconques, mais je ne sais pas le faire.

    As-tu redressé l'image que je t'ai proposée ?
  • Ensuite, ce n'est que l'application de Thalès,
    Je serais curieux de voir ça.

    Il n'est pire sourd que celui qui ne veut pas entendre. Malgré les explication de Bruno et moi-même, tu t'obstines avec les tranformations affines. Je crois que toute explication supplémentaire serait inutile.
  • Bon, dizlogic est tout triste que personne ne se soit occupé de son image (d'assez mauvaise qualité au demeurant).

    Bon allez, un petit coup d'homographie

    Son image est au format 320px x 200px. Je repère dessus quatre points (des coins de fenêtres) qui ont vocation à être les sommets d'un rectangle sur la façade.

    Les coordonnées (en px) de ces quatre points sur la photo sont (de gauche à droite et de haut en bas) :
    [59.5, 19.5], [280, 40], [57, 127], [298.5, 118]
    Je veux redresser ces quatre points en les sommets d'un rectangle (de proportions un peu arbitraires, faute d'informations précises) :
    [57, 20], [300, 20], [57, 127], [300, 127]
    Je calcule grâce à Sage la matrice de l'homographie qui fait ça. C'est la matrice 3x3 que vous voyez en bleu ci-dessous. Puis je calcule grâce à cette matrice les coordonnées des coins de l'image redressée :

    outil perspective pour amener à la souris les coins de l'image aux positions que j'ai calculées : voici le résultat :

    Et dans la fenêtre de l'outil perspective, je vois s'afficher la matrice de l'homographie :

    C'est bien celle que j'ai calculée, aux tremblements de souris près.31795
    31794
    31796
    31793
  • Bonjour,
    Mon image, c'est celle qui m'a servi de fil conducteur. Elle m'a été données pas un architecte il y a une quinziane d'années, à l'époque où j'ai fait cet applicatif..
    Mais pourquoi n'as tu pas utilisé le logiciel que m'a tant vanté ?
    Mais imaginons par exemple que tu ne puisse pas identifier 4 points qui soient les sommet d'un rectangle.
    Mais cessons là, pour l'instant je m'amuse beaucoup avec le calcul de points reliés par des distance variables Y'avait assez longtemps que j'avais pas eu l'occasion de faire un truc un peu intéressant.
    Pour info, il est très rare que j'utilise des logiciels que j'ai pas écrits. Même mon éditeur de texte. Au moins je sais ce que je fais.
  • dlzlogic : a écrit:
    Pour info, il est très rare que j'utilise des logiciels que j'ai pas écrits. Même mon éditeur de texte. Au moins je sais ce que je fais.

    Tu trouves toujours le moyen de glisser des remarques hors de propos désagréables en suggérant que nous ne le savons pas ! Nous savons nous aussi ce que nous faisons et plus que tu ne le penses.

    Je pense que Ga ? a autant assez que moi de cette palinodie, il a d'ailleurs été beaucoup plus patient que je le suis.

    Je ferme ce sujet.

    Bruno
Cette discussion a été fermée.
Success message!