Projection sphère sur plan (calibrage distorsion caméra)

Olympiades mathématiques, énigmes et défis
Vividoudou
Membre Naturel
Messages: 11
Enregistré le: 07 Oct 2006, 11:43

projection sphère sur plan (calibrage distorsion caméra)

par Vividoudou » 02 Nov 2006, 12:17

Bonjour.

Je souhaite calibrer une camera introduisant une forte distorsion dans l'image.

A partir d'un échiquier parfaitement régulier, j'ai pu obtenir la position précise de chaque intersection des cases dans mon image, c'est à dire leurs position X et Y dans le plan image.
En supposant que la deformation de la distortion est sphèrique, les points de l'échiquier dans l'image correspondent à la projection de mon échiquier plan (objet) sur la surface d'une sphère (image).

Pour pouvoir corriger la distortion j'ai besoin de connaitre les paramêtres de cette sphére (rayon et centre), les seules données étant la mesure des positions des quelques points dans l'image et le fait que la grille doit être parfaitement régulière.

Merci de vôtre aide.



Vividoudou
Membre Naturel
Messages: 11
Enregistré le: 07 Oct 2006, 11:43

par Vividoudou » 03 Nov 2006, 18:42

Salut !

Merci de bien vouloir m'aidé.

Je sais ce n'est pas évident à expliquer. Si je pouvais mettre un pièce joints, cela me faciliterait la vie (une image valant mieux que des grands discourts...), mais je n'ai pas trouvé comment faire.


merci

mathador
Membre Rationnel
Messages: 718
Enregistré le: 05 Mai 2005, 11:00

par mathador » 03 Nov 2006, 20:27

Je pense que notre ami se place dans ce cas ci :


L'espace est rapporté à R^3 tel que le plan P de l'échiquier soit d'équation cartésienne z=0.
On considère la sphère S de rayon 1 et de centre C(0;0;1) .
On note C' le point de coordonnées (0;0;2)
A chaque point M de P, on associe l'unique point d'intersection de S avec ]C'M]; c'est, disons, l'application Quidam qui à M associe donc Quidam(M) :we:

Si je ne dis pas de bêtise, c'est une construction de la sphère de Riemann (avec C' pour image de l'infini ...)

En relisant le problème posé, je remarque que notre camarade prend en fait un rayon R>0, C(0;0;R) et C'(0;0;2R), ce qui revient au même (au choix du repère près !)

Quidam
Membre Complexe
Messages: 3401
Enregistré le: 03 Fév 2006, 17:25

par Quidam » 04 Nov 2006, 00:44

mathador a écrit:A chaque point M de P, on associe l'unique point d'intersection de S avec ]C'M]; c'est, disons, l'application Quidam qui à M associe donc Quidam(M) :we:


Cher Mathador, cela ne me satisfait guère !

J'ai une image avec des pixels positionnés grâce à deux indices : à tort ou à raison je la considère comme un plan.
J'ai un échiquier avec des points repérés par x et y. L'échiquier est plan.

On me parle d'une transformation "sphérique" qui en fait associe les coordonnées x,y des points du plan de l'échiquier avec les coordonnées i,j des pixels du plan de mon image. Quelque complexe que soit cette transformation, il s'agit bien d'une transformation d'un plan sur un autre plan !
Que vient faire Quidam là-dedans ? Quidam, c'est une misérable transformation qui associe à chaque point d'un plan, les points d'une sphère et Ginette ! Autant que je sache, c'est une inversion dans l'espace.
Quel rapport y a-t-il entre cette transformation de plan à plan avec une sphère, fut-ce par le truchement d'une magique fonction Quidam ?

J'ai un vague vernis optique (je n'ai jamais fait réellement d'optique !). Je sais que l'on parle d'une distortion sphérique des lentilles, laquelle a pour effet de former une image non pas sur un plan, comme une lentille bien élevée devrait faire, mais sur une sphère. Et le "capteur", en principe plan (des photorécepteurs, ou une pellicule photo), est censé ne pas être "trop éloigné" de la "sphère image". C'est tout ce que je sais. Je n'ai donc qu'une très vague idée du genre de déformation que cela induit sur l'image, et j'ai bien l'impression qu'il ne s'agit pas de l'inversion que tu décris.

En tous cas, ce n'est pas avec des généralités de ce style que je comprendrais davantage !

Quidam va servir, peut-être ! Mais comment ?

Vividoudou
Membre Naturel
Messages: 11
Enregistré le: 07 Oct 2006, 11:43

par Vividoudou » 04 Nov 2006, 16:02

Voici l'image, j'epsère que ca va marcher...
[img]K:\calibrage.jpg[/img]

olivthill
Membre Relatif
Messages: 349
Enregistré le: 21 Avr 2006, 18:17

par olivthill » 06 Nov 2006, 13:07

J'ai fait un progamme du même genre.
Voir http://www.codeguru.com/forum/showthread.php?t=347379
Il faut surement l'adapter un peu, mais cela peut peut-être aider à démarrer.

Quidam
Membre Complexe
Messages: 3401
Enregistré le: 03 Fév 2006, 17:25

par Quidam » 06 Nov 2006, 14:40

olivthill a écrit:J'ai fait un progamme du même genre.
Voir http://www.codeguru.com/forum/showthread.php?t=347379
Il faut surement l'adapter un peu, mais cela peut peut-être aider à démarrer.

J'ai regardé le site en diagonale (sans jeu de mots...). Il me semble que Orf a besoin d'une transformation linéaire, et que c'est exactement cela que tu lui fournis. Les déformations dues à la perspective ne sont pas linéaires, mais au moins, une droite est représentée par une droite. Et je pense que Orf se satisfait d'une transformation linéaire.
La difficulté n'est pas, dans le cas de Vividoudou, d'écrire le code, mais de modéliser correctement la déformation, qui, à n'en pas douter, n'est certainement pas linéaire ! Un rectangle sera certainement représenté par un domaine limité par 4 courbes, qui ne seront probablement même pas quatre arcs de cercles !
Une fois que l'on a défini la fonction qui à tout point I,J de l'image "corrigée" correspond un point x,y de l'image "déformée", l'écriture du code correspondant ne pose pas de problème particulier (reste bien sûr à choisir l'algorithme pour définir la valeur lumineuse d'un point théorique (x,y) en fonction des valeurs enregistrées pour les pixels à coordonnées entières environnantes).
Il me semble donc que le problème de Vividoudou est essentiellement la modélisation géométrique de la déformation.
Et nous attendons, de la part de Vividoudou, un dessin permettant justement de comprendre mieux en quoi consiste cette déformation géométrique.

Vividoudou
Membre Naturel
Messages: 11
Enregistré le: 07 Oct 2006, 11:43

par Vividoudou » 06 Nov 2006, 17:28

Salut

Savez-vous comment mettre une image sur le forum ??

Si quelqu'un veux bien m'expliquer comment en insérer une, vous pourrez vous rendre compte de la déformation qui apparait dans l'image.

J'ai trouvé une petite illustration sur se site internet
http://www.cambridgeincolour.com/tutorials/image-projections.htm

Il s'agit de l'illustration Wider Angle of View (grid is highly distorted)
Au lieu que l'image de l'échiquier semble provenir d'un échiquier plan, c'est comme s'il était sur une sphère...


Merci de votre aide!

Quidam
Membre Complexe
Messages: 3401
Enregistré le: 03 Fév 2006, 17:25

par Quidam » 06 Nov 2006, 17:42

Vividoudou a écrit:Savez-vous comment mettre une image sur le forum ??

Oui ! C'est expliqué ICI

Quidam
Membre Complexe
Messages: 3401
Enregistré le: 03 Fév 2006, 17:25

par Quidam » 06 Nov 2006, 18:06

Vividoudou a écrit:J'ai trouvé une petite illustration sur se site internet
http://www.cambridgeincolour.com/tutorials/image-projections.htm

Oui ! Ce site montre les différentes projections que l'on peut choisir, notemment pour représenter une sphère. Il explique également - sans donner aucun détail géométrique - comment par exemple choisir de représenter en une seule photographie un ensemble de trois photographies prises indépendemment l'une de l'autre.

Une fois de plus, il s'agit d'un problème différent de celui que tu sembles avoir, à savoir : corriger une déformation dite "sphérique" due à un défaut de l'objectif de la caméra. Cela n'a rien à voir avec les problèmes, certes très intéressants en eux mêmes, de la représentation dans un plan d'une surface sphérique comme celle de la Terre !
Un objectif parfait donne une projection conique de son environnement : une droite est représentée par une droite. Le problème est là aussi très intéressant : il s'agit de transformer une image en perspective conique (avec lignes de fuite, etc...) en une image en projection orthogonale (dite axonométrique), comme si - dans le cas de ton échiquier - ton objectif était parfait avec son axe parfaitement orthogonal à l'échiquier.
Mais tu as bien dit : "Je souhaite calibrer une camera introduisant une forte distorsion dans l'image". Il s'agit donc de corriger des distortions qui font ressembler des droites à des arcs de cercles : il ne s'agit pas de transformer une projection conique "normale" en projection orthogonale ; c'est un problème différent (et bien plus difficile) !
La difficulté est justement de modéliser géométriquement les déformations induites par ton objectif - qui n'est pas parfait - pour pouvoir corriger les distortions observées !

Vividoudou
Membre Naturel
Messages: 11
Enregistré le: 07 Oct 2006, 11:43

par Vividoudou » 06 Nov 2006, 19:59

Merci Quidam pour le lien.

Voici enfin l'image...
Image

Comme vous pouvez le constater cela ressemble à l'image d'un damier qui aurait été projeté sur une sphère...

A partir de cette image, d'un damier plan, il est possible de trouver la position de chaque coins des carrés en pixel. Sachant que pour l'image parfait du damier, les droites doivent être droites et la taille des carrés doit être identique pour tous, j'aimerai connaitre la transformation à appliquer à l'image que vous voyer pour obtenir une image idéale sans distorsion.


Merci beaucoup!

Quidam
Membre Complexe
Messages: 3401
Enregistré le: 03 Fév 2006, 17:25

par Quidam » 06 Nov 2006, 21:26

Vividoudou a écrit:A partir de cette image, d'un damier plan, il est possible de trouver la position de chaque coins des carrés en pixel. Sachant que pour l'image parfait du damier, les droites doivent être droites et la taille des carrés doit être identique pour tous, j'aimerai connaitre la transformation à appliquer à l'image que vous voyer pour obtenir une image idéale sans distorsion.

Oui, merci, ça donne une idée du problème...Mais j'espérais autre chose ! Je pensais que tu allais nous donner une description géométrique paramétrée du problème où la seule chose restant à faire serait la détermination des paramètres !
Avec ça, je comprends bien ton problème, mais je n'ai aucune idée de la solution ! Et je me demande bien quelle sorte de caméra peut faire une pareille distorsion ! Tu n'as pas une idée de la raison physique, optique, de la distortion ? C'est avec cela qu'on peut avoir une idée de la façon de modéliser le phénomène, et de le reproduire, pour pouvoir l'inverser ensuite.
J'espère pour toi que quelqu'un d'autre aura une idée, car sans la description géométrique de la nature du parcours des rayons lumineux, je suis plutôt muet !

Vividoudou
Membre Naturel
Messages: 11
Enregistré le: 07 Oct 2006, 11:43

par Vividoudou » 06 Nov 2006, 23:54

Il s'agit d'un obectif grand angle de 110°.

Pour le reste je n'ai malheureusement pas grand chose.

Merci!

scelerat
Membre Relatif
Messages: 397
Enregistré le: 03 Aoû 2005, 14:37

par scelerat » 07 Nov 2006, 12:40

Il me semble que le point en x,y par rapport au centre devrait etre renvoye a kx,ky, avec k=a/racine(x^2+y^2) * arctangente (racine(x^2+y^2)/a). La valeur de a se determine de maniere a ce que le bord de l'echiquier soit bien renvoye au nombre de fois qu'il faut la dimension du carre central.

Quidam
Membre Complexe
Messages: 3401
Enregistré le: 03 Fév 2006, 17:25

par Quidam » 07 Nov 2006, 13:57

scelerat a écrit:Il me semble que le point en x,y par rapport au centre devrait etre renvoye a kx,ky, avec k=a/racine(x^2+y^2) * arctangente (racine(x^2+y^2)/a). La valeur de a se determine de maniere a ce que le bord de l'echiquier soit bien renvoye au nombre de fois qu'il faut la dimension du carre central.

Il est clair que l'on est en droit de faire l'hypothèse que la déformation se réduit à un éloignement de chaque pixel d'un certain centre (à déterminer), éloignement ne dépendant que de la distance initiale dudit pixel à ce centre (à déterminer). Mais je te tire mon chapeau, scelerat, pour avoir trouvé cette formule rien qu'à la vue du dessin !
Je serais disposé à tester la formule (pour faire une image "corrigée"), si on trouvait un moyen de déterminer le centre, mais peut-être une position approximative pourrait donner quand même une idée.
Vividoudou, pourrais-tu nous donner les coordonnées pixels que tu as repérées sur cette image ? Ainsi que les coordonnées approximatives du centre si tu en as une idée ?

scelerat
Membre Relatif
Messages: 397
Enregistré le: 03 Aoû 2005, 14:37

par scelerat » 07 Nov 2006, 16:35

Quidam a écrit:Mais je te tire mon chapeau, scelerat, pour avoir trouvé cette formule rien qu'à la vue du dessin !


Justement, j'aurais peut-etre du faire mon propre dessin avant de lancer la formule. J'ai dit que si on enroule l'image non-distordue sur une sphere, une droite passant par le centre de l'image se retrouve enroulee sur un cercle et on voit a une distance R*tangente(alpha) du centre ce qu'on aurait du voir a la distance R*alpha, longueur de l'arc (c'est facile de faire l'experience avec une ficelle et un ballon) . Sauf qu'en y reflechissant, on voit le point a R*sin(alpha) et non a R*tangente(alpha), et donc il faut prendre arcsinus et non arctangente.

Ceci etant, dans les problemes de transformation, il est souvent plus facile de raisonner a l'envers, et de chercher pour chaque point de l'image rectifiee quel pixel de l'image originale doit venir s'y placer. Ce point, c'est celui ou il vient se trouver quand on enroule la ficelle, R*sin((racine(x^2+y^2))/R).

Vividoudou
Membre Naturel
Messages: 11
Enregistré le: 07 Oct 2006, 11:43

par Vividoudou » 07 Nov 2006, 17:52

Je pense que le centre doit approximativement être celui de l'image (cx = 512, cy = 512) car c'est pour le centre optique qu'il y a le moins de déformation.
(l'origine des x,y est le coins supérieur gauche de l'image)

A mon idée, si on considère que la déformation, due à la distortion, est une sphère de centre (cx,cy), alors on doit déterminer la position d'un pixel (xy,yf) de l'image corrigée dans l'image déformé (xi,yi) comme suit:

