下面详细的介绍一下火焰识别的算法。
火焰识别算法主要分两部分:RGB颜色模型设计出能够区分火焰的规则和YCbCr颜色模型建立火焰检测库达到疑似火焰区域的识别。
要想进行火焰识别算法首先要明白颜色的构成,RGB、YUV、YCbCr都是人为规定的色彩模型或色彩空间。说白了就是从不同的标准下的用通常可接受的方式对色彩加以说明,是色彩在不同角度下的表现形式。
【1】.YUV
在 YUV 空间中,每一个颜色有一个亮度信号 Y,和两个色度信号 U 和 V。亮度信号是强度的感觉,它和色度信号断开,这样的话强度就可以在不影响颜色的情况下改变。
YUV 使用RGB的信息,但它从全彩色图像中产生一个黑白图像,然后提取出三个主要的颜色变成两个额外的信号来描述颜色。把这三个信号组合回来就可以产生一个全彩色图像。
Y 通道描述 Luma 信号,它与亮度信号有一点点不同,值的范围介于亮和暗之间。 Luma 是黑白电视可以看到的信号。U (Cb) 和 V (Cr) 通道从红 (U) 和蓝 (V) 中提取亮度值来减少颜色信息量。这些值可以从新组合来决定红,绿和蓝的混合信号。
【2】.RGB
RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,RGB简单的来说指的就是三原色Red、Green、Blue。通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。目前的显示器大都是采用了RGB颜色标准,
在显示器上,是通过电子枪打在屏幕的红、绿、蓝三色发光极上来产生色彩的,目前的电脑一般都能显示32位颜色,有一千万种以上的颜色。32位指的是每个颜色通道(即R、G、B)可以分为0-255一共256级,因此可以搭配出256*256*256=16777216中色彩通常称为1600万色,我们采用的的RGB565格式,即RGB三通道颜色占用两个字节,R占用5位,G占用6位,B占用5位,一共65536种色彩。
【3】.YCbCr
YCbCr 是在世界数字组织视频标准研制过程中作为ITU - R BT1601 建议的一部分, 其实是YUV经过缩放和偏移的翻版。其中Y与YUV 中的Y含义一致, Cb , Cr 同样都指色彩, 只是在表示方法上不同而已。在YUV 家族中, YCbCr 是在计算机系统中应用最多的成员, 其应用领域很广泛,JPEG、MPEG均采用此格式。一般人们所讲的YUV大多是指YCbCr。
RGB颜色模型中的火焰像素识别
首先直观的看一下同一图片在RGB各个通道下的不同。
a列是原始彩色图像,b列显示 R通道的图像,c列显示 G通道的图像,d列显示 B通道的图像。通过图像可以看到火焰区域强度值最高的是 R通道,最低的是 B通道。
通过以上研究发现,火焰区域 R通道强度值最高,颜色饱和度最高。因此,火焰区域像素应符合下列条件:
R(x,y)>RmeanR(x,y)>G(x,y)>B(x,y)Rmean=1K∑i=1KR(xi,yi)1
式中: R( x, y)、 G( x, y)和 B( x, y)分别表示像素点( x, y)红、绿、蓝三个颜色的通道值。 K是总像素数, Rmean是总像素中红色分量强度平均值。公式(1)表明,火焰区域各分量强度值中 Rmean的值最大。
当前由于灯光照明的影响,使许多建立在像素点通道值转换技术基础上的火焰识别算法的检测效果大打折扣。但是,标准的RGB颜色模型不易受灯光照明的影响。因此,可以使用RGB颜色空间的转换公式:
r=R/(R+G+B)g=G/(R+G+B)b=B/(R+G+B)
YCrCb颜色模型中的火焰识别
虽然采用上述rgb颜色模型能够削弱在使用传统RGB颜色模型时由于光照变化而引起的火焰识别率下降的影响。但为使火焰像素区域识别率因光照变化影响最小,可以尝试使用YCbCr颜色模型。
YCbCr颜色模型是色彩空间的一种,其重要特质是把亮度作为主要组成。Y是流明,表示光的浓度且为非线性,即亮度分量,采用伽马修正编码处理。而 Cb和 Cr则为蓝色和红色的色度分量,即浓度偏移量成份,它们分别表现的是RGB模型中蓝色度分量与亮度分量之同的差异(B-Y)和红色度分量与亮度分量之间的差异(R-Y)。根据C.A.Poynton转换矩阵[ 5],可以得到YCbCr颜色模型与RGB颜色模型的转换关系:
Y = 0.299f*R + 0.587f*G + 0.114f*B;
Cb = 0.564f*(B - Y )+0.5f
Cr = 0.713f*(R - Y )+0.5f
则在一副原始图像中,可以推出像素三个分量值 Y, Cb, Cr平均值的关系式:
Ymean=1K∑i=1KYxi,yiCbmean=1K∑i=1KCbxi,yiCrmean=1K∑i=1KCrxi,yi
图像中像素点的空间位置用(
xi, yi)表示。 Ymean表示像素亮度分量的平均值;
Cbmean表示像素蓝色度分量的平均值; Crmean表示红色度分量的平均值。K表示像素总数。
具体算法
图像中火焰区域内各分量在RGB颜色模型的规则是:各分量值的大小关系有R≥G≥B,R≥Rmean。因为RGB颜色模型与YCbCr颜色模型可相互转换,并且是线性关系,因此在YCbCr颜色模型中有:
Y(x,y)>Cb(x,y)Cr(x,y)>Cb(x,y)
式中:( x, y)表示火焰区域内像素点的位置; Y( x, y)表示像素点的亮度值; Cb( x, y)表示像素点蓝色度分量值; Cr( x, y)表示像素点红色度分量值。
从上述公式可得出这样的结论:火焰区域像素点的亮度分量要大于蓝色度分量,红色度分量也大于蓝色度分量。因此,火焰区域是红色饱和度所产生的结果。
在一幅图像中,一般火焰区域是最亮的。因此将火焰区域各通道( Y、 Cb、 Cr)值与各通道平均值(
Ymean, Cbmean, Crmean)分别对应比较可推出如下关系式:
F(x,y)=1,ifY(x,y)>Ymean,Cb(x,y)<Cbmean, Cr(x,y)>Crmean0,else
对于图像中的任何像素点 F( x, y),只要满足上述公式中第1个式子的条件,则该像素点的值被设置为1,并被看做是疑似火焰像素。