计算机视觉|基于RGB颜色特征的火焰识别

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。


提出问题及初步分析

    在计算机中图片一般用数组储存,以像素点为单位。

import  cv2 as cv
 import numpy as np
 src=cv.imread("img/3.jpg")
 print(src.shape)
 print(src.size)

----返回值---

(323, 500, 3) #(高、宽、通道数)

484500         #像素点个数

RGB颜色空间下,每个像素点的颜色由R、GB三通道组成,RGB颜色空间以R(Red红)G(Green绿)、B(Blue)三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以也叫三基色模式。每个通道的取值范围从0到255,每种颜色都有对应的RGB值。

火焰也是如此,只要找到火焰颜色的RGB值的规律,就可以借此来识别图中的火焰。那么如何找到火焰的RGB值规律呢?


解决问题

   最简单的方法就是统计学中的抽样调查,找几张只有火焰的图,读取它们的RGB值,并从中找出规律。也可以参考他人所写的相关文章,直接借用别人的数据。

      例如下图:

 

#计算机中像素点RGB值在数组中存储的顺序是BGR

b=0

g=0

r=0

for i in range(len(src)):

    for j in range(len(src[i])):

        b += src[i][j][0]

        g += src[i][j][1]

        r += src[i][j][2]

#
三通道均值

b_=b/src.size

g_=g/src.size

r_=r/src.size

print("b
gr三通道均值分别为{}、{}、{}".format(b_,g_,r_))
 

 

----返回值---

bgr三通道均值分别为5.25914666666666733.38667466666666474.47014266666666


分析问题

除了RGB的取值范围存在规律之外,RGB三者的值之间也存在关系,这里直接提供一些数据作为参考。

      火焰RGB均值取值范围:R=217、G=109B=78

                                   RGB模式下提取疑似火焰

  上述式子中R(xy),G(x,y),B(xy)表示该像素点三种颜色的通道值,Rmon表示R通道的平均值, K代表总像素点数。

疑似火焰区域的关系式:

r=R/(R+G+B)

g=G/(R+G+B)

b=B/(R+G+B)


g>=0.846b+0.048

g<=-0.461b+0.495

g<=191.957b-0.621

将上述公式作为条件,可以大致提取疑似火焰部分


      效果图:


#代码

import cv2 as cv

import numpy as np

src=cv.imread("img/3.jpg")

def img_show(src):

    ch=np.random.rand()*100

    cv.namedWindow("
图片", cv.WINDOW_AUTOSIZE)

    cv.imshow("
图片", src)

    cv.waitKey(0)

    cv.destroyAllWindows()

def img_process(src):

    #
三通道均值:蓝,绿,红

    r_aver=217

    g_aver=110

    b_aver=78

    for i in range(len(src)):

        for j in range(len(src[i])):

            b_p=src[i][j][0]/sum(src[i][j])#b=b/(R+B+G)

           
g_p=src[i][j][1]/sum(src[i][j])

            r_p = src[i][j][2] / sum(src[i][j])

            if src[i][j][2]>r_aver and src[i][j][2]>src[i][j][1]>src[i][j][0] :

                if r_p>=1.14*g_p-0.076 and r_p<=-0.989*g_p+0.991 and             r_p>=-2.077*g_p+1.025:

                    if r_p<=-1.881*b_p+0.9582 and r_p<=95.348*b_p+0.171 and r_p>=-0.543*b_p+0.506:

                        if g_p>=0.846*b_p+0.048 and g_p<=-0.461*b_p+0.495 and g_p<=191.957*b_p-0.621:

                            src[i][j][0] = 0

                            src[i][j][1] = 255

                            src[i][j][2] = 0

    return src

new_image=img_process(src)

img_show(new_image)


参考文献

     [1]耿庆田,于繁华,赵宏伟,王闯.基于颜色特征的火焰检测新算法[J].吉林大学学报(工学版),2014,44(06):1787-1792.



实习编辑:贾婧媛

稿件来源:深度学习与文旅应用实验室(DLETA)

本文分享自微信公众号 - 算法与编程之美(algo_coding)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章