Eu tenho tentado verificar meus filtros no DEM raster para reconhecimento de padrões e isso sempre resulta em falta das últimas linhas e colunas (como 20) . Eu tentei com a biblioteca PIL, carregamento de imagem. Então com entorpecido. A saída é a mesma.
Eu pensei que algo estava errado com meus loops, ao verificar os valores na matriz (apenas escolhendo pixels com Identificação no ArcCatalog), percebi que os valores de pixel não eram carregados em uma matriz.
Então, basta abrir, colocar no array e salvar a imagem do array:
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 no corte das últimas linhas e colunas. Desculpe, não posso postar a imagem
Alguém poderia ajudar a entender o porquê? E aconselhar alguma solução?
EDITAR:
Então, consegui carregar pequenos rasters em um array numpy com a ajuda de caras, mas ao ter uma imagem maior, começo a receber erros. Suponho que seja sobre os limites da matriz numpy e, portanto, a matriz é automaticamente remodelada ou algo assim ... Então 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
O ponto é que eu não quero ler bloco por bloco, pois preciso filtrar, várias vezes com filtros diferentes, tamanhos diferentes. Existe alguma solução alternativa ou devo aprender a radar por blocos: O
Você pode usar o rasterio para fazer interface com matrizes NumPy. Para ler uma varredura em uma matriz:
Isso lerá tudo em uma matriz numpy 3D
arr
, com dimensões[band, row, col]
.Aqui está um exemplo avançado para ler, editar um pixel e salve-o novamente na varredura:
A varredura será gravada e fechada no final da instrução "with" .
fonte
arr.transpose((1, 2, 0))
obter (altura, largura, faixas) de cada arquivo.np.append()
?É verdade que estou lendo uma imagem png antiga, mas isso funciona usando o scipy (
imsave
embora use PIL):Meu png resultante também tem 81 x 90 pixels.
fonte
scipy
enumpy
.Minha solução usando gdal se parece com isso. Eu acho que é muito reutilizável.
fonte
estou usando uma imagem hiperespectral com 158 bandas. Eu quero calcular raster. mas eu entendo
para o
print(data1)
eu tenho apenas alguns "1", mas os valores reais são alguns carros alegóricosPlz ajuda a encontrar o erro
fonte