Utilisateur:Denismenchov08/Brouillons 2

Une page de Wikipédia, l'encyclopédie libre.

Récupération[modifier | modifier le code]

git clone git@github.com:micmacIGN/micmac.git / https://github.com/micmacIGN/micmac.git

Installation[modifier | modifier le code]

micmac/LISEZMOI.md

le proj4 de la debian squeeze fonctionne

http://download.osgeo.org/proj/proj-4.9.3.tar.gz

Vérifier les dépendances MicMac

bin/mm3d CheckDependencies

Compilation[modifier | modifier le code]

- entrez dans le répertoire 'micmac' :

cd micmac

- créez un répertoire pour accueillir les fichiers intermédiaires générés par la compilation et placez vous a l’intérieur :

mkdir build & cd build

- lancez la generation des makefiles :

cmake ../

- lancez la compilation en indiquant le nombre de cœurs à utiliser :

make install -j*nombre de cœurs* [-k]

Outils MicMac[modifier | modifier le code]

Sous Linux / MacOS : - ajoutez le chemin du répertoire `lib` dans `LD_LIBRARY_PATH`, dans le fichier `.bashrc` comme suit :

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/<user>/micmac/lib/

- ajoutez le chemin du répertoire `bin` dans `PATH`, dans le fichier `.bashrc` comme suit :

export PATH=$PATH:/home/<user>/micmac/bin/

Utilisation[modifier | modifier le code]

Menu principal MicMac :

mm3d

Créer un répertoire XML_User dans micmac/include/ puis copier le fichier include/XML_MicMac/DicoCamera.xml Modifier ce fichier avec le format XML :

<CameraEntry>
  <Name> CAMERA NAME </Name>
  <SzCaptMm> HAUTEUR_CAPTEUR_MM LARGEUR_CAPTEUR_MM </SzCaptMm>
  <ShortName> CAMERA SHORTNAME </ShortName>
</CameraEntry>

Il faut que HAUTEUR_CAPTEUR_MM < LARGEUR_CAPTEUR_MM
Pour éviter les confusions mettre un <Name> = <ShortName>

Paramètres initiaux[modifier | modifier le code]

On doit connaître le modèle de caméra, la focale et les dimensions du capteur.

Traitement vidéo[modifier | modifier le code]

mm3d DIV video.mp4 focale_35mm (-1 si inconnue) [Foc=focale] [Rate=nb_img_sec]
  1. Extrait toutes les images de la vidéo (selon un pourcentage PercImInit)
  2. Filtre les images restantes avec le Rate
  3. Calcule le recouvrement entre les paires d'images successives (Sift)
  4. Conserve les images non floues par auto-corrélation
Exemple : mm3d DIV video.mp4 -1

Nommage des fichiers : les fichiers "_Ok.png" sont à conserver tandis que les fichiers "_Nl.png" sont à déplacer dans un dossier ./POUB/ (les garder pour les réutiliser par la suite du calcul si nécessaire)

Métadonnées EXIF[modifier | modifier le code]

Les images extraites sont des png brutes sans métadonnées. Il faut rajouter les données EXIF avec la fonction :

mm3d SetExif imPat F=3.8 Cam="Apple iPhone 3GS" F35=

La focale 35 mm permet de s'affranchir de la taille du capteur de la caméra

foc_35mm = focale * diag_35mm / diag_capteur

Le paramètre Cam= correspond à la valeur passée dans la balise <Name> du fichier DicoCamera.xml

Exemple : mm3d SetExif "DIV_.*png" F=3.8 Cam="Apple iPhone 3GS" F35=

Recherche de points d'intérêt et appariement[modifier | modifier le code]

Préliminaires : faire une purge du répertoire temporaire d'images

rm -rf Tmp-MM-Dir/

Recherche de points d'intérêt (SIFT)[modifier | modifier le code]

Affichage des différents modes de recherche :

mm3d Tapioca -help
  • Mode "All"

A utiliser dans le cas général où l'on a pas d'idée a priori sur la configuration de la prise de vue. Toutes les images sont appariées entre elles. Crée une image redimensionnée d'après la taille donnée en entrée Arguments : pattern d'images ; taille du grand côté de l'image en pixel

mm3d Tapioca All imPat Size

Exemple :

mm3d Tapioca All ".*png" -1

-1 signifie qu'on garde la taille originale des images

  • Mode "MulScale"

