如何使用python将RGB多波段GeoTIFF投影到指定区域?

时间:2019-01-14 09:25:28

标签: python image matplotlib-basemap rasterio

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

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

  

回溯(最近一次通话最后一次):文件“ slovakia.py”,第15行,在          图片= georaster.MultiBandRaster(文件,bands ='all',load_data = extent)文件   “ /usr/local/lib/python2.7/dist-packages/georaster/georaster.py”行   1249,在 init 中       如果self.r ==无: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方法,我也将非常感激。 。

1 个答案:

答案 0 :(得分:0)

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