Skip to content

Aurora26/RemoteSensingImageProcess

Repository files navigation

##一、 【程序环境】## ####程序性质:C# 开发的 WPF 桌程序#### ####开发平台:Visual Studio 2015、GDAL库、.Net Framework 4.5#### ####运行环境:Windows 8.1 以上####

##二、 【程序目的】 ####GDAL 库是一个开源库,它能够实现读取任意格式的图像文件,包括遥感图像,本程序利用 GDAL 库来读取遥感图像,使用 C# 实现一些核心图像的功能,包括:

  1. 遥感图像及普通图像读取:实现读取 .img 遥感图像及选择波段进行处理,实现读取大部分常见图像格式

  2. 图像基本操作:实现图像平移、缩放等常见操作

  3. 遥感图像增强处理:实现灰度拉伸、HIS变换、图像平滑、图像锐化、边缘增强、反相等增强处理

##三、 【设计思路】##

###1) 程序使用C#来开发WPF桌面应用程序,界面使用XAML编写,实现界面与业务逻辑分离### ###2) 程序包括几个主要模块###

  1. 遥感图像读取模块:使用GDAL读取遥感图像,这一步的结果是DataSet数据集

  2. 图像内部存储模块: 包括将读取的DataSet处理成C#能够处理的BitMap数据集及波段信息的提取,另外为了将图像显示在WPFImage控件上,还需将BitMap数据集转换为BitMapImage数据集

  3. 界面事件模块: 这一层实质上是实现了界面事件与业务逻辑的交互

  4. 图像处理模块: 业务逻辑层,编写了灰度拉伸、HIS变换、图像平滑、图像锐化、边缘增强、反相等图像增强处理的函数

###3) 程序使用事件机制驱动###

##四、 【实现过程】## ###1) 读取模块###

  1. 使用GDAL库的Gdal.Open方法打开遥感文件,将之存储为datase数据集;

  2. 利用System.Drawing.Rectangle获取图像容器的宽高;

  3. 利用dataSet.GetMetadata获取图像的波段信息,将波段信息作为波段选择窗口的构造函数实例化一个新的波段选择窗口,用户可自由选择显示波段;

  4. 定义一个int类型的数组存储用户选择的波段信息,使用遥感图像读取模块的主要类ImageOperate中的ImageOperate.GetImage方法来将DataSet数据集转化为Bitmap数据集,该方法需要传入三个参数,DataSet数据集,选择的三个波段序号,以及由图像容器的宽高创建的矩形;

  5. ImageOperate.GetImage函数内部,按照波段信息将图像像素点存入内存,利用C#BitMap类转化为BitMap数据集;

  6. 调用BitmapToBitmapSource方法将BitMap数据集转化为BitMapImage数据集;需要注意的是,如果读取的图像没有波段信息,或者是普通图像,那么读取的直接是BitMap数据集而不是DataSet数据集,那么就可以直调用BitmapToBitmapSource方法;

  7. 将转换的BitMapImage数据集作为WPF图像控件ImageResource,实现图像在界面上的加载;

  8. 这一模块的主要流程是: 菜单点击事件(打开文件)-> OpenFileDialog选择文件 -> Gdal.Open获取DataSet数据集 -> System.Drawing.Rectangle 由图像容器的宽高创建的矩形 -> dataSet.GetMetadata 获取图像波段信息 -> 实例化波段选择窗口,用户选择显示波段 -> 根据以上信息使用 ImageOperate.GetImage 生成BitMap数据集 -> 转化BitMap数据集为BitMapImage数据集 -> 界面图像控件加载BitMapImage数据集;

###2) 界面事件模块###

  1. 主要是一些菜单事件,每个事件调取相应的图像处理函数;

  2. 这一模块的主要流程是: 菜单点击相应事件 -> 事件驱动相应图像处理函数;

###3) 图像处理模块###

  1. 实现灰度拉伸、HIS变换、图像平滑、图像锐化、边缘增强、反相等图像增强处理的函数;

  2. 灰度拉伸函数接受一个BitMap参数,首先使用pointBitmap类的pointBitMap.LockBits方法对像素点进行锁定,并使用BitMap复制一个新的数据集,对复制的数据集进行操作,防止破坏原图像;

  3. 对图像的所有像素点灰度值进行遍历,找出灰度值的最大值与最小值;

  4. 实例化一个灰度值拉伸窗口,将图像灰度值的范围作为构造参数传入,灰度值拉伸窗口有两个滑动条用来定义新的灰度值范围;

  5. 根据新的灰度值范围重新计算图像灰度值并匹配更新;

  6. 同理,其他图像处理函数与灰度拉伸函数函数处理流程基本相似,具体代码详见程序文件;

##五、 【测试结果】##

image 图1. 软件主界面

image 图2. 软件菜单栏展示

image 图3. 波段选择

image 图4. 加载测试图像1、4、7波段

image 图5. 灰度拉伸窗口

image 图6. 调整灰度范围

image 图7. 缩小灰度范围结果

image 图8. HIV变换窗口

image 图9. HIV变换窗口

image 图10. 边缘提取

image 图11. 图像模糊

image 图12. 色彩反相

image 图13. 自由放缩移动图像

image 图14. 项目文件结构

About

课程设计-遥感图像处理-C#&GDAL(WPF)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages