常用的遥感数据处理python库及环境搭建

  • 一、GDAL
  • 1.介绍
  • 2.栅格数据组织
  • 3.地理仿射变换
  • 4.python库环境搭建
  • 二、Opencv
  • 1.介绍
  • 2.Opencv提供的功能
  • 3.Opencv包含的模块
  • 4.Pyhton库环境搭建


一、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

然后,使用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命令的网站:点此

参考: