GDAL 在遥感图像处理实习教学中的应用实践

5
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 Xiuqin 1 , ZHANG Yi 2 (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 + +、

Transcript of GDAL 在遥感图像处理实习教学中的应用实践

Page 1: GDAL 在遥感图像处理实习教学中的应用实践

  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

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

Page 2: GDAL 在遥感图像处理实习教学中的应用实践

吕秀琴,等: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

Page 3: GDAL 在遥感图像处理实习教学中的应用实践

坐标;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                    

Page 4: GDAL 在遥感图像处理实习教学中的应用实践

吕秀琴,等: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

Page 5: GDAL 在遥感图像处理实习教学中的应用实践

   (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