1. 程式人生 > 其它 >基於Python的遙感視覺化

基於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檢視後發現該庫已經被標記放棄了,不會再做進一步的維護,也就沒有再細究(比較懶哈哈)。


原文連線:https://medium.com/towards-data-science/reading-and-visualizing-geotiff-images-with-python-8dcca7a74510