GDAL+scikit-learn 遥感定量回归模型

(转载请在显著位置注明本人微信公众号stdrei)

Python是目前最流行的机器学习工具之一,有很多开源的工具包可以使用。超越R语言,Python成为最受欢迎的机器学习语言

在过去4年,Python 机器学习职位」上升趋势和与R的对比。

GDAL+scikit-learn 遥感定量回归模型_第1张图片
图片转自机器之心原文

因而,掌握Python语言,并将其用于遥感数据处理和定量反演,应该会是不错的。下面先介绍下GDAL,然后通过一个简单的例子实现在有地面采样值时构建遥感影像的回归模型。

GDAL(Geospatial Data Abstraction Library)是一个操作各种栅格地理数据格式的库。包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。它使用了一个单一的抽象数据模型就支持了大多数的栅格数据(GIS对栅格,矢量,3D数据模型的抽象能力实在令人叹服)。当然除了栅格操作,这个库还同时包括了操作矢量数据的另一个有名的库ogr(ogr这个库另外介绍),这样这个库就同时具备了操作栅格和矢量数据的能力。


接触遥感和GIS的,对GDAL这个库应该都不陌生,即时没上手用过,但也一定听过。有很多著名的GIS软件都使用了GDAL/OGR库, 包括商业公司ESRI的ArgGIS,Google的Google Earth和开源的GRASS GIS系统。 GDAL/OGR支持多种操作系统,可以同时对Linux和windows下的地理空间数据管理系统提供百余种矢量和栅格文件类型的支持。


python版的GDAL和其他的python库结合的很好,最直接、明显的支持是使用Numeric库来进行数据读取和操作。各种矩阵魔术可以发挥得淋漓尽致(图像其实就是矩阵)。

1. 获取数据

根据采样点坐标,利用QGIS或ArcGIS矢栅计算,得到每个采样点对应的遥感像素及其在不同波段的数值。

比如,在本例子中用到的数据,遥感每个pixel对应的值:


GDAL+scikit-learn 遥感定量回归模型_第2张图片
Landsat波段

采样值:


GDAL+scikit-learn 遥感定量回归模型_第3张图片
采样值

2. GDAL读取遥感数据

GDAL是由C++开发的,直接封装的python接口,用起来会多少有些别扭。在此基础上,Mapbox又开发了Rasterio的工具包,用起来更方便,更pythonic。不过,在本文中还是直接用GDAL。

Rasterio is a GDAL and Numpy-based Python library designed to make your work with geospatial raster data more productive, more fun — more Zen. It’s a new open source project from the satellite team at Mapbox.

import osgeo.gdal as gdal

driver = gdal.GetDriverByName('ENVI')
driver.Register()
raster = gdal.Open(filePath,gdal.GA_ReadOnly)
raster_array = raster.ReadAsArray()

遥感数据使用Landsat5数据,一共七个波段,显示第一个波段的图像

imshow(raster_array[0])
GDAL+scikit-learn 遥感定量回归模型_第4张图片
Paste_Image.png

3. Scikit-Learn构建简单线性模型

用python的,对Scikit-Learn这个机器学习包应该不陌生,提供了从预处理到监督学习非监督学习的算法,并且可以进行网格调参和Pipline。对Pandas的Dataframe也非常友好。

线性模型是最简单,也是最方便有用的工具了。

from sklearn import linear_model

clf = linear_model.LinearRegression()
clf.fit(bands,moist)

模型的参数

clf.coef_

输出:

array([[-0.00321884,  0.02964046, -0.01374858,  0.00107655, -0.00228321,
        -0.00152347,  0.00388506]])`
clf.score(bands,moist)

输出:

0.23889843856396475

(⊙o⊙)?R2才这么点。。。

GDAL+scikit-learn 遥感定量回归模型_第5张图片

这只是个例子而已,重要的是过程,能够充分利用Python机器学习生态圈中的丰富的工具包用于遥感等空间数据处理中。

4. 模型应用

首先需要对遥感图像的矩阵进行变换,每个pixel的数据变为一行记录,这样才可以直接用Sklearn的模型预测每个pixel上的采样值。直接用predict()方法,就可以根据将构建的模型应用于每个pixel上了。

b,w,h = shape(raster_array)
TMdata=raster_array.reshape(b,(w*h)).T
shape(TMdata)

(196L, 7L)

TM_predict=clf.predict(TMdata)

imshow(TM_predict.reshape(w,h))
plt.colorbar()
GDAL+scikit-learn 遥感定量回归模型_第6张图片
输出结果

5. 代码和示例数据下载

GDAL+scikit-learn 遥感定量回归模型_第7张图片
压缩包列表

百度网盘下载链接:http://pan.baidu.com/s/1skJtePJ 密码,请关注个人微信公众号,在公众号内回复gdalsklearn获取。

GDAL+scikit-learn 遥感定量回归模型_第8张图片
欢迎关注微信公众号

你可能感兴趣的:(GDAL+scikit-learn 遥感定量回归模型)