植被指数、变化检测与图像增强的算法实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

植被指数、变化检测与图像增强的算法实现

武汉大学遥感信息工程学院20113025900XX XX

【摘要】通过为期一周的实习,笔者思考研究了计算RVI、ND、DVI等植被指数,基于像素光谱的变化检测,均值滤波、中值滤波、高斯平滑等图像增强以及利用不同算子进行边缘检测的算法原理与程序实现。通过自主选择实验参数、确定实验方案、设计程序,解决过程中的问题,直至得出正确的结果和结论,激发了创新思维,提高了创新能力和实践能力。本文就以上所列算法进行了阐述和展示。【关键词】植被指数变化检测图像增强边缘检测算法实现

一、原理介绍

(一)植被指数

植物叶面在可见光红光波段(R)有很强的吸收特性,在近红外波段(NIR)有很强的反射特性,这是植被遥感监测的物理基础,通过这两个波段测值的不同组合可得到不同的植被指数。

比值植被指数RVI=NIR/R,绿色健康植被覆盖地区的RVI远大于1,无植被覆盖的地面(裸土、人工建筑、水体、植被枯死或严重虫害)RVI在1附近。

归一化植被指数NDVI=(NIR-R)/(NIR+R),-1<=NDVI<=1,负值表示地面覆盖为云、水、雪等,对可见光高反射;0表示有岩石或裸土等,NIR和R近似相等;正值,表示有植被覆盖,且随覆盖度增大而增大。

差值环境植被指数DVI=NIR-R,正值表示植被覆盖,随覆盖度增大而增大。

调整土壤亮度植被指数SAVI=((NIR-R)/(NIR+R+L))(1+L),L是根据实际情况确定的土壤调节系数,取值范围0~1。L=0时,表示土壤背景的影响为零,即植被覆盖度非常高,土壤背景的影响为零,这种情况只有在被树冠浓密的高大树木覆盖的地方才会出现。

(二)基于像素光谱的变化检测

变化检测是从不同时期的遥感数据中定量分析和确定地表变化的特征与过程,先获得两幅通用地点不同时间图像的差异图像,再对差异图像进行处理,将像素点分成变化和无变化两类。笔者采用了差值和比值两种方式。当差值=0或比值=1时,表示像素点无变化,否则像素点有变化。

(三)图像增强

均值滤波是一种常用的线性滤波算法,用以去除噪声,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的3*3或5*5或7*7个像素,构成一个滤波模板,但不包括目标像素本身),再用模板

中的全体像素的平均值来代替原来像素值。

中值滤波与均值滤波类似,区别在于中值滤波的模板包括目标像素本身,且用模板内全体像素的灰度中值来代替原来像素值。

高斯平滑采用高斯滤波为影像消除噪声,高斯滤波中每一

个像素点的值,都由其本身和邻域内的其他像素值经过加权平

均后得到。笔者采用的是如右图所示的3*3算子。

梯度锐化用来突出图像的边缘和轮廓信息,最简单的梯度算子就是分别求出目标像素在x和y方向上的灰度值变化率,取其中较大的作为该点梯度的大小与方向,自定义一个阈值,分梯度大于和小于或等于该阈值两种情况,对原像素值进行变换。

(四)边缘检测

笔者采用了Sobel、Robert、Prowitt、Laplace、Krisch五种算子对该算法进行了实现,以Sobel算子为例,取下图所示的一组模板,分别对目标像素进行计算,取其中较大的作为边缘强度的大小与方向,并自定义一个阈值,若大于该阈值,则原像素值变为255,否则变为0,这样就生成了一幅二值图像,白色的边缘部分得到充分突出。

Sobel算子Prowitt算子

Robert算子Laplace算子

Krisch算子

二、算法设计

(一)植被指数

1、创建对话框,添加新类,添加相应的变量,将变量与对话框各要素建立联系;

2、在View类中添加响应函数,使得点击菜单项“植被指数”即可打开对话框;

3、在对话框类的OnOK函数里添加实现各个植被指数计算的函数,以NDVI为例:

加载不同波段的两幅影像

获取影像行列数、影像位数

是否为灰度图像?弹出消息窗口报错

获取影像像素值

新建一幅图像newBmp,新建变量m_max,m_min,r,c,初值均为0

获取点r*m_Cols+c在两张影像上的灰度值NIR和R

NIR+R=0?

是否

pNewImgDat[r*m_Cols+c]=0

Temp[r*m_Cols+c]=(NIR-R)/(NIR+R)

是Temp[r*m_Cols+c]>m_max?c=c+1 m_max=Temp[r*m_Cols+c]否

Temp[r*m_Cols+c]

否m_min=Temp[r*m_Cols+c]

c<影像列数?是

r=r+1否

是r<影像行数?

添加变量A=(255-0)/(m_max-m_min),逐点对图像进行线性拉伸:

若Temp>0,则pNewImgDat=(int)(A*Temp),否则pNewImgDat=0输出图像

其他植被指数虽公式和线性拉伸方式等有差异,但基本流程类似,不再赘述。(二)基于像素光谱的变化检测

1、创建对话框,添加新类,添加相应的变量,将变量与对话框各要素建立联系;

2、在View类中添加响应函数,使得点击菜单项“变化检测”即可打开对话框;

3、在对话框类的OnOK函数里添加功能函数,基本流程如下:

(1)加载两个时间段的影像,分别获取图像行列数和像素数;

(2)若两幅图像行列数不同,提示未配准;若像素数不同,报错,否则继续;

(3)创建新图像NewBmp,行列数与以上两幅图像相同;

(4)若选择的是差值法,则逐点计算该点在两幅影像上像素值的差,若为0则NewBmp上该点像素值为0,若不为0则NewBmp上该点像素值与第二时段影像相同;若选择的是比值比法,则逐点计算该点在两幅影像上像素值的比,若为1则NewBmp上该点像素值为0,若不为1则NewBmp上该点像素值与第二时段影像相同,但注意首先就要考虑该点在两幅影像上像素值是否为0,以免出现分母为0的情况。

(5)输出图像。

(三)图像增强

以高斯平滑处理8位灰度图为例:

1、使用BmpFile头文件中函数,依路径读入图像;

2、新建图幅srcBmp,desBmp,行列数位数均与原图像相同,srcBmp中各点像

素值与原始图像完全相同;

3、对srcBmp行列进行循环嵌套,逐点用高斯滤波算子进行计算,将计算出来

的值作为desBmp中同名像点的像素值;

4、输出图像desBmp。

若处理24位彩色图,则需要分别对每个像素点的R、G、B三个通道进行运算。其他图像增强方法虽算子不同,但整体思路一致,此处不再赘述。

(四)边缘检测

以Sobel算子处理8位灰度图为例:

1、使用BmpFile头文件中函数,依路径读入图像;

2、新建图幅srcBmp,desBmp,行列数位数均与原图像相同,srcBmp中各点像素值与原始图像完全相同;

3、对srcBmp行列进行循环嵌套,逐点用Sobel算子的两组模板分别进行计算,得到两个值grad1与grad2,取其中较大者,即若grad2>grad1,则grad1=grad2,笔者经过多次尝试,定义的阈值为100,若grad1>100,则desBmp中同名像点

相关文档
最新文档