Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
ISSN1672-4305
CN12-1352 / N实 验 室 科 学
LABORATORY
SCIENCE第 23 卷 第 5 期 2020 年 10 月
Vol. 23 No. 5 Oct. 2020
GDAL 在遥感图像处理实习教学中的应用实践
吕秀琴1, 张 毅2
(武汉大学 1.
资源与环境科学学院; 2.
测绘学院, 湖北
武汉 430079)
摘 要: 为了进一步提高 “遥感图像处理实习” 教学的质量, 在增强学生对算法理解深度的同时简化编程难
度, 比较了各种开源遥感图像处理平台, 选择基于 GDAL 进行遥感图像处理实习教学, 设计了 GDAL 编程实
习环节, 主要包括遥感图像的输入输出、 遥感图像波段组合、 遥感图像投影转换和遥感图像几何纠正, 并采
取将 ERDAS 操作和 GDAL 编程教学实践相结合的方式实习。 通过 GDAL 遥感实习教学应用实践, 改变了遥感
实习只强调操作流程和过于注重基础编程的实习状态, 提高了实习教学的效率和效果。关键词: 开源平台; GDAL; 遥感图像处理;
波段组合; 投影转换
中图分类号:TP7 文献标识码:A doi:10. 3969 / j. issn. 1672-4305. 2020. 05. 023
Practice
of
using
GDAL
in
remote
sensing
processing
teaching
LÜ
Xiuqin1, ZHANG
Yi2
(1.
School
of
Resource
and
Environment
Science;
2.
School
of
Geodesy
and
Geomatics,
Wuhan
Uni-versity,
Wuhan
430079,
China)
Abstract: In
order
to
improve
the
quality
of
remote
sensing
image
processing
practice
teaching,
and
to
enhance
students’
understanding
of
the
algorithm
while
simplifying
the
difficulty
of
programming,
GDAL
is
selected
for
teaching
course
by
comparing
several
open
source
platforms.
The
practical
teach-ing
includes
import / export
of
remote
sensing
images,
band
combination,
reprojection
and
image
merge,
and
take
the
way
of
combining
ERDAS
operation
with
GDAL
programming
teaching
practice.
Through
the
application
practice
of
GDAL,
the
practice
state
that
only
emphasizes
the
operation
process
and
the
basic
programming
is
changed.
It
concluded
that
GDAL
is
helpful
for
improving
the
practice
efficiency
and
teaching
effect.Key
words: open
source
platform;
GDAL;
remote
sensing
processing;
band
combination;
reprojec-tion
收稿日期:2018-11-07 修改日期:2019-04-30作者简介:吕秀琴,博士,高级实验师,主要研究方向为 GIS 及增
强现实技术。 E-mail:winterlxq@ whu. edu. cn通讯作者:张毅,博士,副教授,主要研究方向为遥感图像、摄影测
量及激光点云处理。 E-mail:yzhang@ sgg. whu. edu. cn基金项目:武汉大学实验技术项目(项目编号:WHU-2018-SYJS-
08);地理信息工程国家重点实验室开放基金项目(项
目编号:SKLGIE2018-M-4-2)。
“遥感图像处理实习”是测绘工程专业学生的
重要实习内容。 通过实习操作以及编程实践,让学
生巩固对遥感图像处理基本原理和重要算法的理
解,为从事遥感相关项目的研究和开发奠定基础。当前测绘工程专业“遥感图像处理实习” 教学
主要采取商业软件 ERDAS 软件和编程相结合的方
式。 在为期两周的 ERDAS 软件实习中,要求学生
对 ERDAS 软件各功能模块进行了详细的学习,通过实例演示让学生了解软件的功能架构和数据处理
流程,在实习任务书的指导下,重点要求学生完成遥
感图像输入输出、波段组合、投影信息处理的相关操
作。 在为期一周的遥感编程实践中,要求按照遥感
图像处理算法,设计程序实现遥感影像的融合和几
何纠正算法。 通过 ERDAS 软件和编程相结合的方
式,使学生巩固了遥感技术基本原理和方法,掌握了
遥感图像处理的基本算法,达到了实习教学的目的。然而,由于学生具备的编程能力和实习周期的限制,学生在编程实践环节中通常是基于 Matlab、C + +、
吕秀琴,等:GDAL 在遥感图像处理实习教学中的应用实践
Python 等环境进行编程,不少学生将大量时间花费
在了遥感图像的基本操作和访问上,重要处理算法
的关注程度、理解深度以及重复实验和对比实验还
比较欠缺。为了进一步提高实习教学的质量,考虑如何在
编程实践环节将学生从基本的遥感图像读取显示等
底层处理中解放出来,使学生将更多的精力投入到
遥感图像重要处理算法和对比实验中去,尝试在实
习教学中引入开源遥感图像处理平台,通过性能和
特点比较,选择基于 GDAL 进行遥感图像处理实习
教学,内容包括遥感图像的输入输出、遥感图像波段
组合、遥感图像投影转换和遥感图像几何纠正。 结
合 ERDAS 软件操作环节的对比实验,不仅提高了
实习效率,也更加深了学生的算法理解和分析能力。
1 GDAL 开源栅格空间数据转换库
在空间数据处理领域,有许多成熟的开源平台,如
OSSIM、GRASS、QGIS、UDIG、SharpMap、MapWin-dows、OpenCV 等[1] 。 这些开源平台都支持栅格数
据的访问和处理,包括栅格文件读取和格式转换
(JPG、BMP、PNG、GeoTiff、IMG)、地图投影( PROJ.4、OGR)和图像漫游、缩放、查询等操作。 OSSIM[2]
是一个用于遥感图像处理、地理信息系统、摄影测量
领域的高性能软件,其设计目的是为摄影测量与遥
感软件包的开发人员提供整合的方法及流程。GRASS[3]地理资源分析支持系统是由美国军方建筑
工程研究实验室的研究人员设计并开发的一个地理
信息系统软件,其开发界面和使用主要针对专业编
程人员。 基于 Eclipse 平台的 UDIG[4] 运行效率较
低,比较占用系统资源。 SharpMap[5] 是一个主要用
于 Web 应用程序的平台。 MapWinGIS[6 - 7]是一套开
源二次开发组件库,主要功能包括:打开,编辑,保存
Image、Grid、Shapfile、TIN、DBF 格式的文件、在地图
中对图形进行浏览、标注、支持矢量数据的符号化、栅格数据的透明显示等。 OpenCV[8] 是一个开源的
跨平台计算机视觉库,具有丰富的图像和计算机视
觉函数库,良好的跨平台性。 但主要面向视频图像
和机器视觉领域,尚不能对卫星遥感图像的多光谱
信息和空间坐标系统的有效支持。对于“遥感图像处理实习”教学,主要考虑如何
在编程实践环节将学生从基本的遥感图像读取显示
等底层处理中解放出来,并非使用整个开源平台的
所有功能,因此只需要抽取其中部分的模块库。 在
多数的开源平台中,都利用了 GDAL 作为图像处理
的基本工具。 GDAL( Geospatial
Data
Abstraction
Li-
brary) [9]是一个在 X / MIT 许可协议下的开源栅格空
间数据转换库,它利用抽象数据模型来表达所支持
的绝大多数栅格数据文件的读写操作。 GDAL 具有
开源、跨平台、易扩展、功能强大等特点,一直是图像
处理程序开发人员心中的首选[10] 。 而且 ArcGIS、Erdas、Google
Earth 等商业软件中也有 GDAL 的支
持。 GDAL 支持的数据模型十分丰富,包括数据集
(Dataset)、坐标系统(Coordinate
System)
、仿射地理
坐标转换 ( Affine
Geo
Transform )
、 大地控制点
(GCPs)
、 元数据 ( Metadata)
、 栅格波段 ( Raster
Band)
、颜色表( Color
Table)
、子数据集域( Sub-datasets
Domain)
、图像结构域( Image
Structure
Do-main)
、XML 域(XML:Domains)。 此外 GDAL 封装
的 OGR 支持投影和基准面的定义 ( Spatial
Refer-ence)。 因此 GDAL 完全能够满足遥感图像编程实
习的需求。
2 GDAL 编程实习环节设计
2. 1 编程环境配置
编程环境的建立选择比较通用的 Microsoft
Vis-ual
Studio。 在此环境下,GDAL 提供方便的环境配
置方式,即在工程的 Include
files 和 Library
files 中
分别添加 GDAL 的头文件目录和 LIB 文件目录
(gdal_i. lib),gdal 动态库放在 exe 目录下即可。 然
后在代码前添加:#include
" gdal_priv. h" ,#include
"gdal. h" 和 using
namespace
std 等声明,就可以开始
调用 GDAL 库里的基本函数。 简单的环境配置过程
容易让学生接受,不被繁琐的配置过程所影响。2. 2 遥感图像输入输出
遥感图像的输入输出是整个实习过程中的基础
环节。 由于遥感图像具有大数据量、多波段、包含空
间坐标基准和投影等信息、文件格式多样等特点,传统的编程方式需要针对以上每一个特点逐个进行编
程实现后,才算完整地实现了一幅遥感图像访问,因而需要占用较多的时间。 GDAL 的优势在于封装了
以上访问过程,仅仅使用 GDALOpen 打开文件后返
回 GDALDataset 类,再用中 GDALDataset 封装的函
数就可以对各种遥感图像实现统一的访问。GDALOpen 打开一个遥感图像文件,返回一个
GDALDataset 实例;GDALDataset::GetRasterXSize 获
取图像宽度(像素);GDALDataset:: GetRasterYSize 获取图像高度
(像素);GDALDataset::GetRasterCount 获取图像波
段数;GDALDataset::GetRasterBand 访问特定波段;GDALDataset::GetGeoTransform 获取图像地理参考
78
坐标;GDALDataset::RasterIO 访问图像像素进行灰
度读写。 其中 RasterIO 的功能最为丰富,函数如下:CPLErr
GDALDataset:: RasterIO ( GDALRWFlag
eRWFlag,int
nXOff,int
nYOff,int
nXSize,int
nYSize,void
∗
pData, int
nBufXSize, int
nBufYSize, GDAL-DataType
eBufType,int
nBandCount,int
∗
panBand-Map, int
nPixelSpace, int
nLineSpace, int
nBandSpace)。eRWFlag 的枚举值 GF_Read 和 GF_Write 分别
表示读和写。 nXOff,
nYOff 表示读取或者写入图像
数据的起始坐标,nXSize,
nYSize 表示读取或者写入
图像数据的宽和高,pData 是图像灰度数据指针,其数据类型是通过后面的 eBufType 参数来指定。nBandCount 表示图像波段数,panBandMap 表示特定
波 段 的 序 号 数 组, nPixelSpace, nLineSpace,nBandSpace
分别对应于 BIP、BIL 和 BSQ 图像类型
的字节偏移量。 可见,一个函数就把遥感图像有关
波段、数据类型、像素值类型等信息统一起来,不仅
可以巩固遥感图像知识,也大大简化了编程过程。根据 RasterIO 函数的特点,设计的编程实践的内容
包括:(1) 真彩色和多光谱图像的读写,使用 pan-
BandMap 参数;(2)8、11、12bit 及浮点图像的读写,使用 eBuf-
Type 参数;(3) BIP、 BIL、 BSQ 图像的读写, 使用 nPixel-
Space,nLineSpace,nBandSpace
参数;(4)图像任意区域的读写,使用 nXOff,
nYOff和 nXSize,
nYSize 参数。2. 3
遥感图像波段组合
遥感图像具有多光谱特点,在进行图像绘制显
示时可以任意选择 1 ~ 3 个波段进行假彩色合成,还可以在图像输出时任意选择若干波段进行组合输
出。 同样通过设置 RasterIO
函数的参数,就可以实
现遥感图像的波段组合。 例如组合标准假彩色图像
432 波段的实现代码为:bandmap[0] = 4;bandmap[1] = 3;bandmap[2]
= 2;RasterIO ( GF _ Read,
0,
0, nImgSizeX, nImgSi-zeY,
pafScan, ImgSizeX, nImgSizeY, GDT _ Byte, 3,bandmap,3,Scanline∗3,1
);
bandmap 数组的序号决定了所要组合的波段及
顺序。 通过对以上代码的实现和参数调整,设计的
编程实践的内容包括:(1)将多光谱图像的所有波段抽取为单一图像;
(2)将单波段图像组合为多光谱图像;(3)任意波段组合假彩色显示。
2. 4
遥感图像投影转换
遥感图像的重要特点是具有坐标系统,包括地
理坐标系和投影坐标系,这也是“遥感图像处理实
习”要向学生进行强化的知识点。 在 GDAL 中,定义坐标系统 (投影和基准面) 和坐标转换分别由
OGRSpatialReference
类和 OGRCoordinateTransforma-tion
类来实现。定义地理坐标系用 OGRSpatialReference::Set-
GeogCS 函数实现。 定义投影坐标系的过程为:首先
调用 SetProjCS 函数设置投影坐标系统名称,然后使
用 SetGeogCS 函数指定地理坐标系统,最后调用函
数 SetUTM 设置投影转换参数信息。最后根据定义的坐标系信息和投影信息,利用坐
标转换函数实现图像的投影转换。 首先用 OGRCre-ateCoordinateTransformation()函数创建新的坐标转换
对象,再调用 OGRCoordinateTransformation::Transform()进行坐标转换。 例如将地理坐标系下的图像转换
为 WGS84 椭球体上的 UTM 投影图像:OGRSpatialReference
oUTM,
∗poLatLong;
OGRCoordinateTransformation
∗poTransform;
oUTM. SetProjCS(" UTM
15 /
WGS84" );
oUTM. SetWellKnownGeogCS(
" WGS84"
);
oUTM. SetUTM(15);
poLatLong
=
oUTM. CloneGeogCS();poTransform =
OGRCreateCoordinateTransforma-tion(&oUTM,
poLatLong
);
poTransform->Transform(
1,
&x,
&y)
此外 OGRSpatialReference 还提供包括是否是投
影坐标系、是否是地理坐标系、椭球参数、投影参数、长度单位等信息。
以上内容和过程不仅可以巩固有关遥感图像坐
标系统和投影系统的概念,而且改变参数就可以完成
不同的投影转换过程。 设计的编程实践的内容包括:(1)遥感图像坐标系统和投影系统的读取显示;(2)遥感图像的经纬度坐标转高斯投影坐标;(3)遥感图像的高斯投影转为 UTM 投影。
2. 5
遥感图像几何纠正
遥感图像几何纠正的关键是根据图像的地面控
制点解算几何纠正参数,在 GDAL 里由 GDALCreat-eGCPTransformer( int
nGCPCount,
const
GDAL_GCP∗pasGCPList,
int
nReqOrder,
int
bReversed
) 函数
实现。 其中 nGCPCount 表示 GCP 点个数, pasGC-
88
吕秀琴,等:GDAL 在遥感图像处理实习教学中的应用实践
PList 是 GCP 点对列表,iOrder 是多项式纠正次数。函数返回的是多项式几何纠正的参数数组。 另外,在进行图像灰度纠正和重采样时,需要获取图像地
面范围和输出图像分辨率,这个可以在 GDALData-set::GetGeoTransform 函数中获取,该函数返回一个
仿射变换数组 adfTransform[6] ,根据仿射变换模型,由像素坐标计算地面坐标及对应分辨率。 设计的编
程实践的内容包括:(1)给定地面控制点的图像纠正;(2)给定参考图像的图像纠正;(3)不同多项式纠正次数的纠正精度评价。
3 GDAL 遥感实习教学应用实践
“遥感图像处理实习” 中,采取将 ERDAS 和
GDAL 教学实践相结合的方式开展实习教学(如图
1 所示)。 首先要求通过 ERDAS 软件完成输入输
出、波段组合、投影转换和几何纠正的具体操作,建立学生的感性认识,强化概念和处理过程的理解。然后指导学生对 GDAL 编程环境进行配置,通过
GDAL 编程来使学生深入到遥感图像处理的方法本
质。 最后将 GDAL 编程处理结果与 ERDAS 处理结
果进行比较,通过对比分析调整优化程序,进一步加
深方法理解。
图 1 GDAL 遥感图像编程实习教学环节设计
遥感图像的输入输出和波段组合实习环节中,要求利用 ERDAS 输出的图像,通过 GDAL 编程输
入,经过数据类型、图像类型、范围大小的改变、波段
拆解、波段合并、波段组合后的编程处理输出后,再由 ERDAS 软件输入,以检查 GDAL 编程的正确性。实习过程中学生会发现输出结果在亮度和对比度上
略有差异(如图 2 所示),
这主要是缘于 ERDAS 软
件采取了图像增强的显示策略。 学生通过对比不仅
能检查实习结果的正确性,还能了解商业软件的特
点,自己也能结合图像增强的相关知识提高波段组
合的显示效果。
(a)ERDAS 处理(321 组合)
(b)
ERDAS 处理(432 组合) (c)
ERDAS 处理(453 组合)
(d)GDAL 编程处理(321 组合) (e)GDAL 编程处理(432 组合) ( f)GDAL 编程处理(453 组合)
图 2 输入输出和波段组合实习结果对比
遥感图像投影转换实习环节中,要求学生利用
相同的参数和方式进行重投影对比,对输出的投影
图像进行整体比较和同名点坐标比对检核(如图 3所示)。
98
(a)重投影参数设置 (b)ERDAS 处理结果 (c)GDAL 编程处理结果
图 3 投影转换实习结果对比
遥感图像几何纠正实习环节中,重点要求学生在
相同的控制点数及分布、多项式纠正模型和重采样方
法情况下,对纠正结果的内外符合精度进行评价,并对
比 ERDAS 纠正的结果进行修改完善(如图 4 所示)。
(a)原始图像 (b)ERDAS 处理结果
(c)GDAL 编程处理结果
图 4 几何纠正实习结果对比
通过 GDAL“遥感图像处理实习”教学中的应用
实践,改变了以往“遥感图像处理实习”的一方面过
于界面化的流程操作,另一方面过于底层细节的编
程实习局面。 借助于 GDAL 的封装函数,强有力地
将遥感图像处理的重要方法集中起来,提供快速便
捷的编程模式,通过丰富的函数参数来提供遥感处
理方法的对应点和调控入口。 GDAL 在“遥感图像
处理实习”中的应用实践,降低了编程难度,也保证
了对相关算法的理解深度。
4 结语
“遥感图像处理实习” 作为一门实践性专业课
程,对学生的理解能力和实践操作能力都提出了要
求。 在有限的实习教学周期内尽可能提高实习效果
是始终需要认真思考的问题。 为了突出实习重点,强化概念的理解和算法的便捷实现, 采取开源
GDAL 平台作为实习工具,通过设计典型的遥感图
像处理内容,进行了一次实习教学实践。 GDAL 完
备的算法功能和便捷的编程环境,给“遥感图像处
理实习”带来了新的内容和形式,提高了实习教学
的效率和效果。
参考文献(References):
[1] 胡庆武,
陈亚男,
周洋,
等.
开源 GIS 进展及其典型应用研究
[J] .
地理信息世界,
2009(2):
46-55.[2] 张睿.
OSSIM-新遥感
新选择[J] .
软件世界,2006(20):55.[3] 唐黎明,
尤黎明,
周荣福.
GRASS—Linux 下的开源 GIS 软件
[J] .
采矿技术,
2006,6(2):82-84.[4] 李楠.
基于 Eclipse 的 uDig 插件的设计与实现[ J] .
计算机与
现代化,2010(2)
:170-172.[5] 赵欣,
杨多志,
于沿涛,
等.
SharpMap 在露天矿卡车调度系统
监控端的应用[J] . 露天采矿技术,
2009(5)
:73-75.[6] 杨益飞,
刘小勇.
基于 MapWinGIS 的组件式 GIS 开发及应用
[J] .
测绘与空间地理信息,2010,33(6):
143-144.[7] 王珂.
基于 MapWinGIS 的面向对象空间数据模型的构建与研
究[D].
南京:河海大学,2008.[8] 贾小军,
喻擎苍.
基于开源计算机视觉库 OpenCV 的图像处理
[J] .
计算机应用与软件,
2008,
25(4):276-278.[9] 赵岩,
王思远,
毕海芸,等.
基于 GDAL 的遥感图像浏览关键
技术研究[J] .
计算机工程,
2012,
38(23):15-18.[ 10] 郜风国,
冯峥,
唐亮,
等. 基于 GDAL
框架的多源遥感数据的
解析[J] . 计算机工程与设计,2012,
33(2):760-765.
09