遥感图像处理(MFC实现)

这篇博客记录了作者在遥感图像处理实习中的学习过程,主要使用MFC实现图像处理算法,包括显示、均衡化、拉伸和浮雕显示等。GDAL库被用于读取和处理遥感图像,通过RasterIO函数读取数据并利用 StretchDIBits 进行显示。文章详细介绍了各种显示方法的实现原理和代码示例。

遥感图像处理的课程实习结束了,用博客来记录下自己的图像处理的过程,用于自己的学习成长使用。


刚开始实习的时候觉得图像处理好难啊,不过走下来了,就感觉还好,当然是有前面学长的代码做入门学习。遥感图像处理的课程都是很基础的算法,例如,图像的各种显示(均衡化显示,拉伸显示,反转显示,浮雕显示,放大,缩小显示等等,前面列出来的是实习里实现了的)


个人觉得图像处理,需要处理的有:图像的显示,图像的算法处理,图像的重写。图像的显示和图像的重写是是基础的技术问题。而图像处理的算法是核心的东西(个人从遥感处理的角度来讲,对于不同的岗位,不同的工作来说,侧重点也就不同)。我是用MFC实现的,所以,我把每一个图像处理的算法都分开写在了对话框里的按钮里。我们学习的对于图像处理的算法,都是针对数值来进行操作的,我们平常接触的图片是数字的,遥感影像也是数字的。我前面所说的读写也是对于影像数值的读写。


对于普通的图片(平常非遥感专业的童鞋接触的图片都是些RGB图片,用opencv来进行处理就完全ok,至于遥感影像,它有不止一个波段还有一些地理位置等信息,用GDAL处理会比较好些,GDAL的处理图像的效率要高于opencv,但是opencv的算法要多于GDAL,仅为个人理解)


影像的显示,首先,需要将影像读入到内存中,然后在使用display函数进行显示,将影像读入到内存中使用的是GDAL中的RasterIO函数。


上面的是GDAL中RasterIO函数的使用,每个位置参数的含义可以通过搜索或者尝试来查看其结果,pafScanblock1为开辟的内存,开辟使用的也是GDAL中的函数,如下面的代码所示,nImgSize代表图像的图像的X,Y的大小,开辟的类型为float类型。


图像的显示使用的是StretchDIBits函数,函数各个参数的含义通过查询可以得知(只说明下pData,pData是一个存储影像的内存,可以理解为pData就是pafScanblock1),前面两个nSizeX和nSizeY可以用来进行放大缩小显示:


图像的显示在了解了几个函数的使用之后,还是比较容易(其实很多函数我都是直接拿过来用的偷笑),但是一些需要处理后进行显示的功能就需要拿到图片各个位置的像素值了,因为拿到了这些值,才能进行数字图像的处理嘛。


为了获取各个像素值,我开辟的内存都是float型的,那么使用上面介绍的GDAL中的RasterIO函数,也就是把整幅图片的某个波段(图中是第一个波段)的所有像素值都读入到内存pafScanblock1中了,这个时候就可以将pafScanblock1理解为一个一维数组(其实不管几维数组,最终的存储方式都是一维存储的),每个位置的像素值就可以通过pafScanblock[i],i的范围当然就是影像的X×Y了,根据具体的位置获取各个像素点的值。

直接显示的结果如下:


各种显示如下:

1、反转显示


255的意思应该还是比较明了的,255减去像素值就是进行反转显示的。

2、线性拉伸:

线性拉伸的意思是,比如原来的图像值为50~180共131个级别,但是它在显示的时候占得显示是0~255共256个级别,显然,很多级别都给浪费掉了,因此,我们需要想办法将131个级别映射到256个级别中,不至于浪费这256个级别。具体线性的拉伸实现如下,pafMax1代表的是第一波段的最大像素值(在遥感图像中要注意噪声点,即255和0,如果不考虑噪声,很多影像得出的结果最大最小值都是255和0,最大最小值的获取可以使用GDAL中最大最小值获取的函数,这个函数除了最大最小值外,还有均值和方差也都能计算出来,自己实现结果会更佳哦):


最大最小值,均值方差获取函数


线性拉伸核心代码

3、均衡化显示:

均衡化显示,是让图像中的像素尽可能平均的分配到0~255这个范围内。具体的解释,由于鄙人才疏学浅,怕解释不清,故是边参考牛人的边写的代码,具体的代码实现如下图(cdfP1[ int(pafScanblock1[ i ] ]表示的是第一个波段中第i个位置的像素值,在整个图像中占的比例):




4、浮雕显示:

浮雕显示能够把图片变得像雕像一样,其像素值的处理就是一个公式,这个公式里只有一个变量就是获取的某点的像素值(感觉这个真的超级神奇哎,一个简单的公式,就能够把一张照片变成浮雕的样子,好厉害的说),具体的实现代码如下:


直接显示、反转显示线性拉伸、浮雕显示的结果如下:



上述只是图像显示的基本过程,涉及的遥感图像处理的算法很少,后面更新的内容是一些图像处理算法实现。




评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值