Différences entre versions de « Photogrammétrie »

De POLR
Sauter à la navigation Sauter à la recherche
(3 versions intermédiaires par le même utilisateur non affichées)
Ligne 91 : Ligne 91 :
 
Créez votre première orthomosaique:
 
Créez votre première orthomosaique:
 
  sudo docker run -it --name BHH_5cm --rm --memory="15g"\
 
  sudo docker run -it --name BHH_5cm --rm --memory="15g"\
     -v $(pwd):$(pwd)/code/:Z\
+
     -v $(pwd)/:/datasets/code:Z \
     opendronemap/odm --project-path $(pwd) --fast-orthophoto
+
     opendronemap/odm --project-path /datasets --fast-orthophoto
  
 
la synthaxe est <code>docker run [arguments pour docker] opendronemap/odm [arguments pour ODM]</code>.  
 
la synthaxe est <code>docker run [arguments pour docker] opendronemap/odm [arguments pour ODM]</code>.  
Ligne 101 : Ligne 101 :
 
#*<code>--rm</code> :  efface tout le contenu du conteneur créé une fois la tâche effectuée.
 
#*<code>--rm</code> :  efface tout le contenu du conteneur créé une fois la tâche effectuée.
 
#*<code>--memory</code> :    Maximum de mémoire vive que peut utiliser docker. Il est important d'utiliser cette argument en fonction de la capacité de votre machine. En effet, docker va utiliser de base toute la mémoire nécessaire pour effectuer la tâche. Or le traitement d'image, notamment effectuer des modeles 3D nécessitent beaucoup de mémoire vive. Si vous traitez beaucoup d'images, votre RAM risque d'être saturée par le programme et votre ordinateur ne sera plus capable d'effectuer aucune tâche.
 
