遙感專欄:(一)常用的遙感資料處理python庫及環境搭建

視覺閆小亙發表於2020-10-02

一、GDAL

1.介紹

Geospatial Data Abstraction Library (GDAL)是使用C/C++語言編寫的用於讀寫空間資料的一套跨平臺開源庫。現有的大部分GIS或者遙感平臺,不論是商業軟體ArcGIS,ENVI還是開源軟體GRASS,QGIS,都使用了GDAL作為底層構建庫。

GDAL庫由OGR和GDAL專案合併而來,OGR主要用於空間要素向量向量資料的解析,GDAL主要用於空間柵格資料的讀寫。此外,空間參考及其投影轉換使用開源庫 PROJ.4進行。

目前,GDAL主要提供了三大類資料的支援:柵格資料,向量資料以及空間網路資料(Geographic Network Model)。

GDAL提供了C/C++藉口,並且通過SWIG提供了Python,Java,C#等的呼叫藉口。當我們在Python中呼叫GDAL的API函式時,其實底層執行的是C/C++編譯的二進位制檔案。

GDAL不但提供了API藉口方便開發人員自定義自己的功能,而且還提供了一系列實用工具(Command Line Tools)可以實現方便快速的空間資料處理。我們可以使用這些實用工具,結合Linux Shell指令碼或者Windows批處理指令碼進行大批量空間資料的批量處理。

2.柵格資料組織

