計算機視覺|基於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源創計劃”,歡迎正在閱讀的你也加入,一起分享。

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