摘要:OpenCV(Open Source Computer Vision Library)是一個跨平臺的開源計算機(jī)視覺庫,可以在運(yùn)行Linux、Windows等操作系統(tǒng)上運(yùn)行。它由一些C語言函數(shù)組成,包含了圖像處理及計算機(jī)視覺算法。本文主要工作是視頻中的火焰識別,通過背景相減算法分離火焰和目標(biāo)圖像,基于閾值分割圖像,再進(jìn)行形態(tài)學(xué)去噪,最后通過RGB和HIS算法,識別判定火焰。利用OpenCV,在VS2017平臺上實現(xiàn)了攝像機(jī)視頻中火焰的檢測。
關(guān)鍵詞:OpenCV;火焰識別;機(jī)器視覺
1 研究背景與意義
隨著人工智能的迅速發(fā)展,機(jī)器視覺越來越受到重視,比如火焰識別、人臉識別等等。中國的機(jī)器視覺技術(shù)發(fā)展迅速,應(yīng)用范圍滲透到了國民經(jīng)濟(jì)的各個行業(yè)。其主要原因是因為中國是世界主要的加工制造和應(yīng)用中心之一,隨著工業(yè)技術(shù)的日益精湛和工業(yè)標(biāo)準(zhǔn)的不斷提高,機(jī)器視覺技術(shù)在我國也在不斷發(fā)展壯大,同時人們也對機(jī)器視覺的發(fā)展加大了重視。
在消防領(lǐng)域,火焰識別發(fā)揮著至關(guān)重要的作用,如果機(jī)器能自動識別火焰并自行滅火,必定能減少人員傷亡和財產(chǎn)損失。OpenCV給我們提供了相當(dāng)不錯的函數(shù)庫,通過OpenCV可以實現(xiàn)火焰識別功能,可以檢測靜態(tài)圖片中的火焰,還可以檢測實時視頻中的火焰,同時在視頻檢測的基礎(chǔ)上推廣到了攝像頭實時檢測。
2 OpenCV機(jī)器視覺的介紹
通俗來講,機(jī)器視覺就是用機(jī)器代替人眼的功能來實現(xiàn)相應(yīng)的系統(tǒng)功能。機(jī)器視覺通過圖像攝取裝置(分CMOS和CCD兩種)將已被攝取目標(biāo)轉(zhuǎn)換成數(shù)字圖像信號,同時傳送給專用的數(shù)字圖像處理系統(tǒng),從而得到被攝目標(biāo)的圖像形態(tài)信息,根據(jù)像素分布和顏色、亮度等圖像信息,轉(zhuǎn)變成數(shù)字圖像信號,圖像系統(tǒng)對這些數(shù)字信號進(jìn)行各種算法運(yùn)算來抽取目標(biāo)的相應(yīng)特征,進(jìn)而根據(jù)識別的結(jié)果來控制現(xiàn)場的設(shè)備運(yùn)行動作。
機(jī)器視覺系統(tǒng)最大的特點就是提高生產(chǎn)系統(tǒng)的靈活性,增加自動化程度。在一些不適合人工作業(yè)的危險工作環(huán)境中或者人類視覺難以滿足要求的場合,機(jī)器視覺可以用來來替代人工視覺。同時,在大批量高強(qiáng)度重復(fù)性工業(yè)生產(chǎn)過程中,利用機(jī)器視覺可以極大提高生產(chǎn)的工作效率和自動化的程度。
OpenCV提供了豐富的大量的視覺處理算法,而且這些算法絕大部分利用C語言編寫,同時OpenCV是開源庫,處理地很恰當(dāng),不需要額外添加新的外部函數(shù)或工具支持就可以直接編譯鏈接生成可執(zhí)行程序,所以也有人用來做算法移植,OpenCV的代碼還有一個很使用的特性就是,只要進(jìn)行簡單的改造就可以應(yīng)用到DSP系統(tǒng)和ARM嵌入式系統(tǒng)中。OpenCV一直致力于現(xiàn)實世界的實時檢測應(yīng)用,通過優(yōu)化的C語言程序的編寫對其執(zhí)行速度帶來了很大的提升,并且可以購買Intel的IPP高性能多媒體函數(shù)庫(Integrated Performance Primitives)達(dá)到更快的處理速度。
3 OpenCV識別火焰設(shè)計
3.1 設(shè)計原理
利用OpenCV有強(qiáng)大的圖像處理功能,可以從攝像機(jī)獲取圖像,然而普通的RGB圖形并不能很好的反映出圖像的亮度色度等圖像特征,首先把圖像轉(zhuǎn)換成灰度圖像,灰度圖像可以展示出圖像的亮度色度等圖像特征。背景相減適合檢測運(yùn)動的物體,這里使用幀差法進(jìn)行背景相減來檢測視頻中的火焰,可以檢測到運(yùn)動物體的邊緣。
上面通過背景相減得到了目標(biāo)前景圖,再利用閾值分割方法,通過設(shè)定適當(dāng)?shù)拈撝担瑒h除一些過高或過低的像素點。將原圖二值化后,通過圖像形態(tài)學(xué)算法,對圖像進(jìn)行濾波去噪處理以便分割出較清晰明確的火焰,膨脹和開運(yùn)算是圖像形態(tài)學(xué)中最基本的操作方法,通過這兩種操作可以消除噪聲從而得到想要的圖像。
判定火焰還可以通過RGB顏色模型來判定,火焰都有一定的顏色規(guī)律,將火焰分成R、G、B三個通道,即紅色分量、綠色分量和藍(lán)色分量,對火焰圖像來說,紅色分量和藍(lán)色分量較大,任何火焰像素必須滿足以下公式:
R(x, y)≥ Rt〖JY〗(1)
R(x, y)> G(x, y)> B(x, y)〖JY〗(2)
公式(1)中的Rt是紅的分量應(yīng)該滿足的閾值。R(x, y)、G(x, y)、 B(x, y)分別是某個像素點(x,y)上的紅色分量、綠色分量和藍(lán)色分量。如果目標(biāo)圖像滿足以上公式則基本判定是火焰目標(biāo),然而火焰圖像還包括許多其他圖像特征,為了更準(zhǔn)確地判定火焰目標(biāo),我們可以將RGB顏色模型與其他判定模型進(jìn)行結(jié)合。
單純通過RGB顏色模型來判定火焰會有很多誤報情況,這里介紹一種更有效的方法,就是將RGB和HIS顏色模型結(jié)合判定。HIS模型是通過色度、飽和度、亮度三要素進(jìn)行顏色判斷的,將RGB與HIS顏色模型的算法公式相結(jié)合,進(jìn)而計算圖像的顏色特征,實現(xiàn)火焰的判定。判定公式如下:
I = (R + G + B) / sqrt(3);
S = sqrt( (R G).^2 + (G B).^2 + (B R).^2 );
H = ( R .* 2 (G + B) )./sqrt( sqrt(2) * ( (R G).^2 + (G B).^2 + (B R).^2 ) );
H( G
3.2 運(yùn)行結(jié)果
4 總結(jié)與展望
本文在OpenCV識別火焰技術(shù)等各個方面進(jìn)行深入探討的基礎(chǔ)上,通過背景相減、閾值分割、圖像形態(tài)學(xué)操作結(jié)合RGB和HIS模型,設(shè)計了簡單的火焰識別程序,由運(yùn)行結(jié)果中的圖1和圖二可以看出,程序識別了圖像中的火焰。本文設(shè)計程序簡單,易調(diào)試。希望今后在革新的基礎(chǔ)上設(shè)計出性能更好,功能更強(qiáng)大的OpenCV識別火焰的程序來。
參考文獻(xiàn):
[1]于仕琪.學(xué)習(xí)OpenCV.北京:清華大學(xué)出版社,2009.10.
[2]鄭莉.C++語言程序設(shè)計.北京:清華大學(xué)出版社,2010.7.
[3]譚歆.基于 OpenCV的運(yùn)動目標(biāo)檢測方法研究與應(yīng)用.電視技術(shù),2010.
[4]孫即祥.圖像分析.西安:西安電子科技大學(xué),2007.1230.
[5]OpenCV學(xué)習(xí)記錄之視頻中的火焰檢測識別 coldplayplay的博客.
作者簡介:吳蔓蔓,山東濟(jì)寧人,碩士,研究方向:無線通信。