Importer et exporter des images GeoTiff avec Python

Organisez vos notes. Le code suppose un shell interactif.

Lire comme un tableau numpy de données de tableau de pixels de l'image

read_tif.py


import numpy as np
from osgeo import gdal, gdalconst, gdal_array

src = gdal.Open('inputfilepath', gdalconst.GA_ReadOnly) #Lire tif(read only)
type(src) # "osgeo.gdal.Dataset"

src.RasterXSize #Nombre de pixels horizontaux
src.RasterYSize #Nombre de pixels verticaux
src.RasterCount #Nombre de bandes

b1 = src.GetRasterBand(1).ReadAsArray() #Tableau numpy 1ère bande
b2 = src.GetRasterBand(2).ReadAsArray() #Tableau numpy 2e bande
b3 = src.GetRasterBand(3).ReadAsArray() #Tableau numpy 3ème bande

dtid = src.GetRasterBand(1).DataType #Numéro de modèle(ex: 6 -> numpy.float32)
gdal_array.GDALTypeCodeToNumericTypeCode(dtid) #Numéro de modèle->Conversion de nom de type

# others...

src.GetRasterBand(1).GetNoDataValue()
src.GetRasterBand(1).GetMinimum()
src.GetRasterBand(1).GetMaximum()
src.GetRasterBand(1).GetScale()
src.GetRasterBand(1).GetUnitType()

Pour les 5 derniers éléments, rien n'a été renvoyé du fichier que j'avais. Il peut s'agir de la valeur stockée dans l'adresse sous forme de métadonnées à l'avance. Bien sûr, il existe de nombreux cas où le traitement numpy après ReadAsArray () peut être géré.

Acquisition d'informations de base

read_info.py


src.GetDescription() #nom de fichier

src.GetGeoTransform() #6 nombres liés aux coordonnées(Voir ci-dessous)
src.GetProjection() #Coordonnées du système d'information

La signification de la séquence de nombres sortie par GetGeoTransform () est [Point de départ longitude de fin, Résolution ouest-est, Rotation (0 vers nord-sud), Latitude de fin du point de départ, Rotation (0 vers nord-sud), Résolution nord-sud (négative dans le sens nord-sud)].

Obtenir des métadonnées d'image

Pour rechercher des concepts et des éléments de métadonnées dans Tiff, voir ci-dessous, par exemple. Pour les métadonnées principales, récupérez les métadonnées en utilisant le nom de la balise écrit ici. Format TIFF (1) | JProgramer Présentation du fichier CG, chapitre 5, section 1 GTiff -- GeoTIFF File Format

read_meta.py



src.GetMetadata() #Tableau de métadonnées de type dictionnaire
src.GetMetadataItem('itemname') #Spécification d'article(ex: 'TIFFTAG_XRESOLUTION', 'TIFFTAG_DATETIME', ..)

Sortie d'image GeoTiff

Suivez GTiff --GeoTIFF File Format. En particulier, veuillez noter que l'opération correcte peut ne pas être effectuée lors de l'utilisation de l'image par la suite, à moins que les paramètres ne soient correctement définis, y compris ceux spécifiés comme options. Par exemple, lors du traitement de l'image de sortie à l'aide d'un logiciel, ce logiciel peut se référer à certaines des métadonnées (balises) comme informations de base. Si les informations sont manquantes, cela peut ne pas fonctionner comme prévu et la cause doit être identifiée à chaque fois, sauf pour une compréhension approfondie du logiciel à l'avance. (La raison pour laquelle RVB est entré dans la balise d'interprétation photométrique dans le code ci-dessous est que je m'attendais à ce qu'elle soit dessinée comme une image couleur dans le logiciel utilisé, mais il y a un problème car il devient un affichage monochrome en utilisant la valeur de bande de la première couche. Parce qu'il y en avait.)

write_data.py


from osgeo import osr #Module de référence spatiale

dtype = gdal.GDT_Float32 #others: gdal.GDT_Byte, ...
band = 3 #Nombre de bandes
output = gdal.GetDriverByName('GTiff').Create('outputfilepath', xsize, ysize, band, dtype, options = ['PHOTOMETRIC=RGB']) #Fichier de sortie vide

output.SetGeoTransform((ul_x, h_res, 0, ul_y, 0, -v_res)) #Spécification du système de coordonnées
srs = osr.SpatialReference() #Informations de référence spatiale
srs.ImportFromEPSG(32648) # WGS84 UTM_Spécifiez le système de coordonnées pour 48n
output.SetProjection(srs.ExportToWkt()) #Combinez les informations spatiales

output.GetRasterBand(1).WriteArray(b1)   #Exporter la bande rouge (b1 est un tableau 2D numpy)
output.GetRasterBand(2).WriteArray(b2)   #Bande verte
output.GetRasterBand(3).WriteArray(b3)   #Bande bleue
output.FlushCache()                     #Écrire sur le disque
output = None                           

Recommended Posts

Importer et exporter des images GeoTiff avec Python
Capturer des images avec Pupil, python et OpenCV
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Images en bordure avec python Partie 1
Obtenez des images et des vidéos de la chronologie des médias avec Python + Tweepy
Python et matériel - Utilisation de RS232C avec Python -
python avec pyenv et venv
Fonctionne avec Python et R
Communiquez avec FX-5204PS avec Python et PyUSB
Reconnaissance des nombres dans les images avec Python
Briller la vie avec Python et OpenCV
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Encodage et décodage JSON avec python
[GUI en Python] PyQt5-Glisser-déposer-
Publiez plusieurs images Twitter avec python
Lire et écrire NetCDF avec Python
Animez plusieurs images fixes avec Python
J'ai joué avec PyQt5 et Python3
Charger une image gif avec Python + OpenCV
Lire et écrire du CSV avec Python
Intégration multiple avec Python et Sympy
Coexistence de Python2 et 3 avec CircleCI (1.0)
Jeu Sugoroku et jeu d'addition avec Python
Travailler avec des images DICOM en Python
Télécharger et télécharger des images avec Falcon
Modulation et démodulation FM avec Python
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
Communiquez entre Elixir et Python avec gRPC
Construction de pipeline de données avec Python et Luigi
Calculer et afficher le poids standard avec python
Surveiller les pannes de Mojo avec Python et Skype
[Python] Combinez automatiquement et de manière transparente les images recadrées
Amplifiez les images pour l'apprentissage automatique avec Python
[Automation] Manipulez la souris et le clavier avec Python
Authentification sans mot de passe avec RDS et IAM (Python)
Installation de Python et gestion des packages avec pip
POSTER diversement avec Python et recevoir avec Flask
Fractal pour faire et jouer avec Python
Un mémo contenant Python2.7 et Python3 dans CentOS
Utilisez PIL ou Pillow avec Cygwin Python
Créer et décrypter du code César avec python
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Lire et écrire des fichiers JSON avec Python
Gérer les "années et mois" en Python
[python, openCV] base64 Reconnaissance faciale dans les images
J'ai installé et utilisé Numba avec Python3.5
Analyse des tweets avec Python, Mecab et CaboCha
Lier Python et JavaScript avec le notebook Jupyter
Surveillance du trafic avec Kibana, ElasticSearch et Python
Modulation et démodulation FM avec Python Partie 2