陳 寧,丁 飛
(江蘇科技大學(xué)能源與動力工程學(xué)院,江蘇 鎮(zhèn)江,212003)
傳統(tǒng)的船舶火災(zāi)報(bào)警系統(tǒng)采用感煙報(bào)警器,通過監(jiān)測煙霧的濃度來實(shí)現(xiàn)火災(zāi)防范,由于采用離子式煙霧傳感器,在傳感器遠(yuǎn)離火災(zāi)源時(shí)很難對初期火災(zāi)進(jìn)行報(bào)警。為此,利用頂置魚眼攝像頭的圖像傳感作用,依據(jù)火焰的固有特性,把火焰從圖像中分割出來,對識別火焰、構(gòu)建新型的船舶火焰識別傳感系統(tǒng),在火災(zāi)的初期發(fā)現(xiàn)火焰非常具有現(xiàn)實(shí)意義。
視頻火焰識別主要依靠視頻火焰的靜態(tài)特性如顏色特征、紋理特征等;動態(tài)特性如頻閃特性、“邊緣抖動”[1]、面積變化、形體變化、整體移動[2]等??紤]到視頻流的來源是監(jiān)控?cái)z像頭,其單幀圖像的成像質(zhì)量不高,火焰紋理的捕獲受到限制。另外在紅、綠、藍(lán)(Red、Green、Blue,簡稱:RGB)顏色空間中,火焰顏色的分布是一個(gè)空間曲面,難以擬合[3]。且背景顏色、光照條件的差異都會對火焰的成像顏色產(chǎn)生影響。所以,根據(jù)火焰顏色來分割火焰是不夠準(zhǔn)確的。本文于是弱化了顏色特性的運(yùn)用,采用灰度圖像來進(jìn)行算法處理,大大縮減了算法的復(fù)雜度。幀差法是基于火焰頻閃特征提取序列幀中運(yùn)動物體的常用方法,通過對火焰圖像做幀差計(jì)算,得到的閃點(diǎn)不但包括火焰,還包括有運(yùn)動物體。而“邊緣抖動”、面積變化、形體變化、整體移動等火焰特征的運(yùn)用都是在火焰分割之后對火焰輪廓的特征量進(jìn)行提取,所以,火焰分割的準(zhǔn)確程度對火焰識別具有舉足輕重的作用。
在工程領(lǐng)域和實(shí)際生活中常遇到的實(shí)際燃燒過程幾乎全部都是湍流燃燒過程,其流動是非穩(wěn)態(tài)的、不規(guī)則的、表面上是隨機(jī)的[4],火焰圖像序列在進(jìn)行幀差算法后得到的火焰閃點(diǎn)位置具有交叉與聚合的特性。本文重點(diǎn)論述運(yùn)用幀差法,根據(jù)火焰閃點(diǎn)位置的交叉性與聚合性排除其它運(yùn)動物體的干擾,分割火焰的方法。
本課題采用的置頂魚眼攝像頭視野達(dá)到180℃,最高分辨率為300萬像素。高分辨率有效解決了寬視野圖像細(xì)節(jié)捕獲能力不足的問題。另外,用全景鏡頭(魚眼)拍攝的整圖由于變形厲害,一般難以辨識和分析,可以根據(jù)一般的全景鏡頭投影模型,如:球面透視投影模型、拋物面投影透視模型等,將魚眼圖片恢復(fù)為符合人眼視覺習(xí)慣的平面透視投影的圖片。本文采用一種基于拋物面透視投影模型,完成對魚眼圖像的恢復(fù)[5],恢復(fù)算法的效果如圖1所示。
圖1 魚眼圖像恢復(fù)算法的效果圖Fig.1 The rendering of fisheye image restoration algorithm
圖1中,程序界面上右側(cè)圖形控件顯示圖片圍繞紅色圓環(huán)展開的左右、上下視角均為60℃的圖片顯示在左側(cè)圖形控件中。
傳統(tǒng)的幀差圖像的獲取是對連續(xù)兩幀灰度圖像A、B的差值取絕對值,公式表示為:
其中,Thod為二值化圖像所取的閥值。圖像C中灰度值為1的像素點(diǎn)位置上和圖像A、B灰度值相差較大,給人閃爍的感覺,所以本文將這些像素點(diǎn)稱為閃點(diǎn)。通過進(jìn)一步挖掘可以將上述閃點(diǎn)分為兩個(gè)部分,其一是由亮變暗的閃點(diǎn),另一部分是由暗變亮的閃點(diǎn),但公式⑴中取絕對值的操作掩蓋了這一區(qū)別,從而忽略了一個(gè)重要的火焰特性。
為了挖掘出這一信息,本文設(shè)計(jì)了如下算法。對連續(xù)兩幀灰度圖像A、圖像B(圖像A~圖像H的實(shí)例圖像參見圖10~圖14),其任一像素,若某位置像素的灰度值f(A)≥f(B),則將f(A)-f(B)賦值給圖像C的對應(yīng)位置像素點(diǎn);若f(B)>f(A),則將f(B)-f(A)賦值給圖像D的對應(yīng)位置像素點(diǎn),公式表示為:
然后,對圖像C、D二值化,將灰度值較小的像素清零,公式表示為:
其中,Thod為二值化圖像所取的閥值。
根據(jù)對閃點(diǎn)的定義,二值圖像C、圖像D中的灰度值為1的像素也同樣是閃點(diǎn),只是它們被分散到兩個(gè)二值圖中。將圖像C、圖像D分別存入RGB圖像的紅色和綠色通道,通過觀察可以發(fā)現(xiàn):對火焰圖像而言,圖像C、圖像D上的閃點(diǎn)位置是相互交叉的,筆者把這種特性稱為火焰閃點(diǎn)位置的交叉性,如圖2所示;而對于運(yùn)動物體,如行人而言,圖像C、圖像D上的閃點(diǎn)位置是相互區(qū)分的,如圖3所示。
多學(xué)科交叉、多領(lǐng)域融合是高校學(xué)科發(fā)展的必然趨勢。多學(xué)科交叉與融合不單純體現(xiàn)在不同學(xué)科、專業(yè)人才之間的融合上,也體現(xiàn)在高層次人才培養(yǎng)方面,如中醫(yī)院校嘗試招收前置專業(yè)為非中醫(yī)專業(yè)(如文學(xué)、西醫(yī)學(xué)等專業(yè))的中醫(yī)或中西醫(yī)結(jié)合類研究生。這類學(xué)生熱愛中醫(yī)、喜歡中醫(yī),多數(shù)曾自學(xué)中醫(yī),能跳出中醫(yī)專業(yè)學(xué)生的固有思維,從不同角度審視中醫(yī),但沒有經(jīng)過系統(tǒng)的中醫(yī)學(xué)教育,中醫(yī)學(xué)基礎(chǔ)知識相對薄弱。
圖2 火焰閃點(diǎn)位置Fig.2 Flame flash point position
圖3 行人閃點(diǎn)位置Fig.3 Pedestrian flash point position
對于圖2、圖3中的任一紅色(黑白圖中為暗色)閃點(diǎn),根據(jù)其附近有無綠色(黑白圖中為亮色)閃點(diǎn)來決定此點(diǎn)的取舍,同理,綠色閃點(diǎn)也依據(jù)其附近有無紅色閃點(diǎn)來決定此點(diǎn)的取舍,可以過濾掉圖3中絕大部分閃點(diǎn)。本文算法采用核[6]W(m×n的全1矩陣,m、n為大于1的奇數(shù),如圖4所示)對圖像C、圖像D分別執(zhí)行膨脹運(yùn)算,得到圖像X、Y,再用圖像C和圖像Y的與運(yùn)算得到圖像E,圖像D和圖像X的與運(yùn)算得到圖像F的算法,公式表示為:
其中,″⊕″表示逐個(gè)像素點(diǎn)執(zhí)行膨脹操作,″&″表示逐個(gè)像素點(diǎn)執(zhí)行與操作。
圖4 膨脹核WFig.4 Dilating kernel W
對于n×n的核來說,如果一個(gè)紅色閃點(diǎn)在其n×n(以像素為單位)的范圍內(nèi)有至少一個(gè)綠色閃點(diǎn),則此紅色閃點(diǎn)被保留,反之,如果此范圍內(nèi)沒有綠色閃點(diǎn),此紅色閃點(diǎn)將被舍棄;同理,綠色閃點(diǎn)也按此方法取舍。膨脹核的大小可以根據(jù)具體情況自由選取。將圖像E、F分別存入RGB圖像的紅色和綠色通道,得到的圖像如圖5、圖6所示。
圖5 交叉性處理后火焰閃點(diǎn)位置Fig.5 Flame flash point position after the treatment of cross-cutting
圖6 交叉性處理后人體運(yùn)動閃點(diǎn)位置Fig.6 Pedestrian flash point position after the treatment of cross-cutting
通過觀察圖像2、圖像3、圖像5、圖像6可以看出,此算法可以大幅減少幀差二值圖中由于人體運(yùn)動產(chǎn)生的閃點(diǎn),但對火焰閃點(diǎn)的削減則小得多,并且保留了火焰的基本外形特征。該方法用于消除運(yùn)動物體閃點(diǎn)干擾比較有效。
一般而言,閃點(diǎn)的位置大都分布在火焰的邊緣,所以屬于火焰的閃點(diǎn)是聚合在一起的,這也就是火焰閃點(diǎn)位置的聚合性。對于其它干擾形成的閃點(diǎn),可能和火焰閃點(diǎn)相距較遠(yuǎn),本文采用改進(jìn)的K均值聚類算法將其區(qū)分。K均值是一種簡潔、高效的聚類算法,但由于初始的類別中心點(diǎn)位置是隨機(jī)產(chǎn)生的,所以此算法不能保證找到定位聚類中心的最佳方案,常用的解決方法是多次運(yùn)行聚類算法,得到多個(gè)結(jié)果,最后選擇方差較小的那個(gè)結(jié)果。本文根據(jù)需要去除的是少數(shù)遠(yuǎn)離火焰閃點(diǎn)的運(yùn)動閃點(diǎn)這一需求,運(yùn)用距離算法得到初始的聚類中心點(diǎn)。距離算法中對于任一閃點(diǎn),計(jì)算它到其余閃點(diǎn)距離的和,將距離和值最大和最小的閃點(diǎn)作為K均值的初始聚類中心點(diǎn)。算法如下表所示:
表1 距離算法示意表Table 1 Table of distance algorithm
其中:P1、P2…Pn為閃點(diǎn)序列,Dij表示Pi到Pj的距離,則有Dii=0,Dij=Dji(i≠j);Si為Pi到閃點(diǎn)序列中每個(gè)點(diǎn)的距離之和,Si=D1i+D2i+D3i+…+Dni。
但假如原閃點(diǎn)序列本身就是聚合的,則此算法會剝離外部閃點(diǎn),產(chǎn)生過度聚合。所以,在閃點(diǎn)聚合算法的設(shè)計(jì)中可以根據(jù)由火焰閃點(diǎn)序列取出的疑似火焰區(qū)域二值圖中白色像素所占的比率(rate)來判斷是否要執(zhí)行此算法,如果rate小于等于某閥值才執(zhí)行上述聚合算法。初始閃點(diǎn)分布如圖7所示,聚合算法執(zhí)行效果如圖8所示。
圖7 閃點(diǎn)聚合前位置Fig.7 Flash point position before the treatment of polymerization
圖8 閃點(diǎn)聚合后位置Fig.8 Flash point position after the treatment of polymerization
從圖7中發(fā)現(xiàn),紅、綠閃點(diǎn)不加以區(qū)分,而圖8中發(fā)現(xiàn),紅色閃點(diǎn)表示聚合結(jié)果,綠色閃點(diǎn)為排除的閃點(diǎn)。此外為了方便觀察,在圖7、圖8中使用圓環(huán)將游離閃點(diǎn)位置標(biāo)出。
通過火焰的顏色特性,認(rèn)為火焰疑似區(qū)域中亮度較高的像素為火焰,通過圖像的二值化,將其區(qū)分出來,再通過OpenCV中cvFindContour函數(shù)抽取此二值圖的輪廓,并根據(jù)火焰種子的位置利用函數(shù)cvDrawContour填充輪廓[7],最終得到火焰的外形。以下為本文對火焰分割的算法流程圖,如圖9所示。
本實(shí)例為實(shí)測試驗(yàn)過程,在一段視頻序列中選取連續(xù)的兩幀圖像并分別灰度化,如圖10、圖11所示。圖中不但有火焰的閃動,還有人體的運(yùn)動。
將兩幀圖像做幀差運(yùn)算,并進(jìn)行二值化處理,取閥值為幀差灰度圖像最高灰度值的一半。為了便于觀察,將存在閃點(diǎn)的區(qū)域截出,如圖12所示,可以看出由于人的運(yùn)動在火焰閃點(diǎn)的左上方產(chǎn)生一些閃點(diǎn)(用方框標(biāo)出)。對圖12中的閃點(diǎn)根據(jù)火焰閃點(diǎn)位置的交叉性進(jìn)行運(yùn)動閃點(diǎn)的排除,得到的閃點(diǎn)序列如圖13所示。從圖13中可以看出,仍有少量運(yùn)動閃點(diǎn)(用兩個(gè)圓環(huán)分別標(biāo)出)未能排除。
接著由于rate值小于設(shè)定閥值,根據(jù)閃點(diǎn)位置的聚合性,運(yùn)用K均值算法對剩余閃點(diǎn)進(jìn)行處理,其結(jié)果如圖14所示。從圖14中可以看出,靠近火焰閃點(diǎn)的運(yùn)動閃點(diǎn)(用圓環(huán)標(biāo)出)未能被排除,但這一結(jié)果對后續(xù)提取閃點(diǎn)序列外接矩形與確定火焰種子的算法影響較小,故不再對其做進(jìn)一步處理。
圖9 火焰分割的算法流程圖Fig.9 The algorithm of flame segmentation flow chart
圖10 灰度圖像第1幀 (圖A)Fig.10 The first frame(image A)
對圖14中閃點(diǎn)序列取其外接矩形,其在原始灰度圖像幀1、2中對應(yīng)位置的矩形區(qū)域即為疑似火焰區(qū)域。對應(yīng)第1、第2幀灰度圖,得到兩個(gè)火焰疑似區(qū)域。如圖15、圖16所示(圖像有一定的拉伸變形)。
對圖像15、圖像16做二值化處理,火焰灰度圖中火焰區(qū)域的亮度較高,選取適合的閥值,得到二值圖顯示如圖17、圖18所示。
圖11 灰度圖像第2幀(圖B)Fig.11 The second frame(image B)
圖12 幀差圖像(圖C、D)Fig.12 Image of frame difference(image C、D)
圖13 具有位置交叉性的閃點(diǎn)圖(圖E、F)Fig.13 Image of flash points with crossing (image E、F)
利用OpenCV中cvFindContour函數(shù)抽取圖17、圖18輪廓,加之圖像G、H中閃點(diǎn)序列中心點(diǎn)(火焰種子)的位置信息,通過OpenCV中cvDraw-Contour函數(shù)填充輪廓,得到火焰外形如圖19、圖20所示。
從圖19、圖20可以看出,利用本文算法提取火焰外形取得了良好的效果,該方法不但排除了人體運(yùn)動的干擾,而且火焰外形較為完整。之后便可對火焰輪廓進(jìn)行其它特征量的提取,構(gòu)建新型的船舶火焰識別系統(tǒng)。
圖14 閃點(diǎn)聚合后閃點(diǎn)位置圖(圖G、H)Fig.14 Image of flash points with polymerization(image G、H)
圖15 疑似火焰區(qū)域1Fig.15 Suspected flame area 1
圖16 疑似火焰區(qū)域2Fig.16 Suspected flame area 2
圖17 火焰疑似區(qū)域1二值圖Fig.17 Binary image of suspected flame area 1
圖18 火焰疑似區(qū)域2二值圖Fig.18 Binary image of suspected flame area 2
圖19 火焰外形圖1Fig.19 Image of flame shape 1
圖20 火焰外形圖2Fig.20 Image of flame shape 2
本文提出了利用頂置魚眼攝像頭進(jìn)行模式識別的方法來探測火源的構(gòu)想,并用火焰分割算法提取出了完整、“干凈”的火焰輪廓,可以為之后的火焰識別算法打下牢固的基礎(chǔ)。
利用火焰閃點(diǎn)位置的交叉性來排除運(yùn)動物體閃點(diǎn)干擾的方法,在圖像火焰的分割操作中取得了良好的效果,但在此過程中仍有少量運(yùn)動物體閃點(diǎn)殘留。文中進(jìn)而提出了利用火焰閃點(diǎn)位置的聚合特性的一種距離分類算法,進(jìn)一步將游離的干擾閃點(diǎn)剔除,最終分割出火焰。
閥值分割在圖像分割中有著廣泛應(yīng)用,具有計(jì)算簡單、運(yùn)行效率高、速度快的特點(diǎn),對于火焰這種高亮度的分割對象更能顯示其優(yōu)勢。本文算法中閥值的選取受背景與光照條件的影響,選用合適的閥值對于火焰的分割具有重大的意義。對于傳統(tǒng)的幀差法,往往是前一幀減去后一幀然后取絕對值,但在取絕對值的時(shí)候掩蓋了火焰閃點(diǎn)位置的交叉性,本文的意義在于發(fā)掘出了這部分信息并設(shè)計(jì)了初步的算法。
[1]吳龍標(biāo),宋衛(wèi)國,盧結(jié)成.圖像監(jiān)控中一個(gè)新穎的火災(zāi)判據(jù)[J].火災(zāi)科學(xué),1997,6(2):60-66.
[2]陳維南,潘泓,葉樺.基于圖像處理的火災(zāi)監(jiān)控系統(tǒng)的實(shí)現(xiàn)[A].2001年中國智能自動化會議論文集(上下冊)[C],昆山,2001:704-705.
[3]程鑫,王大川,尹東良.圖像型火災(zāi)火焰探測原理[J].火災(zāi)科學(xué),2005,14(4):239-245.
[4]王樂.某散貨船機(jī)艙火災(zāi)特性研究[D].鎮(zhèn)江:江蘇科技大學(xué),2011.
[5]汪嘉業(yè),楊興強(qiáng),張彩明.基于魚眼鏡頭拍攝的圖像生成漫游模型[J].系統(tǒng)仿真學(xué)報(bào),2001,13(增刊):66-68.
[6]Rafael C.Gonzalez,Richard E.Woods,Steven L.Eddins.數(shù)字圖像處理(MATLAB版)[M].阮秋琦譯,北京,電子工業(yè)出版社,2005.
[7]Gary Bradski,Adrian Kaehler.學(xué)習(xí) OpenCV(中文版)[M].于仕琪,劉瑞禎譯,北京,清華大學(xué)出版社,2009.