vc++数字图像运动检测处理系统 第6页
图9 轨迹获取并显示流程图
综合上面的流程图,可以得知整个运动检测软件的设计过程以及顺序。图6是整个流程图的总图。图7即背景提取流程图,它是图6的第一步即背景提取,图7是对图6第一步的详细分解,让人能更好的了解到背景提取的整个过程,其中用到的主要数字图像处理技术有:中值滤波、灰度化、梯度获取、特征区域的获取及匹配等,在这些技术基础上得到了运动物体的背景图像便于进行以后物体定位识别;图8是图6第二步物体识别即物体定位,图8对图6的第二步进行了详尽的分解,使人一目了然的了解到物体定位是怎样进行的,需要的步骤有哪些,用到的数字图像处理技术与背景提取那一步基本是一样的,只是多了特征区域的再次匹配,具体算法参见源程序;图9是图6最后一步也是本运动检测的最后一步即轨迹绘制,所用到的主要技术有:二值化、膨胀、得到边界轮廓、细化、去离散点、计算运动物体中心点,绘制轨迹等。
接下来按照上面的流程图,将在第四章中对对系统进行介绍,在介绍系统的同时,系统对一些常用的图像、图形处理的基本方法做一个具体的介绍。
第三章 数字图像运动检测的详细设计
本系统中,关键技术有图像数据读取、图像的中值滤波、图像灰度化、图像梯度的获取、图像特征区域的确定、两幅图像的匹配、图像二值化、图像细化、图像去离散点的操作、物体的区域定位、物体中心点的取得等。其中有些是图像处理中经常用到的一些处理方法,有些是系统中特别采用的方法。接下来对上面提取的算法做一个具体的介绍。
1.程序实现
首先介绍背景提取模块的处理过程。背景提取是一个比较的过程,系统实现的思路为:按图片获得的顺序分析几幅图片,如果检测到的这几幅图片上面的内容没有太大变化,则可以把整个图片作为背景。
(1)图像数据读取
首先要从一个BMP文件中读取图像信息,并把图像显示在视图区。BMP文件有两种显示方式,一种将BMP文件读成DIB格式(设备相关型的位图格式),当显示时,一种是直接将DIB显示,另一种是将DIB转化为DDB(设备无关型位图格式),再显示DDB。其中,DDB存在很严重的问题,DDB中没有保存位图的调色板,这就造成了一个使用的前提——位图必须在同类设备中显示,并且此设备在位平面或彩色上与原设备有同样的彩色安排,否则色彩可能完全失真。但是,DIB就是BMP文件去掉BITMAPFILEHEADER(文件头),因此把BMP读入到DIB数据结构中再显示十分方便。只要读入BITMAPINFO结构和图像数据即可。并且DIB的显示方法可以调用SetDIBitsToDevice函数。直接将DIB位图的图像输出到设备,用于显示DIB。因此在本系统中,直接将BMP显示为DIB位图形式。而且,在本系统中要读取的不止一幅图片,所以要设置不同图片(如背景,前景)的显示区域,同时还要注意及时释放无用的文件句柄,避免内存泄漏。图片数据读取有两种情况,第一种情况是在进行背景提取的时候读取图片,第二种情况是在进行运动物体判定的时候读取图片。得到每行象素所占用字节数的函数BytePerLine。得到像素点数据在整个数据区中偏移的函数PixelOffset。图片颜色数据读取的函数ReadDIBFile。数据读入到内存后的显示界面如图10所示。
图10 背景图
(2)图像的中值滤波
图像在拍摄、扫描或者传输过程中总会添加一些噪声,这样就影响了图像的质量,需要除去这些噪声提高图像的质量便于以后的图像处理,所以需要实现图像的平滑。中值滤波是一种局部平均去噪声的平滑操作。所谓局部平滑法就是一种直接在空域上进行平滑处理的技术。认为图像是由许多恒定的小块组成,相邻像素间存在很高的空间相关性,而噪声则是相对独立的。因此,可用像素邻域内的像素平均灰度值代替该像素原来的灰度值,实现图像平滑。那中值滤波它就是把跟当前处理的像素点相关的像素点的数值进行排序,然后把中间数值赋给当前处理点。它对脉冲干扰和椒盐的抑制效果好。同时图像的平滑可采用多种滤波方法,比如低通滤波,高斯滤波等。值得一提的是,中指滤波实现的图像平滑不会破坏图像的边缘信息。这对要进行的边缘提取的操作是十分必要的。
中值滤波也是一种非线性的图像平滑方法,它对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心像素的原来灰度值。中心像素的灰度就是灰度最大的那个对于离散的脉冲信号,当其连续出现的次数小于窗口尺寸的一半时,将被抑制掉,否则将不受影响。所以,在进行中值滤波的时候要先使用尺寸较小的窗口在选用大的窗口。在本系统中,采用的是3*3的滤波模板。但是在其他相关应用中,可以根据需要设定相应的滤波模板对图像进行平滑处理。中值滤波的实现函数是MedianFilterDIB,在数组中找到中间值的功能函数MedianSearch(参见源程序)。
(3)图像灰度化
图像灰度化的过程就是彩色图像转换为黑白图像的过程,因为灰度图像比彩色图像更加容易进行运算,所以经常要把彩色图像转换成灰度图像。这个转换没有确定的标准,一般来说,都是根据原来的图片中的RGB3个分量以及它们的权重来求取的。本系统中对3个分量是按照0.39、0.50、0.1的权重来分配的。四级灰度等级系统的亮度码
亮度码 帧缓冲器中储存值 显示灰度级
0.0 0(00) 黑
0.33 1(01) 暗灰
0.67 2(10) 亮灰
1.0 3(11) 白
图像灰度化操作的函数ToGray具体(参见源程序)。
灰度化处理后的效果图如图11所示。
图11 灰度化效果图
(4)图像梯度的获取
图像的信息一般都集中在像素值变化比较剧烈的地方,也就是说图像的边缘地区的像素呈现连续性的变化,所以灰度最高的点(即在原图像中梯度值最高的点)必然在边界上,可以把这一点作为边界跟踪过程的起始点。图像的梯度就是图像中像素之间变化的大小,它是一个微分的过程,在离散的图像处理中,都是用像素值的“差”来代替像素值的“导”。如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向,它们分别以梯度向量的幅度和方向来表示。边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。
梯度的求法也有很多种,其中大多数是基于方向导数掩摸求卷积的方法。比较有名的算子有sobel算子、拉普拉斯算子等。一个无噪声的图像具有陡峭的边缘,可用拉普拉斯算子将它们找出来。但由于噪声的存在,在运用拉普拉斯算子之前需要先进行低通滤波。低通滤波处理的使用低通滤波器。信号或图像的能量大部分集中在幅度谱的低频和中频段是常见的;而在较高的频段、感兴趣的信号常被噪声所淹没。因此,低通滤波器就是起到一个能降低高频或分幅度的滤波器就能减弱噪声看的见的影响。而sobel算子是一个3*3算子,对灰度渐变和噪声较多的图像处理得较好,更可以扩展成八个方向上,在实际操作上比其他的算子要简便,步骤要省一些,节省了操作空间。所以本系统中就是用sobel算子来求梯度的。可以明显的看到,求梯度之后,图像中的平滑的区域变暗了,而图像的边缘地区变亮了,也就是说,物体的边缘更加突出了。获取图像梯度的函数Gradient具体参见源程序。梯度化后的图像如图12所示: