2.6 本文设计的检测、分析算法
2.6.1 Gauss滤波平滑算法
图像需要被预处理在本论文的检测实验原理中。对于摄像头采集到的实时的视频序列图像,为了提升检测的准确性和精度,降低后续处理分析工作的负担,就需要事先进行局部的滤波处理。OpenCV库中平滑处理函数cvSmooth,函数的原型为:void cvSmooth(const CvArr* src,CvArr* dst.int smoothtype.param1=3,double param2, double param3,double param4);函数中,参数const CvArr* scr表示输入的元图像序列或者图像象素点的矩阵;int smoothtype:表示滤波的方式,对于OpenCV提供了较为多种的滤波方式,共有5种,比如CV_GAUSSIAN:表示高斯滤波;CV_MEDIAN:表示中值滤波方式。对于帧图像中的噪点问题,高斯滤波能有效地解决,较好的呈现出图像的清晰度。本论文对滤波问题的设计关键代码为:
cvSmooth( image, out, CV_GAUSSIAN, 3, 3 );
其中,参数CV_GAUSSIAN表示为:对图像进行核大小为3×3的高斯卷积。
2.6.2 阈值二值化图像处理(OTSU)
OTSU阈值方法在本文中被用来对图像进行了二值化的分割,并且为了解决画面实时变化的客观存在的原因,图像二值化的过程中还伴随着实时更新背景图像,结合两者,使得检测目标物体的运动和跟踪都有良好的效果。
2.6.3 背景差分法图像的二值化算法
检测流程中,后续跟踪效果是取决于是否能够精确的提取前景物。论文中对于这个步骤运用了两个阶段:第一阶段:二值化图像,然后分割。第二阶段:对于图像的分析处理前,进行图像的填充,保证切割前景图的完整。最后利用背景差分法成功将前景物从背景中提取出来。其整个过程示意图如下图2.6所示:
图 2.6 提取前景物的流程示意图
Fig. 2.6 The process of extracting prospect object diagram
本文是经过阈值分割形成的二值图像,此结果图为RGB空间检测出的结果。处理图像的这部分的过程是将前景图像和背景图像进行差值运算,然后根据设定的阈值,将前景图做二值化。OpenCV提供了直接可以用于求差图像的数学函数:cvAbsDiff(),再通过OTSU算法来求取分割的阈值T,接着通过二值化函数:void cvThreshold(const CvArr* src, CvArr* dst, double threshold,double max_value, int threshold_type)对于图像进行二值化分析处理。其中的参数表示含义为:src:表示为源图像;dst:表示为目标输出图像;threshold threshold_type:表示的是阈值类型,有两种形式:CV_THRESH_BINARY,CV_THRESH_BINARY_INV。前者表示当源图像中的某点的像素值大于之前所设定的threshold时,其值取max_value;后者,对应的就是,当小于所设定的threshold时,取max_value。
2.6.4 图像填充算法
从采集到的帧图像中可以看出,物体在边缘处的地方容易和背景图的颜色混淆,那么对于算法中,容易将这些部分二值化成黑色或者白色,容易造成识别物体的不精准性,所以为了提高识别物体的精确度,那么在原本的阈值二值化的过程之前加入图象填充这个步骤,整个实现步骤为:
1) 对于情景图和背景图进行差值计算
2) 对于所得到的差值图像进行边缘检测
3) 将边缘检测的结果追加到之前的二值化图像中;第四阶段,根据轮廓,将其中的空档填满
2.6.5 OpenCV的跟踪框架搭建
OpenCV作为主要支持视频码流的分析和处理,对于移动物体的跟踪,也发布了自己本身的算法团块(OpenCV中将移动物体认定为某个团块,即对于图像中目标物体的检测和跟踪都是基于此团块。整个实现过程,将功能的实现分别分成几个模块各自运作:前景分析检测模块;新团块检测模块;团块的实时跟踪模块;团块轨迹是生成模块。其原理过程示意图如图2.7所示: OpenCV移动目标物体的检测跟踪的研究(9):http://www.751com.cn/jisuanji/lunwen_524.html