Как спроецировать многополосный RGB GeoTIFF на заданный экстент области с помощью Python?

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

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

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

Когда мне не удалось загрузить подмножество многополосных данных, я попытался создать изображение RGB из трех каналов, содержащихся в 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 о том, как это сделать.


person Lubomir Franko    schedule 14.01.2019    source источник


Ответы (1)


У меня была очень похожая проблема при использовании georaster.MultiBandRaster. После переключения на georaster.SingleBandRaster появляется сообщение об ошибке «ValueError: истинное значение массива с более чем одним элементом неоднозначно». ушел, и я смог отобразить график с одной полосой. Чтобы соответствовать контуру базовой карты, также требовалось выполнить операцию переворота на 180 градусов с помощью оператора: np.flipud (image.r). Таким образом, похоже, существует проблема, вероятно, связанная с версией Python> = 3.6 или numpy, которая вызывает сообщение об ошибке во время функции georaster.MultiBandRaster. Я открою для этого новый пост.

person Claude Falbriard    schedule 19.08.2019