A utiliser quand on veut détecter à la fois des détails haute et basse fréquence dans l'image pour des applications de reconstruction architecturale 3D. Comme All, toutes les images sont appariées entre elles. Crée une paire d'images (petite et grande) redimensionnées d'après les tailles données en entrée Arguments : pattern d'images ; taille du grand côté de l'image Low en pixel ; taille du grand côté de l'image High en pixels

mm3d Tapioca MulScale imPat LowSz HighSz

Exemple :

mm3d Tapioca MulScale ".*png" 400 1400
  • Mode "Line"

A utiliser lorsque la prise de vue est linéaire (c'est-à-dire qu'une image n'a de partie commune qu'avec les images voisines dans la séquence). On ne va plus chercher à apparier toutes les images ensemble mais seulement un voisinage de l'image en question

mm3d Tapioca Line imPat Size Nb_img_voisinage

Exemple :

mm3d Tapioca Line ".*png 1500 5

On regarde 5 images avant et 5 images après

  • Mode "File" (rarement utilisé)

A utiliser quand on veut choisir les paires d'images que l'on veut apparier.

mm3d Tapioca File paires_d_images.xml Size

Comment choisir parmi les 3 stratégies[modifier | modifier le code]

Dans le cas d'une prise de vue aérienne généralement le sol défile sur les images et il n'est pas utile d'essayer d'apparier les images du début avec celles de la fin de la vidéo. Il faut alors plutôt utiliser le mode Line. En revanche si la prise de vue est globalement orientée du début à la fin sur une même zone de terrain, il devient intéressant d'étendre le calcul d'appariement à l'ensemble des images (le calcul est plus long mais donnera une qualité de trajectoire globalement plus homogène). Il faut alors utiliser soit All soit MulScale.

Visualisation des points homologues[modifier | modifier le code]

SEL permet d'afficher deux images superposées ainsi que les points d'intérêt qui ont été appariés entre ces deux images.

SEL ./ DIV_P01_00002_Ok.png DIV_P01_00005_Ok.png KH=NB SzW=[1000,1000] SH=

Saisie des masques[modifier | modifier le code]