#*<code>--memory</code> :    Maximum de mémoire vive que peut utiliser docker. Il est important d'utiliser cette argument en fonction de la capacité de votre machine. En effet, docker va utiliser de base toute la mémoire nécessaire pour effectuer la tâche. Or le traitement d'image, notamment effectuer des modeles 3D nécessitent beaucoup de mémoire vive. Si vous traitez beaucoup d'images, votre RAM risque d'être saturée par le programme et votre ordinateur ne sera plus capable d'effectuer aucune tâche.
#*<code>-v $(pwd)/$(pwd)/code/:Z </code> :    Permet de faire un lien entre le répertoire local et l'emplacement "virtuel" dans le conteneur. Cette synthaxe va faire tourner le script sur le disque contenant votre répertoire local (<code>/archives</code> ou <code>/home</code> par exemple).
+
#*<code>-v $(pwd)/:/datasets/code:Z </code> :    Permet de faire un lien entre le répertoire local et l'emplacement "virtuel" dans le conteneur. Cette synthaxe va faire tourner le script sur le disque contenant votre répertoire local (<code>/archives</code> ou <code>/home</code> par exemple).
<>Tous les arguments de la commande <code>docker run</code> sont explicités [https://docs.docker.com/engine/reference/commandline/run/ ICI]</bolt>
+
<bolt>Tous les arguments de la commande <code>docker run</code> sont explicités [https://docs.docker.com/engine/reference/commandline/run/ ICI]</bolt>
  
 
#Dans cet exemple, nous donnons à ODM uniquement les arguments suivant :
 
#Dans cet exemple, nous donnons à ODM uniquement les arguments suivant :
#*<code>--project-path $(pwd)</code> : ODM va créer l'arborescence des répertoires nécessaire pour le projet, dans le répertoire local. Il est important d'utiliser cette synthaxe pour être capable de relancer un traitement à mi-chemin (<code>--rerun-from odm_meshing</code> par exemple) une fois la traitement initial achevé.
+
#*<code>--project-path /datasets</code> : ODM va créer l'arborescence des répertoires nécessaire pour le projet, dans le répertoire local. Il est important d'utiliser cette synthaxe pour être capable de relancer un traitement à mi-chemin (<code>--rerun-from odm_meshing</code> par exemple) une fois la traitement initial achevé.
 
#*<code>--fast-orthophoto</code> :    permet de réaliser une orthomosaique sans faire de modèle 3D. Les resultats sont généralement passablement moins bons mais le temps d'execution est nettement plus rapide.
 
#*<code>--fast-orthophoto</code> :    permet de réaliser une orthomosaique sans faire de modèle 3D. Les resultats sont généralement passablement moins bons mais le temps d'execution est nettement plus rapide.
  
Ligne 122 : Ligne 122 :
 
Exemple:
 
Exemple:
 
  sudo docker run -it --name BHH_5cm --rm --memory="15g"\
 
  sudo docker run -it --name BHH_5cm --rm --memory="15g"\
     -v $(pwd):$(pwd)/code/:Z \
+
     -v $(pwd)/:/datasets/code:Z \
     opendronemap/odm --project-path $(pwd) --gcp /code/images/gcp_list.txt
+
     opendronemap/odm --project-path /datasets --gcp /code/images/gcp_list.txt
  
  

Version du 6 février 2020 à 11:13

DJI Mavic 2 Pro

Mode vidéo

Les fichiers FlightRecord enregistrés sur le cellulaire qui a servi à piloter le drone contiennent beaucoup d'information concernant le vol et les paramètres d'image. Avant de les lire, il faut convertir ces fichiers, ce qui peut être fait avec l'application suivante:

https://airdata.com/

Compte et Logiciels

machine de traitement d'images Canot

adresse IP : 10.4.30.227

adresse DNS : canot.uqar.ca

caractéristiques

CPU : Intel Xeon W-2145 (3.7GHz, 4.5GHz Turbo, 8C, 11MB Cache)

RAM : 64GB (4x16GB) 2666MHz

Mémoire : 1 TB SSD + 4TB HDD

carte graphique : NVIDIA GeForce GTX 1080

Google

compte : polr.drone@gmail.com

mot de passe : polrismer

DJI

compte : polr.drone@gmail.com

mot de passe : polrismer2

Drone Harmony +

compte : polr.drone@gmail.com

mot de passe : polrismer


accès à l'application sur le web : app.droneharmony.com

Possibilité de charger / enregistrer des zones/plans de vols préalablement fait depuis l'application mobile.

OpenDroneMap

(OpenDroneMap ) est un software Open Source qui permet de créer des orthomosaiques géoréférencées et des modèles 3D de terrain à partir d'images aériennes de drone.

Modèle 3D de la zone marginale de glace à Anse à capelan réalisée à partir de 44 images prisent avec un MavicPro1
orthomosaique de la zone marginale de glace à Anse à capelan réalisée à partir de 44 images prisent avec un MavicPro1

Installation

ODM a originellement été développé pour la distribution Linux Ubuntu.16.04 (Xenial) mais peut facilement s'installer sur n'importe quelle distribution Linux,MAC ou Windows grâce à l'application (Docker).


Docker peut être installé sur à peu près n'importe quel distribution ou système d'exploitation. Pour connaître la marche à suivre pour une distribution particulière, référez-vous à: https://docs.docker.com/install/

Pour CentOS 7:

Dans un terminal:

su -
yum install docker

Une fois l'installation terminée, vous devez démarrer Docker:

systemctl start docker

Assurez vous que Docker fonctionne correctement:

systemctl status docker
docker run hello-world

Pour démarrer automatiquement Docker lors de chaque démarrage de votre ordinateur

systemctl enable docker.service


Vous êtes maintenant prêt à utiliser OpenDroneMap. En effet l'image du programme est directement disponible à partir des librairies Docker Hub (docker.io/opendronemap/odm), vous n'avez donc en théorie pas besoin de télécharger le code source de ODM et créer vous même l'image dans Docker. Si toutefois vous desirez le faire afin de posséder une image comprenant tous les derniers ajouts et modifications du code (Beta), vous pouvez vous référer à la documentation https://docs.opendronemap.org/building.html

à propos de Docker:

Docker peut être assimilé à une sorte de machine virtuelle. Le but étant de faire fonctionner des programmes développés pour un système d'exploitation donné sur n'importe quel système. Docker créer un conteneur qui rassemble le code source ainsi que toutes les dépendances nécessaire pour créer une image du programme qui pourra fonctionner comme un programme standalone.


Utilisation

Bases

OpenDroneMap s'utilise en ligne de commande. Pour votre première utilisation, ouvrez un terminal et créez un répertoire de travail ainsi qu'un sous-répertoire images/ qui contiendra les images aeriennes que vous souhaitez traiter:

mkdir <mon_repertoire_ortho>
cd <mon_repertoire_ortho>
mkdir <images>

Créez votre première orthomosaique:

sudo docker run -it --name BHH_5cm --rm --memory="15g"\
   -v $(pwd)/:/datasets/code:Z \
   opendronemap/odm --project-path /datasets --fast-orthophoto

la synthaxe est docker run [arguments pour docker] opendronemap/odm [arguments pour ODM].

  1. Dans cet exemple, la commande docker run permet d’exécuter le programme opendronemap/odm. les argument de cette commande sont:
    • -it : permet de pouvoir interagir avec le programme
    • --name : donne un nom au traitement
    • -d : fait tourner le script en arrière plan (optionnel)
    • --rm : efface tout le contenu du conteneur créé une fois la tâche effectuée.
    • --memory : Maximum de mémoire vive que peut utiliser docker. Il est important d'utiliser cette argument en fonction de la capacité de votre machine. En effet, docker va utiliser de base toute la mémoire nécessaire pour effectuer la tâche. Or le traitement d'image, notamment effectuer des modeles 3D nécessitent beaucoup de mémoire vive. Si vous traitez beaucoup d'images, votre RAM risque d'être saturée par le programme et votre ordinateur ne sera plus capable d'effectuer aucune tâche.
    • -v $(pwd)/:/datasets/code:Z  : Permet de faire un lien entre le répertoire local et l'emplacement "virtuel" dans le conteneur. Cette synthaxe va faire tourner le script sur le disque contenant votre répertoire local (/archives ou /home par exemple).

<bolt>Tous les arguments de la commande docker run sont explicités ICI</bolt>

  1. Dans cet exemple, nous donnons à ODM uniquement les arguments suivant :
    • --project-path /datasets : ODM va créer l'arborescence des répertoires nécessaire pour le projet, dans le répertoire local. Il est important d'utiliser cette synthaxe pour être capable de relancer un traitement à mi-chemin (--rerun-from odm_meshing par exemple) une fois la traitement initial achevé.
    • --fast-orthophoto : permet de réaliser une orthomosaique sans faire de modèle 3D. Les resultats sont généralement passablement moins bons mais le temps d'execution est nettement plus rapide.

Tous les arguments pour ODM sont explicités ICI

Ground Control points

Les points de contrôle sont des points de coordonnées connues (LON,LAT,ALT) qui permettent d'augmenter l'efficacité et la précision du traitement. Par exemple des cibles de couleurs visible sur les images dont on prend les coordonnées à l'aide d'un DGPS.

Pour utiliser des points de contrôle on utilisera l'argument:

--gcp <path> où <path> est le chemin vers un fichier nommé gcp_list.txt dans lequel les coordonnées des points de contrôle correspondent aux pixel (x,y) de l'image. Ce fichier devra être placé dans votre repertoire image/

Utilisation du GUI make_GCP

Exemple:

sudo docker run -it --name BHH_5cm --rm --memory="15g"\
   -v $(pwd)/:/datasets/code:Z \
   opendronemap/odm --project-path /datasets --gcp /code/images/gcp_list.txt


Une bonne documentation pour l'utilisation des points de contrôle est disponible ICI.

Le fichier gcp_list.txt doit avoir un formatage précis. Pour faciliter la création de ce fichier un GUI matlab est disponible: Fichier:Groundcontrolpoints.zip

Fonctionnement

Bonnes pratiques

photos

Renommer les images des drones avec fonction suivante :

exiftool '-filename<CreateDate' -d %y%m%d_%H%M%S%%-c.jpg repertoire


ODM

  • Placer les images brutes sur le disque d'archive /archive/PHOTOGRAMMETRIE/ et faire un lien symbolique ln -s vers votre répertoire de travail
  • Pour de meilleurs résultats, enlever la distorsion des images brutes en utilisant le script python disponible dans /archive/PHOTOGRAMMETRIE/CameraCalibration, comme ci-dessous pour les images du Mavic 2 PRO :
python undistort.py --matrix /archive/PHOTOGRAMMETRIE/CameraCalibration/mavic/mav_matrix.txt --distortion /archive/PHOTOGRAMMETRIE/CameraCalibration/mavic/mav_distortion.txt "/path/to/images/"
  • Les images prises par le drone sont volumineuses (~10 Mo), pour faciliter le traitement d'une grosse banque d'images, utiliser l'option --resize-to 2048 pour redimensionner les images lors du traitement
  • Pour générer un modèle numérique de terrain (MNT ou DTM), utiliser l'option --dtm. Les options --smrf-* vont influencer la qualité/précision du MNT (cf ODM création de MNT)

Docker

  • lancer docker avec l'option -d (daemon) pour faire tourner le conteneur en arrière-plan
  • sudo docker ps affiche les conteneurs actifs et leurs ID
  • sudo docker stats affiche la RAM/CPU réservé pour les conteneurs et leurs pourcentages d'utilisation
  • sudo docker logs ID affiche les dernières lignes de la sortie standard du conteneur (utile pour vérifier l'état d'avancement du conteneur)
  • sudo docker attach ID met le conteneur en avant-plan et Ctl-p Ctl-q le remet à l'arrière plan

Drone Harmony Plus

Drone Harmony Plus génére des plans de vols avec prises de vue pour la création d'orthophotographies et de modèles numériques de terrain. L'application permet de simuler un environnement de vol à l'aide de polygones, puis de créer des zones d'interêts à partir desquels seront générées des plans de vols. L'ensemble de ces étapes préliminaires peut être sauvegarder via l'application et synchroniser entre plusieurs appareils (connecté au compte polr.drone@gmail.com).

Afin d'éviter les interférences entre l'application DJI GO 4 et DH+, quitter DJI GO 4 pour que la connexion avec le drone soit optimale. Ne pas oublier de se connecter au compte DJI sur DH+ via le menu "drone --» connexion à DJI".

Plan de vol

Banque d'images pour orthophotographie : utilisation du mode "balayage"

Banque d'images pour modèle 3D : utilisation du mode "quadrillage"

ATTENTION ! vérifier que la vitesse d'obturation soit ≤ 1/100 (photos floues dans le cas contraire)

tips

  • altitude > 100 m
  • recouvrement ~80%
  • désactiver l'option "prendre des images avec intervalles de temps"
  • "réseau triple" pour modèle 3D
  • vérifier le temps de vol théorique en cliquant sur le bouton ⓘ (en haut à droite) à la vitesse désirée (8 à 12 m/s)
  • lors du lancement du plan de vol, choisir la prise de "photos aux points de controles, pas d'arrêt"
  • Essayer le limiter le temps de vol théorique à 15~18min

Volumétrie

Estimation de l'épaisseur et du volume de glace

à l'aide de la calculatrice RASTER, on obtient la différence d'élévation (l'épaisseur de glace si elle est posée au fond) avec la formule suivante :

((raster bathy - raster glace) < 0) * (raster bathy - raster glace) * -1


Pour la différence en négatif, on utiliserait la formule suivante :

((raster bathy - raster glace) > 0) * ( raster bathy - raster glace)

Une fois le raster d'épaisseur obtenu, on peut extraire différentes statistiques sur une région d'intérêt. Pour cela, il faut :

  • créer un shapefile (polygone) couvrant cette zone d'intérêt
  • découper le raster selon le polygone (Raster --» Extraction --» Clip) en utilisant l'option de découpe par masque
  • ce dernier raster peut être utiliser tel quel pour connaitre la répartition de l'épaisseur de glace dans la zone
  • on peut sortir des statitiques de volumes en utilisant la commande Raster --» Statistique de zone. On obtient alors différentes statistiques du raster au sein du polygone, dont la somme des valeurs d'élévation. En multipliant la superficie d'un pixel par la somme des élévations, on obtient le volume total de gain/perte entre le raster bathymétrique et de la surface de glace.

Attention, cette méthode est valable uniquement quand la glace de mer est posée sur le fond. Une autre méthode permettant de supprimer la hauteur d'eau associé à la marée pourrait être mise en place. À SUIVRE !!