(天地(常州)自動(dòng)化股份有限公司,常州 213015)
煤炭生產(chǎn)中的采煤工作面由于照度低、粉塵大、水汽大,可見(jiàn)度極差。在這樣的惡劣環(huán)境下,想要通過(guò)機(jī)器視覺(jué)實(shí)現(xiàn)對(duì)運(yùn)輸皮帶上的物體特征進(jìn)行檢測(cè)、識(shí)別,就必須借助于外部輔助手段。本文借助線性結(jié)構(gòu)光照射在皮帶上,通過(guò)視覺(jué)傳感器采集皮帶圖像,檢測(cè)皮帶上的結(jié)構(gòu)光線型特征來(lái)識(shí)別皮帶的特征。這里,算法是否能夠準(zhǔn)確地識(shí)別皮帶上的結(jié)構(gòu)光,是解決問(wèn)題的關(guān)鍵技術(shù)之一。
Hi3516A是海思半導(dǎo)體針對(duì)高清IP Camera產(chǎn)品應(yīng)用開(kāi)發(fā)的一款專(zhuān)業(yè)高端SoC芯片[1]。它除了具有靈活的高性能ARM Cortex-A7架構(gòu)以外,還具有高性能的智能分析加速引擎IVE。IVE主要作用是將智能視頻分析算法運(yùn)算中頻繁調(diào)用且消耗資源較大的主要算子實(shí)現(xiàn)硬化,以減少底層運(yùn)算對(duì)CPU資源的消耗,節(jié)省CPU資源來(lái)做更多的智能分析應(yīng)用。本文以海思Hi3516A平臺(tái)上結(jié)構(gòu)光檢測(cè)算法為例,詳細(xì)介紹嵌入式平臺(tái)上視頻分析算法的實(shí)現(xiàn)與優(yōu)化方案。
結(jié)構(gòu)光檢測(cè)算法包括圖像預(yù)處理、圖像分割、自動(dòng)提取ROI(ROI:Region Of Interest的縮寫(xiě),圖像處理中的術(shù)語(yǔ)“感興趣區(qū)”,就是在要處理的圖像中提取出要處理的區(qū)域)、提取光條中心線4個(gè)模塊。
由于采煤工作面照度低、粉塵大、水汽大,加上光照不穩(wěn)定、物體本身的反射、成像噪聲、采樣誤差等因素[2],采集到的現(xiàn)場(chǎng)視頻圖像往往夾雜大量噪聲,所以在對(duì)圖像進(jìn)行算法分析之前,首先對(duì)圖像進(jìn)行處理,主要是灰度化和濾噪處理。
經(jīng)過(guò)預(yù)處理后的圖像,噪聲得到明顯抑制。圖像分割模塊通過(guò)閾值將結(jié)構(gòu)光中心帶從預(yù)處理后的圖像中粗略提取出來(lái)。圖像分割研究的重點(diǎn)在于閾值的選取,通過(guò)選取合適的閾值,將結(jié)構(gòu)光中心光帶提取出來(lái)。
嵌入式系統(tǒng)由于性能限制,算法設(shè)計(jì)時(shí)要在保證準(zhǔn)確度的基礎(chǔ)上盡可能減少運(yùn)算量,以保證算法的效率。為了減少算法運(yùn)算量,加快算法的運(yùn)算速度,本文設(shè)計(jì)了自動(dòng)將皮帶監(jiān)控圖像上結(jié)構(gòu)光所在區(qū)域提取出來(lái)的模塊—自動(dòng)提取ROI模塊。
由于皮帶特征的識(shí)別是基于光條中心線形變特征的,所以提取結(jié)構(gòu)光條圖像后,對(duì)光條進(jìn)行中心線提取。完整提取結(jié)構(gòu)光條中心線,即實(shí)現(xiàn)了結(jié)構(gòu)光檢測(cè)算法。
1.2.1 圖像預(yù)處理實(shí)現(xiàn)方案
為了保護(hù)圖像的邊緣信息,本文采用中值濾波消除圖像噪聲。中值濾波法是一種非線性平滑技術(shù),它將每一像素點(diǎn)的灰度值設(shè)置為該點(diǎn)某鄰域窗口內(nèi)的所有像素點(diǎn)灰度值的中值,其實(shí)現(xiàn)方法為通過(guò)從圖像中的模板窗口取出奇數(shù)個(gè)數(shù)據(jù)進(jìn)行排序,然后用排序后的中值取代要處理的數(shù)據(jù)即可。
1.2.2 圖像分割實(shí)現(xiàn)方案
出于對(duì)算法自適應(yīng)性的考慮,本文選用改進(jìn)的Otsu法自動(dòng)選取分割閾值。Otsu法又叫大津法或者最大化類(lèi)間方差法,是一種圖像灰度自適應(yīng)的閾值分割算法。大津法按照?qǐng)D像上灰度值的分布,將圖像分成背景和前景兩部分,前景就是需要按照閾值分割出來(lái)的部分。背景和前景的分界值就是所出閾值。遍歷不同的閾值,計(jì)算不同閾值下對(duì)應(yīng)的背景和前景之間的類(lèi)間方差,當(dāng)類(lèi)間方差取得極大值時(shí),對(duì)應(yīng)的閾值就是大津法所求的閾值。
遍歷t使得φ(t)取得極大值時(shí),獲取的閾值即為最佳閾值。使用此閾值將圖像進(jìn)行分割,即可得到結(jié)構(gòu)光圖像。
1.2.3 提取ROI
由于拍攝現(xiàn)場(chǎng)攝像機(jī)與皮帶位置是相對(duì)固定的,所以提取ROI模塊只要在算法運(yùn)行之初運(yùn)行一次即可定位ROI區(qū)域。
提取ROI區(qū)域的算法處理思想為:
① 遍歷步驟1.2.2中獲取到結(jié)構(gòu)光圖像,求取結(jié)構(gòu)光圖像靠近皮帶邊緣的兩個(gè)端點(diǎn)A和B,并連線;
② 由于皮帶重力作用,結(jié)構(gòu)光照射在皮帶上有一定的彎曲弧度,求取偏離①中連線最遠(yuǎn)的點(diǎn)C;
③ 過(guò)C點(diǎn)做AB連線的平行線MN,其中M、N分別為平行線與皮帶邊緣的交點(diǎn);
④ 連接AM、BN,則由AB、BN、NM、MA四段線段構(gòu)成ROI。
1.2.4 提取光條中心線
常用的光條中心的算法主要有灰度重心法、極值法、閾值法、曲線擬合法、骨架細(xì)化法等[6]??紤]皮帶視頻中結(jié)構(gòu)光亮度很高,與皮帶灰度差別大的特點(diǎn),本文采用極值法與閾值法相結(jié)合的方法獲取光條中心。這種方法實(shí)現(xiàn)簡(jiǎn)單,運(yùn)算量與單一的極值法或者閾值法相比,算法運(yùn)算量更小,且精度更高。
其算法原理為:依次掃描ROI圖像每列灰度,尋找該列灰度最大值,當(dāng)找到的最大值超過(guò)設(shè)定閾值時(shí),跳到下一列繼續(xù)尋找。最后由每列最大值構(gòu)成的圖像即為光條中心線。
至此,運(yùn)輸皮帶上的結(jié)構(gòu)光被檢測(cè)并提取中心線。結(jié)構(gòu)光中心線的形變特征用來(lái)識(shí)別皮帶上特定特征變化。
為了保證算法在嵌入式平臺(tái)上運(yùn)行的實(shí)時(shí)性,需要對(duì)算法進(jìn)行多級(jí)優(yōu)化。上述算法開(kāi)發(fā)過(guò)程中已經(jīng)從算法實(shí)現(xiàn)的角度完成算法級(jí)優(yōu)化,下面將逐一介紹其它層次的優(yōu)化方案。
2.1.1 宏定義設(shè)計(jì)-使用宏定義常量替換只讀變量
在嵌入式系統(tǒng)中,宏常量采用立即數(shù)尋址方式。而只讀的變量占據(jù)存儲(chǔ)空間,需要訪問(wèn)內(nèi)存,相比宏常量尋址而言效率要低。
2.1.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)優(yōu)化
數(shù)據(jù)結(jié)構(gòu)是程序設(shè)計(jì)的基礎(chǔ)。結(jié)構(gòu)體是程序設(shè)計(jì)中最常用的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體定義時(shí)成員的排序直接影響到嵌入式CPU的執(zhí)行效率,因此結(jié)構(gòu)體定義時(shí)通過(guò)指定對(duì)齊方式、合理設(shè)計(jì)成員順序、填充部分域、采用位域構(gòu)造結(jié)構(gòu)體的手段對(duì)算法中的數(shù)據(jù)結(jié)構(gòu)進(jìn)行優(yōu)化。
2.1.3 函數(shù)設(shè)計(jì)優(yōu)化
本文在算法設(shè)計(jì)時(shí),充分考慮需要合理劃分模塊的層次結(jié)構(gòu),以提高內(nèi)聚性,降低耦合度。在嵌入式平臺(tái)上通過(guò)下面兩個(gè)手段提高函數(shù)調(diào)用效率。
① 在函數(shù)設(shè)計(jì)時(shí),嵌入式平臺(tái)上的ARM處理器會(huì)利用寄存器來(lái)傳遞參數(shù)以提高訪問(wèn)效率。但ARM體系寄存器傳遞的參數(shù)最多4個(gè),當(dāng)多于4個(gè)時(shí),剩余的參數(shù)需要用棧傳遞,調(diào)用性能大大下降。因此當(dāng)參數(shù)之間緊密相連且通常需要在多個(gè)模塊中聯(lián)合使用時(shí),應(yīng)對(duì)參數(shù)進(jìn)行封裝,以便于參數(shù)的傳遞和變量的管理。
② 采用內(nèi)聯(lián)函數(shù)定義部分調(diào)用頻繁的簡(jiǎn)單函數(shù)。由于內(nèi)聯(lián)函數(shù)只是在需要用到的時(shí)候才展開(kāi),取消了函數(shù)的參數(shù)壓棧,減少了調(diào)用的開(kāi)銷(xiāo),因此其執(zhí)行速度比一般函數(shù)要快。
本文的算法基于海思Hi3516A平臺(tái)進(jìn)行嵌入式移植與優(yōu)化。Hi3516A擁有海思獨(dú)創(chuàng)的IVE(即智能視頻引擎)單元。IVE是將部分智能算法場(chǎng)景中常用的最消耗CPU資源的復(fù)雜計(jì)算硬件化,配合少量主控CPU參與即可實(shí)現(xiàn)各種智能算法。IVE硬化算子的出現(xiàn),帶來(lái)CPU運(yùn)算性能的提升,更低的產(chǎn)品功耗和更低成本。
本文使用的硬件級(jí)優(yōu)化主要是指使用海思提供的IVE算子取代部分算法子模塊的實(shí)現(xiàn),如圖像濾波采用HI_MPI_IVE_Filter算子,圖像的膨脹采用HI_MPI_IVE_Dilate算子,圖像的腐蝕采用HI_MPI_IVE_Erode算子,圖像的閾值化采用HI_MPI_IVE_Thresh算子等。
為了更好地觀察算法實(shí)現(xiàn)與優(yōu)化的效果,本文采用1280×960分辨率的視頻作為輸入源,在海思Hi3516A平臺(tái)上進(jìn)行測(cè)試。
皮帶撕裂算法檢測(cè)結(jié)果圖1所示。算法在運(yùn)行中,使用藍(lán)色矩形框?qū)崟r(shí)標(biāo)出皮帶撕裂的位置。
圖1 皮帶撕裂檢測(cè)結(jié)果圖
表1為算法從PC移植到嵌入式平臺(tái)后,代碼級(jí)、硬件級(jí)優(yōu)化前與優(yōu)化后的算法處理時(shí)間對(duì)比。
通過(guò)上表數(shù)據(jù)可以看出,經(jīng)過(guò)代碼級(jí)優(yōu)化和硬件級(jí)優(yōu)化,算法處理一幀高清視頻幀的時(shí)間提高了將近1倍。
表1 嵌入式平臺(tái)上算法優(yōu)化前后處理時(shí)間對(duì)比表
本文從算法的原理、算法設(shè)計(jì)與實(shí)現(xiàn)、算法移植與優(yōu)化幾個(gè)方面,結(jié)合一個(gè)高清的煤礦工作面現(xiàn)場(chǎng)皮帶視頻闡述了基于嵌入式平臺(tái)的視頻分析類(lèi)算法的開(kāi)發(fā)過(guò)程。實(shí)驗(yàn)數(shù)據(jù)表明,經(jīng)過(guò)優(yōu)化后算法對(duì)高清視頻的處理速度仍然無(wú)法達(dá)到25 fps。
[1] 華為.Hi3516芯片手冊(cè),2015.
[2] 范建華,楊秋翔,安雁艷,等.嵌入式系統(tǒng)中的快速光條中心提取算法[J].計(jì)算機(jī)工程與設(shè)計(jì),2014(11):3808-3812.
[3] 王曉霞,蔣東方,林智偉.嵌入式系統(tǒng)實(shí)時(shí)中值濾波的高效實(shí)現(xiàn)[J].微電子學(xué),2012(12):852-856.
[4] 王磊,段會(huì)川.Otsu方法在多閾值圖像分割中的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2008(6):2844-2846.
[5] 張春明.基于線激光輔助的皮帶撕裂視覺(jué)檢測(cè)技術(shù)研究[D].秦皇島:燕山大學(xué),2012.
[6] 李丹,耿楠,亢娟娜.復(fù)雜背景下光條中心提取算法研究[J].計(jì)算機(jī)應(yīng)用與軟件,2013(3):271-173,314.
[7] 朱貴鋒,金施群,卞銘.十字線結(jié)構(gòu)光光條提取方法的研究[J].計(jì)量測(cè)試與檢定,2006(3):12-14.
[8] 嵌入式系統(tǒng)程序可移植性設(shè)計(jì)及性能優(yōu)化[EB/OL].[2017-11].http://www.doc88.com/p-1488573940259.html.
[9] 史子旺,葉超群,蔡建宇.嵌入式LINUX內(nèi)存使用與性能優(yōu)化[M].北京:機(jī)械工業(yè)出版社,2009.
徐輝(工程師),研究方向?yàn)橹悄芤曨l分析在嵌入式系統(tǒng)上的應(yīng)用。