-
Notifications
You must be signed in to change notification settings - Fork 0
Exemple de résultat
Notre objectif dans cet exemple était de retrouver le lieu de prise de vue et les paramètres de caméra associés à une photo représentant un des bouddhas de Bamiyan, datant de 1930. Nous disposions pour cela d'un modèle 3D récent (2016) de la falaise et des bouddhas de Bamiyan.
Nous avons commencé par définir des points sur la photo, puis nous leur avons associé des points sur le modèle 3D :
Correspondances entre des points 3D (à gauche) et des points 2D (à droite). Une couleur = une correspondance.
A partir de ces correspondances, nous avons construit la requête suivante (pour envoi vers le solveur) :
{
"bindings": [
{
"point2D": {
"x": 0.1002507811,
"y": 0.14904092369
},
"point3D": {
"x": 392723.6781258583,
"y": 3854997.094100723,
"z": 45.492522835731506
}
},
{
"point2D": {
"x": -0.43119376845,
"y": 0.22657162675
},
"point3D": {
"x": 392653.87266898155,
"y": 3855014.7516857386,
"z": 53.69987381994724
}
},
{
"point2D": {
"x": -0.07460277031,
"y": -0.14440476017
},
"point3D": {
"x": 392699.2864238918,
"y": 3854987.753632784,
"z": 16.72535276412964
}
},
{
"point2D": {
"x": 0.07319435276,
"y": -0.2798409932
},
"point3D": {
"x": 392704.4091901779,
"y": 3854933.417292595,
"z": 4.7778849601745605
}
},
{
"point2D": {
"x": -0.42492308295,
"y": -0.00592180861
},
"point3D": {
"x": 392655.6307860017,
"y": 3855012.0965685844,
"z": 30.91382074356079
}
},
{
"point2D": {
"x": 0.38535136561,
"y": 0.12865725451
},
"point3D": {
"x": 392762.9967637658,
"y": 3854993.1298668385,
"z": 44.5735228061676
}
}
],
"imageDimensions": {
"width": 600,
"height": 428
}
}
Les coordonnées 3D correspondent aux coordonnées réelles des points (latitude, longitude, altitude), exprimées dans le système UTM42. Les coordonnées 2D correspondent au coordonnées des points dans l'image, normalisées pour être comprises entre
La requête a été envoyée au solveur via l'application Postman. Avant d'envoyer la requête (bouton "Send"), nous avons configuré :
- la méthode utilisée (POST)
- l'adresse de la requête (localhost:3000/solve)
- le format de la requête ("raw" et "JSON")
- le contenu de la requête (cf plus haut)
Configuration de Postman.
Le solveur nous a renvoyé, via Postman, la réponse suivante :
{
"camera": {
"matrix": [
0.976617013897078,
-0.2149810173742307,
-0.0015395893917754672,
0,
-0.016300182807367003,
-0.08118548359836542,
0.9965657134847384,
0,
-0.2143677032745394,
-0.973237935667142,
-0.08279135444693941,
0,
392679.9855258583,
3854832.634100723,
3.872622835731505,
1
],
"cx": -0.0458218,
"cy": -0.143115,
"vFOV": 30.3807,
"width": 600,
"height": 428
},
"errorEstimation": {
"bindingErrors": [
{
"x": 0.05079657177731339,
"y": 0.07438563646462154
},
{
"x": 0.22234668767704377,
"y": 0.11339549914423908
},
{
"x": 0.03899494425515092,
"y": 0.07208558421813709
},
{
"x": 0.03698063140863212,
"y": 0.13994407410745394
},
{
"x": 0.21924340607880055,
"y": 0.003114572286527296
},
{
"x": 0.19757015142504553,
"y": 0.06435600231713988
}
],
"globalError": 0.10276781343000878
}
}
Dans notre modèle 3D, nous avons ensuite simulé la caméra avec les paramètres et le positionnement évalué par le solveur. On constate que la photo se superpose quasi-parfaitement sur le modèle 3D : l'estimation semble bonne.
Evaluation des paramètres de caméra et superposition 2D-3D
Nous avons ensuite affiché les reprojections des points 3D, afin de les comparer aux points 2D initiaux (cf critère d'optimisation). On a ainsi pu constater que l'erreur de reprojection est très faible pour tous les points :
Erreurs de reprojection (le point initial est affiché en gros, le point reprojeté est affiché en petit)
Zoom sur des erreurs de reprojection (le point initial est affiché en gros, le point reprojeté est affiché en petit)
Remarque : On constate que plus les points sont éloignés du centre de l'image, plus les erreurs de reprojection sont importantes. Cela est dû au fait que nous n'avons pas modélisé de distorsion autre que le décalage du centre de la caméra (cf discussion sur la distorsion)