基于梯度算法边缘检测原理对火焰长度的测量
2020-05-07张先鹤
张 伟 , 张先鹤
(湖北师范大学 机电与控制工程学院,湖北 黄石 435002)
0 引言
现随着经济迅速发展,人们对于安全意识有着极大的提高,但是由于人们的疏忽大意还是有大量关于火灾的新闻,火灾频繁发生对人类的生命财产造成了巨大的损失。火焰的长度和众多因素有关,比如火焰的辐射强度、火焰传播速度等。火焰长度经常作为一个建筑规范条件来判断建筑是否构建合理。因此对火焰的长度测量就具有深刻的意义,同时通过图像处理火焰长度的测量也可以对燃烧物燃烧程度进行分析,因此对于资源的充分利用也具有重要的意义。对火焰燃烧的情况通常都是由火焰轮廓和火焰长度作为一个关键性的评价参数,所以对于火焰长度的精确测量必不可少。传统的测量火焰高度的一般方法是通过肉眼的大致估计,这种方法不仅测量不准确而且局限性大还有可能造成一定的危险。
对于火焰长度的测量这一课题已经有学者研究,例如巨新刚[1]等人利用CCD获得图像在此基础上对火焰的亮度进行提取之后的方式,然后利用Visual C#编程技术通过火焰的边界和长度计算公式求解出火焰的高度,测试效果良好。另外王林[2]等人在火焰理论高度的基础上提出利用CCD拍摄到的图组进行灰度处理、图像优化处理;利用图像上各个像素的不均等原理可能出现像素跳跃,然后提取出图像的边界线;最后通过数学建模思想把所提取到的将边界线拟合成函数表达式,利用函数求得火焰尖端高度。还有毛翠丽[3]等人利用计算机视觉原理,通过CCD采集图像对图像进行滤波去噪,然后通过基于MATLAB的传统阈值分割技术对图像进行二值化,最后利用最高点与最低点距离之差进行图像火焰长度的测量,得到的结果良好。在火焰图像识别算法方面余路[4]等人已经进行过研究分析,提出背景减法、帧间差法、光流法等多种算法来对火焰进行图像识别得到清晰完整的火焰图像。谭亚鹏[5]提出火焰图像增强算法采用引导滤波器对炉膛火焰图像进行平滑滤波,较好地获得火焰图像的照度图像,在时域下采用减法运算获取火焰图像的反射分量,并对反射分量进行颜色恢复校正,来避免炉膛火焰颜色失真。白冰[6]等人将影像测量技术应用于火工品火焰长度测量, 建立了影像测量系统对某型号烟火点火器与鱼雷训练用器材的火焰长度进行了测量,结果表明相比传统方法影像测量方法能够精确测量出火工品输出火焰长度。冯丽琦[7]等人利用火焰的颜色特征提取出疑似火焰区域;对疑似火焰区域进行Gabor滤波,再对Gabor滤波后不同尺度下的图像以16×16的像素邻域网格作为采样窗口,采用LBP提取其纹理特征;运用CART决策树对LBP特征向量进行降维,将分类回归树算法(CART)选择出来的特征输入到支持向量机(SVM)训练分类器,进行火灾火焰图像识别。实验结果表明,野外火灾火焰的识别准确率为96%,证明了该算法的有效性。吉林大学张杰[8]设计了三种基于火灾视频图像的识别方法。基于传统的火灾图像处理方法,设计了一种基于多特征融合的火灾识别方法。首先结合RGB判据和HIS判据,设定合适的阈值条件,基于OpenCV的开源库,在VS2013平台上,实现了视频中火焰对应像素区域的识别,并将原图进行二值化处理,将火焰区域用矩形框标记;然后在此基础上提出对原图的灰度图使用KMeans算法进行聚类,并与疑似火焰区域相与得到疑似火焰区域轮廓,进一步加入圆形度和偏心率两个判据完成火灾的识别。实验结果表明,该方法能够提取出大部分火灾图像轮廓,识别效果较好。王文朋[9]分别从改进图像特征、优化深度学习模型、构建深度迁移学习模型三方面出发,提出了一系列火焰图像识别算法,有效提升了火焰识别的精确率和稳定性。王博[10]提出了一种新的火焰前景提取算法,该算法首先使用监督学习方法确定疑似前景区域,然后通过改进K-means算法对疑似区域对应的图像块进行聚类分割,从而得到较准确的火焰前景图像。
笔者通过在此基础上利用CCD获得图像,提出使用一种梯度算法来求出火焰图像的阈值,对火焰进行二值化然后与传统方式比较,对比结果突出了梯度算法的优越性,然后对图像进一步提取火焰的边缘,最后利用MATLAB软件编程,使用LOG算子对图像边缘进行提取求出最高点和最低点像素的差值,利用公式求出火焰的长度。经过多次实验验证此方法对测量差值效果更加精确显著并且方便快捷。经实验测试可行性很高。
1 火焰图像信息的获取
本设计利用CCD摄像机获取火焰图像然后把光信号转化成电信号输入图像采集卡,然后通过图像采集卡内部模数转换器把电信号转化成数字信号,数字信号通过传输电缆传送到计算机,在计算机上得到R、G、B三基色表示彩色火焰图像进行显示。最后利用图像处理技术对得到的彩色图像进行处理得到结果并显示。图像处理系统图如图1所示。
图1 图像处理系统图
2 火焰图像信息的基本处理
本设计利用CCD得到图像,由于周围各种信号影响因此要对图像进行滤波处理操作。本文基于MATLAB的图像处理,MATLAB具有丰富的图像处理函数库。
图2 原图像
图3 滤波处理后图像
由于我们的目的是测量火焰的长度,因此对图像边缘的保留十分关键。同时中值滤波可以很好地保留图像的边缘,在这一程度上中值滤波要强于均值滤波,所以我们采用中值滤波来对图像进行滤波处理。简单来说就是把带有干扰的图像g(x,y)的中值挑选出来作为(x,y)的输出。在MATLAB中利用函数medfilt2()进行二维中值滤波。调用格式:medfilt2(I,[3,3])。值得注意的是图像一定要是二维图像,我们通过CCD得到的图像为RBG三维彩色图像要通过函数rgb2gray()进行彩色图像灰度化。经过MATLAB编程得到图2和图3.
3 梯度算法边缘测量原理
边缘检测是检测图像特性发生变化的位置。在处理图像边缘检测这一方面,很多学者通过传统的边缘检测原理来对图像进行处理。主要有空域检测和变换域检测两种,面对不同情况可以选择不同的边缘提取的方式,但是普通算法对环境噪声非常敏感。通过小波变换的边缘检测方法和基于形态学的边缘锐化方法虽然都可以大幅度降低噪声的影响,但是这种算法计算量较大,对火焰高度测量不利。通过与一般方式比较,决定使用计算量较小,过程比较简单同时利于计算机快速计算的图像矢量梯度算法进行图像的边缘检测。具体原理如下:
灰度图像函数为f(x,y),首先把在点(x,y)处的梯度表示出来:
(1)
基于梯度函数变化率最快的方向即为梯度的方向可以知道最大值一定在边界处取得。梯度的幅度可表示为:
(2)
通过梯度的性质可以知道梯度的幅值就是在函数变化率最快的方向上单位距离的增加。上式通过灰度图像函数表示为:
G[f(x,y)]=|f(i,j)-f(i,j+1)|+|f(i,j)-f(i+1,j)|
(3)
由上式可知梯度的值等于相邻像素的差分,在火焰图像灰度值变化幅度比较小的地方其值很小,当变化幅度较大时此时的灰度值就是火焰的边界。因此利用这一性质来找到火焰图像的灰度阈值从而对图像进行二值化处理,测量火焰的高度只需要提取垂直方向的像素即可,通过MATLAB编程可以很精确地得到火焰的轮廓,上式梯度近似可表示为:
G[f(x,y)]=|f(j)-f(j+1)|
(4)
传统的方式来对图像进行二值化,利用MATLAB软件中im2bw()函数对其进行二值化处理。两种方式经过MATLAB编程得到二值化图像如图4和图5所示:
图4 梯度算法
图5 传统算法
从图像上分析得出使用梯度算法可以更加精确完整的表现出火焰的轮廓,因此能更加完整地体现出我们所需要的边界。
3.1 LOG算子的选择
对于边缘分割处理有多种算子可以选择:Roberts算子,prewitt算子,Sobel算子,Canny算子,LOG算子。本文选取LOG算子的原因是基于此算子可以精准地定位图像的边界,对一些噪声如高斯噪声,椒盐噪声等噪声有很好的抵抗作用,其次它对于图像边缘切割较为平滑,利于测量火焰的高度。在图像处理中经常利用此算子来提取图像边缘。LOG算子的原理:先利用高斯函数对图像进行平滑,然后采用拉普拉斯算子根据二阶导数过零点,来检测图像的边缘,最后得到的算子即为LOG算子。表达式如下:
(5)
在数字图像的运用中上式可近似成:
▽2f(x,y)=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y)
(6)
通过MATLAB编程得到图像如图6所示:
图6 LOG算子图像
4 火焰长度的求解
实验过程中先把CCD摄像机固定好,距离在蜡烛1.5米处聚焦效果最好。另外还需要一个刻度尺,使用刻度尺然后读出图片中火焰的高度L,由于通过原始拍摄的图像过大,通过裁剪得到的M×N图像,利用以上梯度算法在MATLAB中就能得到最高点坐标(x1,y1)和最低点(x2,y2)的纵坐标差值,由公式(7)得到火焰的真实高度。
(7)
5 结论
通过梯度算法更加精确快捷地找到最低点和最低点高度之差,经过多次实验发现此算法求解火焰高度准确率大约为0.3%,比使用传统方法更加精确和稳定。实验的不足之处在于周围的干扰可能过大,对实验造成一些影响。此方法可以进一步优化以减小扰动干扰提高准确率。