1

我想从多波段 GeoTIFF 绘制和 RGB 图像(因为它是卫星图像)并将其投影到指定的区域范围。

最近,我使用“georaster”成功地使用单波段栅格做到了这一点。但是,当我尝试对多波段栅格执行相同操作时,在调用image = georaster.MultiBandRaster(file, bands='all', load_data=extent)以与 georaster.SingleBandRaster 相同的方式加载子集数据后,出现以下错误:

回溯(最后一次调用):文件“slovakia.py”,第 15 行,在 image = georaster.MultiBandRaster(file, band='all', load_data=extent) File "/usr/local/lib/python2.7/ dist-packages/georaster/georaster.py",第 1249 行,init if self.r == None: ValueError: 具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

当我无法加载多波段数据的子集时,我尝试从 GeoTIFF 中包含的 3 个波段创建 RGB 图像,而不将其投影到底图。然而,结果相当令人惊讶。

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

由 3 个波段组成的 RGB 图像: RGB_image

GeoTIF 的波段 2 如下所示: band2_greyscale

我将欢迎有关 MultiBandRaster 的子集数据加载MultiBandRaster 的 RGB 绘图的任何帮助或建议。我也将感谢任何其他有关如何执行此操作的 python 方法。

4

1 回答 1

0

我在使用 georaster.MultiBandRaster 时遇到了一个非常相似的问题。切换到georaster.SingleBandRaster后,报错“ValueError: 多元素数组的真值不明确”。消失了,我能够显示一个单波段图。为了匹配底图轮廓,还需要执行180度翻转操作,语句为:np.flipud(image.r)。总而言之,似乎存在一个问题,可能与 Python >= 3.6 或 numpy 版本有关,这会导致函数 georaster.MultiBandRaster 期间出现错误消息。我会为它开一个新帖子。

于 2019-08-19T17:49:08.810 回答