He estado tratando de verificar mis filtros en el ráster DEM para el reconocimiento de patrones y siempre resulta en la falta de las últimas filas y columnas (como ... 20) . He intentado con la biblioteca PIL, carga de imágenes. Luego con numpy. La salida es la misma.
Pensé, algo estaba mal con mis bucles, al verificar los valores en la matriz (simplemente seleccionando píxeles con identificación en ArcCatalog) me di cuenta de que los valores de píxeles no se cargaban en una matriz.
Entonces, simplemente abriendo, colocando en la matriz y guardando la imagen de la matriz:
a=numpy.array(Image.open(inraster)) #raster is .tif Float32, size 561x253
newIm=Image.new(Im.mode, Im.size)
Image.fromarray(a).save(outraster)
Resulta en cortar las últimas filas y columnas. Lo sentimos, no puedo publicar la imagen
¿Alguien podría ayudar a entender por qué? ¿Y aconsejar alguna solución?
EDITAR:
Entonces, logré cargar pequeños rásteres en una matriz numpy con la ayuda de muchachos, pero cuando tengo una imagen más grande empiezo a obtener errores. Supongo que se trata de los límites de la matriz numpy, por lo que la matriz se reforma automáticamente o algo así ... Entonces, por ejemplo:
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
El punto es que no quiero leer bloque por bloque, ya que necesito filtrar, varias veces con diferentes filtros, diferentes tamaños ... ¿Hay alguna solución o debo aprender rading por bloques: O
Puede usar rasterio para interactuar con matrices NumPy. Para leer un ráster en una matriz:
Esto leerá todo en una matriz numpy 3D
arr
, con dimensiones[band, row, col]
.Aquí hay un ejemplo avanzado para leer, editar un píxel y luego guardarlo de nuevo en el ráster:
El ráster se escribirá y se cerrará al final de la declaración "con" .
fuente
arr.transpose((1, 2, 0))
obtener (altura, ancho, bandas) de cada archivo.np.append()
?De acuerdo, estoy leyendo una imagen png antigua y simple, pero esto funciona usando scipy (
imsave
aunque usa PIL):Mi png resultante también es 81 x 90 píxeles.
fuente
scipy
ynumpy
.Mi solución usando gdal se ve así. Creo que es muy reutilizable.
fuente
Estoy usando una imagen hiperespectral con 158 bandas. Quiero calcular la trama. pero consigo
para el
print(data1)
obtuve solo un "1", pero los valores reales son algunos flotantesPor favor ayuda a encontrar el error
fuente