4 votos

Cómo utilizar rasterio transform en todas las bandas

He importado un raster tif de 10 bandas usando rasterio como ds. Estoy tratando de acolchado de la imagen, pero seguir recibiendo errores con la transformación.

print(ds.transform)
pilpadimg = rasterio.pad(ds.read(), transform=ds.transform, pad_width=((0,0),(1,2),(3,4)), mode='reflect')

| 15.00, 0.00, 344117.00|
| 0.00,-15.00, 5082412.00|
| 0.00, 0.00, 1.00|
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-77-9526c3dd4939> in <module>
      1 print(ds.transform)
----> 2 pilpadimg = rasterio.pad(ds.read(), transform=ds.transform.identity(), pad_width=((0,0),(1,2),(3,4)), mode='reflect')

~\AppData\Local\Continuum\anaconda3\envs\pytorch\lib\site-packages\rasterio\__init__.py in pad(array, transform, pad_width, mode, **kwargs)
    279     padded_array = np.pad(array, pad_width, mode, **kwargs)
    280     padded_trans = list(transform)
--> 281     padded_trans[2] -= pad_width * padded_trans[0]
    282     padded_trans[5] -= pad_width * padded_trans[4]
    283     return padded_array, Affine(*padded_trans[:6])

TypeError: can't multiply sequence by non-int of type 'float'

Funciona muy bien con numpy, pero no hay ninguna transformación..

>>> x = np.ones((8,3,3))
>>> np.pad(x, pad_width=((0,0),(1,2),(3,4)), mode='constant', constant_values=0)

pad_width tiene que ser un int y el transform es un float. He convertido la lista de transformaciones a int y sigo obteniendo el mismo error

EDITAR: Arreglado simplemente usando numpy para rellenar en lugar de rasterio

pilpadimg = np.pad(ds.read(),pad_width=[(0,0),(1,2),(3,4)], mode='reflect')

3voto

Tony Bolero Puntos 118

Los documentos de Rasterio para pad digamos:

pad_width: int
    number of pixels to pad array on all four sides

Por lo tanto, es necesario pasar un único valor, no numpy de la secuencia de valores antes/después:

pilpadimg = rasterio.pad(ds.read(), transform=ds.transform, pad_width=42, mode='reflect')

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X