基於Python的遙感視覺化
寫在前面
首先本文原作者為:Mohit Kaushik,翻譯行為已獲得本人許可。
最近在做一些基礎遙感分析,需要對處理後影像視覺化,課本上的方法很原始,帶著你造一遍輪子,從地理座標到轉到畫素座標……,本著偷懶的原則,有意中發現這篇遙感視覺化文章。
使用Python讀取影象非常簡單,因為針對不同的影象格式,它提供了簡便的第三方庫,用來讀取、視覺化、編輯等,例如Matplotlib、OpenCV、Pillow……。上述庫對於流行的常見影象格式,如png、jpg、jpeg 可以流暢處理,但是對於GeoTiff格式卻不行,如果你熟知GeoTiff格式和其他影象格式之間的區別,想必一定能猜到其中的緣由。
GeoTIff 是一個標準的.tif 檔案或是一個影象檔案格式,它包含了一些額外的空間資訊,這些資訊被當成附屬資訊(tag),整合在.tif檔案內。這些附屬資訊包含了空間範圍、地理參考系統(CRS)、解析度,以及每一個畫素的值。基於此,GeoTiff是一種非常理想的遙感影像和航空相片分發格式。
本文討論幾種在jupyter notebook環境中利用Python讀取的視覺化的方式,主要用到如下幾個庫:GDAL、Rasterio、georaster以及Matplotlib。這些庫可以幫助我們快速地將影象轉換為Numpy庫的陣列(array)格式,然後我們就可以通過TensorFlow或numpy做一些影象轉換,儘管本文沒有涉及。
關於Python庫的安裝,網上有相對比較詳細的介紹,這裡就不一一記錄了。
基於GDAL
首先肯定是老大哥了,gdal是最流行的GeoTiff處理庫,但是嘛比較難以安裝,並且不易上手,GDAL擁有由C++編寫的方法和類,這裡我們使用它的Python繫結。絕大部分的庫,諸如georaster等,也是在運用GDAL的基礎上,開發出符合Python風格的介面。
from osgeo import gdal import matplotlib.pyplot as plt dataset = gdal.Open("./raster/Yunnan_light.tif", gdal.GA_ReadOnly) band = dataset.GetRasterBand(1) # 波段序號從1開始,而不是0 plt.figure(figsize=(10, 10)) plt.imshow(band.ReadAsArray()) plt.show()
基於Rasterio
Rasterio由mapbox團隊開發,它提供了一系列用於讀取地理空間資料的Python介面。
它可以配合Matplotlib庫使用。
另外,rasterio擁有自身的視覺化方法。
發現不同沒有,上面這張圖,它的座標顯示的是經緯度,而不是數字。
基於georaster
georaster 出現一些問題,讀取包含多個波段的影象時,按照官方的示例程式碼會出現問題,上github檢視後發現該庫已經被標記放棄了,不會再做進一步的維護,也就沒有再細究(比較懶哈哈)。