基于MATLAB的三帧差分边缘检测算法研究
2022-04-29梁禹韩舒羽
梁禹 韩舒羽
关键词:MATLAB;三帧差分边缘检测;目标重叠
智能视频监控系统具有智能化与数字化优势,目前被广泛应用于交通与安防等领域[1]。当下,一些常用的运动目标检测算法包括帧间差分法、背景差分法、光流法等,在分析这些方法的原理和流程后,可以对其优缺点进行比较[2]。将以上三种方法进行对比发现,利用帧差法来实现运动目标的检测,实验表明,对于运动快且形状较大的运动目标,在运动图像检测中有良好的效果[3]。帧间差分算法实现简单,程序计算复杂度低,运行速度快,而且对环境中的场景光线的变化不敏感,还能提高检测准确率[4]。并且,该算法只对运动目标比较敏感,运行稳定,适合用于目标检测对复杂度要求低和资源利用低的场景。
帧间差分法直接比较连续两帧或多帧图像中对应像素的灰度值,然后在设置阈值的序列图像中提取运动目标的区域[5],该算法适合用于智能安防监控领域。当多帧连续的视频画面中有运动目标时,帧间差分法对相邻两帧图像作差分运算并计算得到结果,通过该算法可以快速提取出运动的目标区域。与其他算法相比,该算法也更易于在FPCA等硬件上实现。本文在此基础上提出一种融合算法,该融合算法融合三帧差分法和改进的边缘检测算法,使用MATLAB进行仿真验证表明,该算法的优点是能降低检测目标的重叠性。
1三帧差分边缘检测算法
图像是一种最直观的视觉内容,包含较多信息,其中边缘和轮廓是图像的最基本特征,蕴藏着图像中最为关键的信息。Sobel算子的工作原理是:对图像的局部像素点进行平均化或加权平均化计算,利用灰度变化设置阈值判断像素点是否为边缘点,实现消除噪音和平滑图像的效果。本文提出三帧差分边缘检测的融合算法,是将三帧差分算法和基于新的计算公式的边缘检测算法进行融合得到的目标检测算法,通过融合改进的边缘检测算法之后,使得提取的目标区域边缘更加连续,轨迹清晰,同时可提高算法的准确率,降低重叠性,且融合后的算法在FPCA上易于实现。在进行图像处理时,经常用到边缘检测算法。通过边缘检测计算后,使得图像边缘信息更加清晰、直观地表现在原始图像中,对于图像中的细节部分,如目标的直径、宽度等都可被边缘检测算法检测并描述出。对于图像中表面深度、方向不连续以及光照条件不同时,图像都会产生边缘信息。图像不同的灰度值显示如图1所示。
从图1中可以发现,在第四和第五像素间有明显的亮度变化,二者之间会产生一个边缘,在这两个像素点之间产生了明显的变化。在实际场景中,不同图像产生的边缘信息也有所不同,本文通过选取不同的阈值来区分它们。对于图像算法中边缘检测算法常应用在众多研究方向中,常用的边缘检测算子有Prewitt,Sobel,Roberts,Log和Canny,将这些常用的算子在MATALB2018a平台下进行仿真,得到各个算子的仿真结果如图2所示。通过在MATLAB下仿真,并对常用算子实现边缘检测的效果进行对比。
使用相同的原始输入图像,通过对各边缘检测算子在MATLAB下进行仿真,并分析结果可得:(1)Roberts算子的优势在于对水平和垂直方向的检测效果好,对于图像的对角线上检测效果一般;(2) Prewitt算子对滤除噪声、边缘定位的效果一般,在图像边缘信息上可以起到平滑的作用;(3)与其他算子相比,Sobel算子可以精确地检测出图像的边缘信息,滤除噪声效果很好,且计算量较小;(4) Log算子的优势是在进行滤除噪声和边缘定位时效果较好;(5) Canny算子对噪声的滤除效果最好,在滤除噪声的同时,也容易平滑掉一些边缘,边缘定位比较准确。
基于上述分析,本文决定采用的边缘检测算法的算子是Sobel算子,该算法对于X和Y两个方向的算子如图3所示。Sobel边缘检测算法和中值滤波算法在FPCA上进行实现时需要的图像缓存处理很相似,都需要3x3的矩阵,也需要相同的移位寄存器,利用三个移位寄存器可以输出3x3窗口,即得到3x3矩阵,此3x3窗口和中值滤波的3x3窗口的结构一致。
传统的Sobel边缘检测算法是对0。和90。进行计算,对于上述算子通过与图像A进行卷积运算,计算出梯度G。和G。,再通过开平方根的方式得到最终计算结果,其计算公式如下:
对于Sobel边缘检测算法在FPGA下进行实现,在FPGA下实现为了减少逻辑资源消耗,使用不开平方的近似值,利用绝对值代替开平方根的方法,其计算公示可以简化为:
本文基于上述计算方式提出了改进的Sobel的新计算方法,在0。和90。两个方向上增加45。和135。,目的是进一步丰富图像的边缘特性。图4为四个方向的算子。然后,将3x3矩阵与四个方向Sobel算子进行卷积。由于运算符都是由0、±1、±2组成,0和±1对应的像素值可以直接加减,所以±2对应的像素值可以通过左移1位乘以2来代替。该运算操作可以降低資源的使用率,提升算法的执行效率。
对于Sobel边缘检测算法在引入4个方向后,在原有的两个方向计算上引入45。和135。后,按照上述计算方法对4个方向进行计算,边缘检测算法4个方向的计算公式如下:
为了可以在FPCA上节约逻辑资源,更易于在FPCA上实现该算法,本文提出计算4个方向的Sobel边缘检测算法的新计算公式如下:
与两帧差分法检测目标相比,使用三帧差分法可以在处理空洞和轮廓丢失上得到更加理想的效果,通过融合改进的、基于新的计算公式的边缘检测算法,能对目标进行更加精准的定位,同时比传统计算方式更加节省资源。因此,将两个算法融合后可以得到更具有优势的融合算法。该融合算法的实现过程为:首先,对缓存连续视频中的相邻三帧图像分别两两差分,将差分结果进行二值化处理,然后对原始图像使用基于新的计算方式的边缘检测算法进行计算,最后将结果与二值化结果进行比对,得到目标区域。为了能准确检测运动目标,而且能很好地描述目标的外观和轮廓,同时能消除大量不相关的噪声,选择加入计算四个方向的Sobel边缘检测算法,将差分后的结果与Sobel边缘检测后的结果进行逻辑运算。该方法的优势是可以有效减少目标重叠现象。该算法的流程图如图5所示。
三帧差分边缘检测算法的实现步骤为:(1)从一段视频中提取出连续三帧的原始图像,分别进行灰度处理;(2)将三帧灰度图像进行两两差分运算;(3)将差分后的结果进行二值化处理.然后对原始图像进行边缘计算,使用基于新的计算公式的边缘检测算法,再将结果与二值化处理结果进行逻辑运算;(4)将上一步中计算得到的图像进行中值滤波处理;(5)得到最终的目标检测结果。
2三帧差分边缘检测算法的MATLAB仿真
将本文提出的融合算法在MATLAB下进行仿真。首先,在MATLAB下读取一段视频文件,如图6是对一段连续的车辆行驶视频分别获取其中连续几帧的图像,并按照算法流程图分别进行灰度处理、相与操作、二值化处理、边缘检测等。分别对三帧差分法、融合三帧差分法和Sobel边缘检测算法、融合三帧差分法、基于新的计算公式的边缘检测算法进行MATLAB实现。按照上述基于新的计算公式的边缘检测算法和三帧差分法进行融合处理,并与三帧差分法、融合三帧差分和Sobel边缘检测算法在MATLAB上进行仿真对比。相关算法对比结果如图6所示。
通过在MATLAB下进行仿真实验分析,将三种算法分别进行MATLAB仿真实现后可以发现,在对比融合改进的目标检测算法后,在传统三帧差分法、传统融合三帧差分法、边缘检测的基础上可以减少目标重叠现象,同时能消除大量不相关的噪声。通过在MATLAB下实验证明,改进的融合算法在减少目标重叠现象方面具有优化效果。同时,对于在边缘检测算法中改进的算法公式也适合在FPCA上进行实现。
3结束语
本文提出基于目标检测的融合算法,融合三帧差分法与基于新的计算公式的边缘检测算法,并在MATLAB下分别进行仿真和对比实验,通过仿真实验可以验证,对于一段连续实时运动目标的检测,能有效降低目标重叠性,同时可以有效消除不相关的噪声。