(转载请在显著位置注明本人微信公众号stdrei)
Python是目前最流行的机器学习工具之一,有很多开源的工具包可以使用。超越R语言,Python成为最受欢迎的机器学习语言
在过去4年,Python 机器学习职位」上升趋势和与R的对比。
因而,掌握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对应的值:
采样值:
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])
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
才这么点。。。
这只是个例子而已,重要的是过程,能够充分利用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()
5. 代码和示例数据下载
百度网盘下载链接:http://pan.baidu.com/s/1skJtePJ 密码,请关注个人微信公众号,在公众号内回复gdalsklearn
获取。