[英]How to project RGB multiband GeoTIFF to specified area extent using python?
我想繪制多波段GeoTIFF的RGB圖像(因為是衛星圖像)並將其投影到指定的區域范圍。
最近,我成功地使用“ georaster”對單波段柵格進行了此操作。 但是,當我嘗試對多波段柵格進行同樣的操作時,在調用image = georaster.MultiBandRaster(file, bands='all', load_data=extent)
以與georaster.SingleBandRaster相同的方式加載子集數據后,以下錯誤:
追溯(最近一次通話最近):文件“ slovakia.py”,第15行,圖像= georaster.MultiBandRaster(文件,bands =“全部”,load_data =范圍)文件“ /usr/local/lib/python2.7/ dist-packages / georaster / georaster.py“,行1249,如果self.r == None,則在init中初始化 :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方法,我也將不勝感激。
使用georaster.MultiBandRaster時,我遇到了非常相似的問題。 切換到georaster.SingleBandRaster后,錯誤消息“ ValueError:具有多個元素的數組的真實值不明確。” 走了,我就能顯示一個波段圖。 為了與底圖輪廓匹配,還需要使用以下語句執行180度翻轉操作:np.flipud(image.r)。 總之,似乎存在一個問題,可能與Python> = 3.6或numpy版本有關,這會在函數georaster.MultiBandRaster期間導致錯誤消息。 我將為此開設新職位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.