Un masque est une image binaire (noire et blanche) qui détermine les zones de l'image qui servent au calcul de la trajectoire en relatif (le plus souvent le sol). Cela permet d'éliminer tous les détails qui ont été détectés lors de la phase d'appariement mais qui correspondent à autre chose que le sol (par exemple des parties de l'aéronef (rotor, ailes, fuselage, ...), la tête du pilote, des reflets sur la verrière, la mer, le ciel (les nuages qui sont sur une échelle de temps réduite considérés comme immobiles peuvent servir d'appui à la trajectoire), les objets mobiles (autre avion visible, véhicules au sol, ...)).

Saisie d'un masque sur une image[modifier | modifier le code]

mm3d SaisieMasqQT DIV_P01_00005_Ok.png


Filtrage des points homologues avec le masque[modifier | modifier le code]

  • PostPlan

Création d'un masque personnalisé pour chaque image (pour des objets mobiles dans la vidéo).

  • GlobalMasq

Création d'un masque global pour toutes les images de la vidéo (structure avion quand la caméra est fixe).

  • KeyCalculMasq

Création de masques par séquence d'images

Calibration et mise en place[modifier | modifier le code]

Les dimensions du capteur et la focale que l'on a donné servent de solution initiale au calcul.

But : corriger les défauts optiques et géométriques introduits par la caméra (on détermine la focale, le point principal d'auto-collimation PPA (projeté orthogonal du centre optique de la lentille sur le capteur) et les distorsions induites par la lentille (point principal de symétrie et coefficients du polynôme de distorsion)). Ces paramètres servent à modéliser les défauts d'alignement de la lentille et du capteur ainsi que les distorsions introduites par la convergence de la lentille.

Pour des caméras classiques (réflex, téléphone portable) non Fisheye (pas de prise de vue grand angle), il faut utiliser les modes suivants :

  • RadialStd ou RadialBasic (pour une paramétrisation simple) pour les caméras de bonne qualité
  • FraserBasic (pour introduire du décentrement (PPS différent du PPA)) pour les caméras de qualité médiocre (iPhone < 5s)

Pour les "action cam" type GoPro on doit utiliser un paramétrage adapté aux lentilles fish-eye :

  • FishEyeBasic

Lorsqu'on initialise le calcul de la calibration avec une pré-calibration on utilise les modèles suivants :

  • AutoCal pour utiliser la pré-calibration et ré-estimer les paramètres
  • Figee pour utiliser la pré-calibration sans la ré-estimer

Géoréférencement[modifier | modifier le code]

Comment générer le fichier de coordonnées 3D des points d'appui ?

Étape préalable de construction du fichier du points d'appui TXT[modifier | modifier le code]

Récupération des coordonnées[modifier | modifier le code]

Sur Géoportail ou QGIS (avec le plug-in Copy_Coords qui permet en cliquant sur un fond de carte de copier ses coordonnées dans le système de référence de la projection à la volée).

Création du fichier de coordonnées TXT[modifier | modifier le code]

Pour remplir le fichier de coordonnées 3D au format texte il faut choisir un identifiant unique (de préférence un nombre) pour chaque point. La ligne type de ce fichier a le format suivant :

ID LONG LAT ALT

Soit par exemple :

101 650021.6430 6832329.5033 80.4519

en coordonnées Lambert 93.

Conversion de coordonnées géographiques en cartésiennes (=projetées)[modifier | modifier le code]

MicMac est un outil qui ne travaille qu'en coordonnées projetées. Il faut donc convertir les coordonnées GPS vers des coordonnées projectives.

Avec l'outil python CONVCOORD.py il est possible de convertir un fichier TXT d'un système de coordonnées vers un autre à l'aide des EPSG (European Petroleum Survey Group) qui sont les identifiants universels des systèmes de référence. Ils sont disponibles sur le site :

http://spatialreference.org/

et contiennent à la fois les systèmes globaux (WGS84) en coordonnées géographiques, et locaux (projections Lambert, UTM, ...). Avec ces identifiants et le programme Python toutes les projections sont accessibles. Il faut évidemment choisir une projection adaptée à la zone géographique de travail.

Conversion au format XML MicMac[modifier | modifier le code]

Une fois que le fichier TXT ne contient que des coordonnées projetées, il faut convertir le fichier en lui-même au format MicMac. La commande GCPConvert assure cette tâche :

mm3d GCPConvert "#F=N_X_Y_Z" coords.txt

Explication du format "#F=N_X_Y_Z" :

Saisie des points d'appui[modifier | modifier le code]

Lors de la première étape de placement sur les images des points d'appui, il faut utiliser SaisieAppuisInitQT :

mm3d SaisieAppuisInitQT pattern_images orientation_in/ coords.xml SaisieAppuis.xml

en cliquant chaque point sur deux images minimum. Ensuite la fonction GCPBascule sert à transformer (à "basculer") le système d'un repère relatif vers un repère absolu.

mm3d GCPBascule pattern_images orientation_in/ orientation_out/ coords.xml SaisieAppuis-S2D.xml

Les résidus obtenus servent à identifier les éventuelles erreurs dans les coordonnées ou dans la saisie et, s'ils sont corrects, à valider le traitement. Puis en utilisant SaisieAppuisPredicQT il faut cette fois-ci cliquer tous les points visibles sur toutes les images possibles. Cette phase est aidée puisque les points sont pré-positionnés sur les images grâce à la mise en place relative de Tapas.

mm3d SaisieAppuisPredicQT pattern_images orientation_in/ coords.xml SaisieAppuis.xml

Toujours suivi d'une bascule. Toute la phase de placement (de "saisie" manuelle) sur les images des points d'appui peut se faire grâce à la fonction SaisieAppuisInitQT. La fonction SaisieAppuisPredicQT est complémentaire et permet de distinguer initialisation et saisie globale des points d'appui.

Compensation globale[modifier | modifier le code]

Attention Campari fait nécessairement suite à l'étape de géoréférencement de la trajectoire. Il ne peut être employé suite à une simple mise en place relative faite avec Tapas. Campari sert à compenser les différentes sources de données fournies lors du géoréférencement :

  • le fichier de coordonnées 3D
  • le fichier de saisies images 2D

La fonctionnalité requiert des écarts-types pour les coordonnées 3D en mètres et pour les saisies 2D en pixels. Cela permet globalement de lisser la trajectoire et localement de supprimer les fautes de saisie ou de copie des coordonnées.

Visualiser les nuages de points 3D[modifier | modifier le code]

Il peut être utile parfois de visualiser les points d'intérêt trouvés par SIFT (avant ou après géoréférencement) et les sommets de prise de vue. Cela se fait grâce à l'outil AperiCloud :

mm3d AperiCloud pattern_images orientation/

et le fichier généré est un fichier PLY qui contient les informations de :

  • coordonnées et dimensions (taille capteur + focale) des sommets de prise de vue
  • coordonnées, radiométrie RVB et normale locale des points d'intérêt

Ce fichier peut se visualiser avec le logiciel MeshLab à télécharger ici :

http://www.meshlab.net/#download

Positionnement en relatif : AlphaGet27[modifier | modifier le code]

Objectif[modifier | modifier le code]

Positionnement d’un objet mobile sur des images d’une caméra dont on connait position, orientation et calibration.

Explication[modifier | modifier le code]

L’objet va être positionné « en relatif » par rapport à la caméra en déterminant le vecteur directeur qui relie objet et caméra sur chaque image. En ajoutant ce vecteur 3D aux coordonnées de la caméra on obtient les coordonnées 3D de l’objet.

Utilisation[modifier | modifier le code]

Pour un test unitaire[modifier | modifier le code]

Entrée[modifier | modifier le code]

  • pattern d’images
  • dossier d’orientation de ces images
  • fichier XML de coordonnées de points caractéristiques de l’objet dans un repère local lié à l’objet
  • fichier XML des saisies image 2D de ces points caractéristiques

Optionnel[modifier | modifier le code]

  • numéro du point qui sert au calcul du positionnement
  • nom du fichier XML en sortie

Sortie[modifier | modifier le code]

  • fichier XML des coordonnées 3D de l’objet

Ligne de commande type[modifier | modifier le code]

mm3d AlphaGet27 "pattern.*png" Ori-Abs/ coords.xml SaisieAppuis.xml [GCPid=101] [Out=objet.xml]

Le fichier de sortie est un fichier XML MicMac avec les balises DicoAppuisFlottant dans lequel les positions et nom de chaque image sont référencés.

Pour un emploi dans une chaîne automatisée[modifier | modifier le code]

AlphaGet27 peut être utilisé de manière automatisée sans avoir à bidouiller les fichiers en entrée. Le code est le suivant :

  • on crée un sous-répertoire à la racine du chantier :
mkdir SaisieAppuis
  • on exécute une boucle sur toutes les images afin de saisir les positions image des points caractéristiques :
files=( *.png )
for i in "${files[@]}"
   do
      img_name="$( cut -d '.' -f 1 <<< "$i" )"
      mm3d SaisieAppuisInitQT "$i" NONE coords.xml SaisieAppuis_"$img_name".xml
      mv SaisieAppuis_"$img_name"-S2D.xml SaisieAppuis/
      rm -rf SaisieAppuis_"$img_name"-S3D.xml
   done
  • on se place dans le répertoire contenant tous les fichiers de saisies 2D et on lance la fonction MergeSOMAF qui fusionne ces fichiers en un en tenant compte des redondances et des saisies croisées :
cd SaisieAppuis/
mm3d MergeSOMAF "SaisieAppuis_.*xml" Out=../SaisieAppuis.xml
  • on se replace à la racine du projet et on exécute AlphaGet27 sur le fichier SaisieAppuis.xml
cd ../
mm3d AlphaGet27 "pattern.*png" Ori-Abs/ coords.xml SaisieAppuis.xml

Jeu de données test[modifier | modifier le code]

Mise à jour[modifier | modifier le code]

Pour mettre à jour MicMac depuis git il faut se placer dans le répertoire d'installation de (opt/micmac/ la plupart du temps) et ouvrir un invité de commande :

git pull

Les éléments à mettre à jour apparaissent sous forme d'ajouts et de suppression de lignes de code dans des fichiers c++.

Puis une fois que le contenu est à jour, il faut le recompiler : - placez vous a l’intérieur build/ :

cd build

- lancez la generation des makefiles :

cmake ../

- lancez la compilation en indiquant le nombre de cœurs à utiliser :

make install -j*nombre de cœurs* [-k]

Une fois que MicMac est recompilé, il est utilisable en ligne de commande.

Les mises à jour doivent être faites assez régulièrement car elles apportent des correctifs de bugs remontés par tous les utilisateurs de MicMac.