Próbowałem sprawdzić filtry w rastrze DEM pod kątem rozpoznawania wzorców i zawsze powoduje to brak ostatnich wierszy i kolumn (np ...20) . Próbowałem z biblioteką PIL, ładowanie obrazu. Następnie z numpy. Dane wyjściowe są takie same.
Myślałem, że coś jest nie tak z moimi pętlami, podczas sprawdzania wartości w tablicy (tylko wybieranie pikseli z Identyfikacja w ArcCatalog) zdałem sobie sprawę, że wartości pikseli nie zostały załadowane do tablicy.
Wystarczy po prostu otworzyć, włożyć do tablicy i zapisać obraz z tablicy:
a=numpy.array(Image.open(inraster)) #raster is .tif Float32, size 561x253
newIm=Image.new(Im.mode, Im.size)
Image.fromarray(a).save(outraster)
Powoduje odcięcie ostatnich wierszy i kolumn. Przepraszamy, nie można opublikować obrazu
Ktoś może pomóc zrozumieć, dlaczego? I doradzić jakieś rozwiązanie?
EDYTOWAĆ:
Tak więc udało mi się załadować małe rastry do tablicy numpy z pomocą facetów, ale kiedy mam większy obraz, zaczynam dostawać błędy. Przypuszczam, że dotyczy limitów tablicy numpy, więc tablica jest automatycznie przekształcana lub tak dalej ... Więc np .:
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
Chodzi o to, że nie chcę czytać blok po bloku, ponieważ potrzebuję filtrowania, kilka razy z różnymi filtrami, różnymi rozmiarami .. Czy jest jakieś obejście lub muszę nauczyć się radowania według bloków: O
Możesz użyć rasterio do połączenia z tablicami NumPy. Aby odczytać raster do tablicy:
Spowoduje to odczytanie wszystkiego do trójwymiarowej tablicy 3D
arr
o wymiarach[band, row, col]
.Oto zaawansowany przykład czytania, edytowania piksela, a następnie zapisywania go z powrotem do rastra:
Raster zostanie zapisany i zamknięty na końcu instrukcji „with” .
źródło
arr.transpose((1, 2, 0))
pobranie (wysokość, szerokość, pasma) z każdego pliku.np.append()
?To prawda, że czytam zwykły stary obraz png, ale działa to przy użyciu scipy (
imsave
używa PIL):Mój wynikowy png to również 81 x 90 pikseli.
źródło
scipy
inumpy
.Moje rozwiązanie wykorzystujące gdal wygląda tak. Myślę, że jest bardzo wielokrotnego użytku.
źródło
Używam obrazu hiperspektralnego ze 158 pasmami. Chcę obliczyć raster. ale rozumiem
dla
print(data1)
mam tylko trochę „1”, ale rzeczywiste wartości to niektóre zmiennoprzecinkoweProszę o pomoc w znalezieniu błędu
źródło