J'ai essayé de vérifier mes filtres sur le raster DEM pour la reconnaissance des formes et il en résulte toujours des dernières lignes et colonnes manquantes (comme..20) . J'ai essayé avec la bibliothèque PIL, la charge d'image. Puis avec numpy. La sortie est la même.
Je pensais que quelque chose ne va pas avec mes boucles, lors de la vérification des valeurs dans le tableau (juste en sélectionnant les pixels avec Identification dans ArcCatalog), j'ai réalisé que les valeurs des pixels n'étaient pas chargées dans un tableau.
Donc, il suffit d'ouvrir, de mettre en tableau et d'enregistrer l'image à partir du tableau:
a=numpy.array(Image.open(inraster)) #raster is .tif Float32, size 561x253
newIm=Image.new(Im.mode, Im.size)
Image.fromarray(a).save(outraster)
Résultats en supprimant les dernières lignes et colonnes. Désolé, je ne peux pas poster l'image
N'importe qui pourrait aider à comprendre pourquoi? Et conseiller une solution?
MODIFIER:
J'ai donc réussi à charger de petits rasters dans un tableau numpy avec l'aide de gars, mais lorsque j'ai une image plus grande, je commence à avoir des erreurs. Je suppose que cela concerne les limites du tableau numpy, et donc le tableau est automatiquement remodelé ou smth comme ça ... Donc ex:
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
ima=numpy.array(inDs.GetRasterBand(1).ReadAsArray())
File "C:\Python25\lib\site-packages\osgeo\gdal.py", line 835, in ReadAsArray
buf_xsize, buf_ysize, buf_obj )
File "C:\Python25\lib\site-packages\osgeo\gdal_array.py", line 140, in BandReadAsArray
ar = numpy.reshape(ar, [buf_ysize,buf_xsize])
File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line 108, in reshape
return reshape(newshape, order=order)
ValueError: total size of new array must be unchanged
Le fait est que je ne veux pas lire bloc par bloc car j'ai besoin de filtrage, plusieurs fois avec des filtres différents, des tailles différentes.
Vous pouvez utiliser rasterio pour interfacer avec les tableaux NumPy. Pour lire un raster dans un tableau:
Cela lira tout dans un tableau numpy 3D
arr
, avec des dimensions[band, row, col]
.Voici un exemple avancé pour lire, modifier un pixel, puis l'enregistrer de nouveau dans le raster:
Le raster sera écrit et fermé à la fin de l' instruction "with" .
la source
arr.transpose((1, 2, 0))
obtenir (hauteur, largeur, bandes) de chaque fichier.np.append()
?Certes, je lis une vieille image png simple, mais cela fonctionne en utilisant scipy (
imsave
utilise cependant PIL):Mon png résultant est également de 81 x 90 pixels.
la source
scipy
etnumpy
.Ma solution en utilisant gdal ressemble à ceci. Je pense que c'est très réutilisable.
la source
j'utilise une image hyperspectrale avec 158 bandes. Je veux calculer le raster. mais je reçois
pour le
print(data1)
je n'ai que quelques "1", mais les valeurs réelles sont des flotteursAidez Plz à trouver l'erreur
la source