GDAL中使用dataset表示一個柵格資料(使用抽象類GDALDataset表示),一個dataset包含了對於柵格資料的波段,空間參考以及後設資料等資訊。一張GeoTIFF遙感影像,一張DEM影像,或者一張土地利用圖,在GDAL中都是一個GDALDataset。

  1. 座標系統(使用OGC WKT格式表示的空間座標系統或者投影系統)
  2. 地理仿射變換(使用仿射變換表示圖上座標和地理座標的關係)
  3. GCPs(大地控制點記錄了圖上點及其大地座標的關係,通過多個大地控制點可以重建圖上座標和地理座標的關係)
  4. 後設資料(鍵值對的集合,用於記錄和影像相關的後設資料資訊)
  5. 柵格波段(使用GDALRasterBand類表示,真正用於儲存影像柵格值,一個柵格資料可以有多個波段)
  6. 顏色表(Color Table用於影像顯示

3.地理仿射變換

GDAL資料集有兩種方式表示柵格資料中像元位置(影像中某個點在影像中的行列號)和投影座標系(不是經緯度,是投影到二維平面的地理座標,二者可以通過地圖投影進行相互轉換)間的關係:仿射變換和GCP點。而大部分資料資料集都是通過仿射變換進行描述的。

仿射變換使用如下的公式表示柵格圖上座標和地理座標的關係:

XGeo = GeoTransform[0]+GeoTransform[1]*Xpixel+Ypixel*GeoTransform[2];
YGeo = GeoTransform[3]+GeoTransform[5]*Ypixel+Ypixel*GeoTransform[5];

其中,(XGeo,YGeo)表示對應於畫素座標(Xpixel,Ypixel)的實際地理座標。對一個上北下南的影像,GeoTransform[2]和GeoTransform[4]等於0,GeoTransform[1]是像元的寬度(在x方向上的解析度大小), GeoTransform[5]是像元的高度(在y方向上的解析度大小)。(GeoTransform[0],GeoTransform[3])座標對錶示左上角像元的實際地理座標。通過這個仿射變換,我們可以得到圖上所有像元對應的地理座標。

4.python庫環境搭建

windows環境下,在安裝GDAL、Opencv等依賴包時,需要提前安裝依賴包numpy。pip命令如下:

pip install numpy

然後,可使使用常規的pip命令進行安裝:

pip install gdal

或者使用conda命令進行安裝:

conda install gdal

說明:pip與conda的區別
(1)pip專門管理pyhton依賴包,其基於原始碼安裝,因此如果你無法編譯原始碼,那麼安裝將會很難受;
(2)conda可以允許你在conda環境中安裝任何語言的依賴包(c或python等),其從二進位制檔案安裝,這意味著有人完成了艱苦的編譯工作,因此安裝將很簡單。
(3)由於pip不能安裝和解析conda的包格式,因此不能互動使用conda和pip。

二、Opencv

1.介紹

眾所周知,OpenCV 是一個開源的計算機視覺庫。它由一系列 C 函式和少量 C++ 類構成,實現了影像處理和計算機視覺方面的很多通用演算法。

2.Opencv提供的功能

  • 影像資料操作(記憶體分配與釋放,影像複製、設定和轉換)
  • 影像/視訊的輸入輸出(支援檔案或攝像頭的輸入,影像/視訊檔案的輸出)
  • 矩陣/向量資料操作及線性代數運算(矩陣乘積、矩陣方程求解、特徵值、奇異值分解)
  • 支援多種動態資料結構(連結串列、佇列、資料集、樹、圖)
  • 基本影像處理(去噪、邊緣檢測、角點檢測、取樣與插值、色彩變換、形態學處理、直方圖、影像金字塔結構)
  • 結構分析(連通域/分支、輪廓處理、距離轉換、影像矩、模板匹配、霍夫變換、多項式逼近、曲線擬合、橢圓擬合、狄勞尼三角化)
  • 攝像頭定標(尋找和跟蹤定標模式、引數定標、基本矩陣估計、單應矩陣估計、立體視覺匹配)
  • 運動分析(光流、動作分割、目標跟蹤)
  • 目標識別(特徵方法、HMM模型)
  • 基本的GUI(顯示影像/視訊、鍵盤/滑鼠操作、滑動條)
  • 影像標註(直線、曲線、多邊形、文字標註)

3.Opencv包含的模組

  • cv – 核心函式庫
    • OpenCV基本資料結構
    • 動態資料結構
    • 繪圖函式
    • 陣列操作相關函式
    • 輔助功能與系統函式和巨集
    • 與OpenGL的互操作
  • cvaux – 輔助函式庫
  • cxcore – 資料結構與線性代數庫
  • highgui – 高層GUI圖形使用者介面,包含媒體的輸入輸出、視訊捕捉、影像和視訊的編碼解碼、圖形互動介面的介面等
  • ml – 機器學習函式庫
  • legacy – 一些已經廢棄的程式碼庫、用來向下相容
  • gpu – 運用GPU加速的計算機視覺模組
  • flann – 高維的近似近鄰快速搜尋演算法庫
    • 快速近似最近鄰搜尋
    • 聚類
  • features2d – 2D功能框架
    • 特徵檢測和描述
    • 特徵檢測器(Feature Detectors)通用介面
    • 描述符提取器(Descriptor Extractors)通用介面
    • 描述符匹配器(Descriptor Matchers)通用介面
    • 通用描述符(Generic Descriptor)匹配器通用介面
    • 關鍵點繪製函式和匹配功能繪製函式
  • nonfree – 一些具有專利的演算法模組
  • objdetect – 目標檢測模組
  • ocl – 運用OpenGL加速的計算機視覺元件模組
  • photo – 影像修復和影像去噪
  • stiching – 影像拼接模組
  • superres – 超解析度技術的相關功能模組
  • ts – OpenCV測試相關程式碼
  • video – 視訊穩定相關元件
  • contrib – 新增的人臉識別、立體匹配、人工視網膜模型等技術
  • calib3d – 用於相機校準和三維重建
  • imgproc – 影像處理模組
    • 線性和非線性的影像濾波
    • 影像的幾何變換
    • 其他(Miscellaneous)影像轉換
    • 直方圖相關
    • 結構分析和形狀描述
    • 運動分析和物件跟蹤
    • 特徵檢測
    • 目標檢測等內容

4.Pyhton庫環境搭建

安裝指定版本,可使用如下pip命令:

pip install opencv-contrib-python==3.4.2.17

說明:上訴pip命令同時安裝了Opencv及其擴充套件模組(不穩定模組)。此外,安裝Opencv前仍要提前安裝numpy依賴包,具體方法參考gdal中介紹。
查詢Opencv現有版本的安裝pip命令的網站:點此

參考:

  1. https://blog.csdn.net/theonegis/article/details/80304873
  2. https://blog.csdn.net/mjyywd/article/details/20370731
  3. https://blog.csdn.net/qq_41204464/article/details/86530217
  4. https://www.cnblogs.com/pangliang/archive/2010/11/21/1883566.html
  5. https://blog.csdn.net/u012198575/article/details/82020980

相關文章