Как спроецировать RGB многополосный GeoTIFF на заданный экстент области, используя python? - PullRequest
0 голосов
/ 14 января 2019

Я хочу построить и RGB-изображение (потому что это спутниковое изображение) из многополосного GeoTIFF и спроецировать его на заданный экстент площади.

Недавно мне удалось это сделать с помощью однополосного растра, используя "georaster". Однако, когда я попытался сделать то же самое для многоканального растра, после вызова image = georaster.MultiBandRaster(file, bands='all', load_data=extent) для загрузки данных подмножества так же, как с georaster.SingleBandRaster, я получаю следующую ошибку:

Traceback (последний вызов был последним): файл "s Slovakia.py", строка 15, в image = georaster.MultiBandRaster (файл, диапазоны = 'все', load_data = экстент) Файл "/usr/local/lib/python2.7/dist-packages/georaster/georaster.py", строка 1249, в init if self.r == None: ValueError: Значение истинности массива с более чем одним элементом является неоднозначным. Используйте a.any () или a.all ()

Когда мне не удалось загрузить подмножество многоканальных данных, я попытался создать и RGB-изображение из 3-х полос, которые содержатся в GeoTIFF, без проецирования его на базовую карту. Однако результат довольно неожиданный.

import georaster
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib.pyplot import figure
import numpy as np
import matplotlib.cm as cm

file = "/home/lubomir/Desktop/Sentinel3_SLSTR/RGB/SLSTR_201901100859_Natural_Color.tif"
defllon = 16
defllat = 47
defulon = 23
defulat = 50.5
extent = (defllon,defulon,defllat,defulat)

image = georaster.MultiBandRaster(file, bands='all')
resulting_image = np.array(image.r[:,:,:], dtype='float32')
print resulting_image.shape

m = Basemap(epsg=3395,llcrnrlat=47,urcrnrlat=50.5,\
            llcrnrlon=16,urcrnrlon=23,resolution='i')
m.drawcoastlines(linewidth=1, color='g', zorder=2)
m.drawcountries(linewidth=1, color='m', zorder=2)
m.imshow(resulting_image, origin='upper', zorder=1, cmap=cm.gray)

plt.savefig('test.tiff',dpi=600,transparent=True,bbox_inches=None,frameon=False)
plt.show()
resulting_image=None

Однополосный растр проецируется на указанную область: Single_band

RGB изображение, состоящее из 3 полос: RGB_image

В то время как группа 2 GeoTIF выглядит следующим образом: band2_greyscale

Я буду рад любой помощи или предложениям относительно загрузки данных подмножества MultiBandRaster или RGB-графиков MultiBandRaster. Я был бы также благодарен за любые другие методы python, как это сделать.

...