// Recherche des angles pour le point de l'image corrigée
double phi = atan2(yf-cx,xf-cy);
double theta = atan2(sqrt((xf-cx)*(xf-cx) + (yf-cy)*(yf-cy),Z);

// Recherche la position du point correspondant aux angles sur la sphère (image avec distortion)
double xi = R * sin( theta ) * cos( phi ) + cx;
double yi = R * sin( theta ) * sin( phi ) + cy;

J'ai fais des test pour trouver un Rayon R pour la sphère qui donne des résultat potable R = 1000 et Z (Z=R) est le plan sur lequel je projette l'image rectifié (c'est comme un facteur de zoom)
Si la modélisation est convenable, j'aimerai estimer la valeur de R à partir des mesures.


voici les points mesurés pour chaque coins des carrées, l'image en taille réelle est de 1024x1024

55.3974 807.376
46.5303 723.982
40.8676 635.709
38.7685 544.634
40.3754 452.672
45.7654 361.668
54.4312 274.231
66.1142 191.438
79.8439 114.887
129.129 820.191
121.901 733.802
116.959 642.207
115.214 547.524
117.064 451.839
121.945 357.46
129.909 266.555
140.45 181.074
153.011 102.474
211.402 831.233
205.563 742.667
201.779 648.33
200.734 550.283
202.568 451.517
207.059 353.77
213.969 260.14
223.007 172.301
233.673 91.9434
300.157 841.139
296.578 750.257
294.369 653.683
294.032 553.145
295.8 451.672
299.566 351.538
304.967 255.526
311.974 165.82
320.185 83.9137
394.812 848.013
393.459 756.007
393.021 657.73
393.553 555.591
395.398 452.385
398.259 350.422
402.257 252.949
406.735 161.821
411.796 78.8171
493.026 852.4
494.239 759.88
495.729 660.955
497.204 557.921
499.06 453.813
500.929 351.017
502.865 252.767
504.983 160.896
506.801 77.2527
591.701 853.44
595.607 761.34
598.959 662.566
601.478 559.61
603.22 455.642
604.153 353.131
604.293 254.967
603.498 163.123
602.161 79.8362
688.779 851.95
695.023 760.534
700.207 662.731
703.635 561.155
705.375 458.18
705.446 356.673
703.496 259.33
700.258 168.426
695.587 85.7018
781.226 847.384
789.891 757.615
796.461 661.635
800.756 561.827
802.272 461.081
801.508 361.444
798.042 265.784
792.306 176.259
784.877 94.6991
867.955 840.456
878.287 752.696
886.147 659.162
890.852 562.183
892.478 464.097
890.779 367.174
885.779 274.165
878.261 186.597
868.459 106.291

Quidam
Membre Complexe
Messages: 3401
Enregistré le: 03 Fév 2006, 17:25

par Quidam » 07 Nov 2006, 23:01

Vividoudou a écrit:voici les points mesurés pour chaque coins des carrées, l'image en taille réelle est de 1024x1024


Dans ce cas donne nous aussi l'image en taille réelle !!!!

scelerat
Membre Relatif
Messages: 397
Enregistré le: 03 Aoû 2005, 14:37

par scelerat » 08 Nov 2006, 16:53

Quidam a écrit:Dans ce cas donne nous aussi l'image en taille réelle !!!!

En corrigeant x-512 et y-512 par , j'obtiens les coordonnees suivantes, qui ne sont pas trop deformees :

-20.73 856.62
-17.59 753.18
-15.48 650.50
-13.81 548.26
-12.32 446.04
-10.90 343.40
-10.16 240.67
-10.67 136.24
-14.62 28.08
82.16 858.00
84.55 755.04
85.80 652.48
87.08 550.04
88.87 447.54
90.51 345.00
92.16 242.30
93.24 139.03
92.87 33.87
184.30 860.02
185.73 757.59
186.75 654.93
188.08 551.84
189.83 449.03
191.81 345.86
193.87 243.16
195.78 140.29
196.99 36.57
285.76 863.50
287.33 760.48
288.51 657.49
289.84 553.94
291.54 450.48
293.54 346.98
295.55 243.86
297.66 141.05
299.51 37.78
388.46 866.24
389.95 763.22
391.40 659.72
392.84 555.85
394.64 452.00
396.54 347.98
398.75 244.66
400.65 141.59
402.43 38.33
492.09 869.12
493.80 765.95
495.59 662.23
497.19 557.96
499.04 453.74
500.82 349.42
502.62 245.81
504.61 142.43
506.34 38.90
595.88 871.33
597.92 768.23
599.97 664.31
601.82 559.79
603.61 455.40
605.35 351.07
607.06 247.26
608.62 143.60
610.43 40.18
700.19 873.90
702.21 770.29
704.53 666.19
706.54 561.90
708.39 457.34
710.16 352.88
711.48 248.80
713.08 145.03
714.81 41.06
804.33 876.16
806.49 772.29
808.69 668.07
810.86 563.57
812.56 459.28
814.38 354.75
815.85 250.45
817.41 146.19
819.76 41.36
909.85 879.12
911.27 774.37
913.28 669.83
915.16 565.40
917.09 461.00
918.84 356.45
920.39 252.14
922.79 147.04
926.57 40.15

 

Retourner vers ⚔ Défis et énigmes

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 13 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite