常用的遥感数据处理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。
- 坐标系统(使用OGC WKT格式表示的空间坐标系统或者投影系统)
- 地理仿射变换(使用仿射变换表示图上坐标和地理坐标的关系)
- GCPs(大地控制点记录了图上点及其大地坐标的关系,通过多个大地控制点可以重建图上坐标和地理坐标的关系)
- 元数据(键值对的集合,用于记录和影像相关的元数据信息)
- 栅格波段(使用GDALRasterBand类表示,真正用于存储影像栅格值,一个栅格数据可以有多个波段)
- 颜色表(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命令的网站:点此
参考: