王坤1,房玉吉,劉華龍1,劉帥,余淞洋
(1.海裝沈陽局駐大連地區(qū)第一軍事代表室,遼寧 大連 116001;2.中國艦船研究設(shè)計中心,武漢 430064)
外板破損、通海管路破裂等因素會導(dǎo)致艙內(nèi)浸水,要確定進(jìn)水量的大小,預(yù)測浸水的發(fā)展趨勢及破口的大小,確定損害管制措施,都需要能對浸水量進(jìn)行快速準(zhǔn)確的識別。目前,艙底自動測水方法主要是浮子式,壓力式,超聲式和雷達(dá)式水位測量[1],以及傳統(tǒng)圖像識別法。這些方法存在環(huán)境適應(yīng)性較差、自動化程度不高,前期投入較高,后期維護(hù)工作量大等問題。為此,提出一種基于YOLO-v5[2]和ResNet[3-4]算法的艙底水液位識別算法。
為了實現(xiàn)對船艙內(nèi)水位高度的判斷,考慮通過對水箱液位檢測進(jìn)行模擬,在水箱高度已知的條件下,需要識別出液位與箱身在圖像中高度之比即可推出液位實際高度。
工具采用QT和Opencv。圖像的處理算法包含了對獲取的圖像的預(yù)先處理、對圖像的顏色進(jìn)行閾值分割[5]、通過改進(jìn)的Canny進(jìn)行圖像的邊緣檢測、對獲取的圖像與預(yù)先的模板進(jìn)行匹配,并提出通過窗口來搜索的對峰值進(jìn)行檢測的算法,分別將采集圖像、液位界面提取、數(shù)字識別、攝像頭自定位集合在一起,從而使液位圖像數(shù)字化。流程見圖1。
整個檢測系統(tǒng)由照明光源、光學(xué)攝像頭、計算機(jī)處理與分析系統(tǒng)組成,見圖2。
其中,采用由發(fā)光二極管(光源發(fā)射二極管,led)組成的圓形光源頂部照射的形式,保證光源的可靠性;利用明場照明漫反射形式的正向照明,防止形成鏡面反射,控制視場中產(chǎn)生陰影而對檢測結(jié)果產(chǎn)生干擾。為了提高系統(tǒng)的分辨率和集成性,攝像機(jī)鏡頭選用高分辨率(1 080×1 920)的互補(bǔ)金屬氧化物半導(dǎo)體圖像傳感器。攝像機(jī)與計算機(jī)之間的信息傳輸采用現(xiàn)場總線的形式,保證了視頻傳輸?shù)目焖傩浴?/p>
艙底水液位對象檢測算法采用YOLO-v5算法模型。此版本的YOLOv5每個圖像的推理時間最快0.007 s,即每秒140幀(FPS),但YOLOv5的權(quán)重文件大小只有YOLOv4的1/9。延遲是在V100 GPU上對5 000個COCO-val2017中的數(shù)據(jù)進(jìn)行測試的結(jié)果,包含數(shù)據(jù)預(yù)處理、模型推理、后處理以及NMS。平均NMS時間為1.6 ms/image。
在艙底的水液位檢測中,選用resnet 34層網(wǎng)絡(luò)結(jié)構(gòu)。網(wǎng)絡(luò)中每個殘差塊采用跳層鏈接,解決了層次增加、學(xué)習(xí)退化和深度梯度擴(kuò)散等問題。
采用圖像作為ccd相機(jī)拍攝在有光源的環(huán)境中,圖像尺寸為1 920×1 080 ,色彩信息為bgr存儲。由于拍攝視野較大,目標(biāo)對象在采集過程中只占一定的區(qū)域,為了降低需要處理的數(shù)據(jù),在不失去主要信息的情況下,對源圖像進(jìn)行roi選擇。經(jīng)觀察,主要部分在圖像的上部,選取主要部分進(jìn)行處理,見圖3,提高了圖像處理效率。
圖3 采集源圖像與ROI后圖像
通過高分辨率工業(yè)ccd相機(jī)收集液位信息,在拍攝時可能會由于場景照明不均勻,ccd相機(jī)內(nèi)部的光學(xué)成像畸變,周圍環(huán)境溫度,濕度等因素影響,在獲取液位圖像信息時,通常會夾雜著噪聲,因此需要進(jìn)行一系列圖像預(yù)處理,去除噪聲和背景,從而增強(qiáng)與刻度和數(shù)字字符相對應(yīng)的信息[5]。通常,預(yù)處理的步驟有灰度圖像,數(shù)學(xué)形態(tài)處理,二值化,數(shù)據(jù)平滑,復(fù)原,增強(qiáng),等等。
2.2.1 去噪
探測系統(tǒng)中成像ccd相機(jī)所獲取的液位圖像受到多種形式噪聲的影響,此時需要使用圖像濾波來處理圖像。圖像濾波能夠在保持圖像細(xì)節(jié)的紋理特征的前提下削減圖像噪聲。圖像過濾可以強(qiáng)化或改變圖像。通過濾波,可以加強(qiáng)某些有用的特征,或者去除圖像中的一些不相關(guān)部分,濾波是鄰域操作算子,它利用對像素周圍的像素值和濾波算子進(jìn)行卷積的計算,以確定該像素最終的輸出值。
本文設(shè)計的雙邊濾波法是一種非線性濾波方法,同時考慮了像素的相似度和圖像空間的鄰近性,屬于一種折中的計算方法。將空域信息及灰度相似度統(tǒng)籌考慮,折中處理,在保證邊緣信息的同時再次去噪聲,具有簡單,局部,非迭代的性質(zhì)[6]。
常用雙邊均值噪聲濾波,高斯濾波和衰減噪聲等處理同時對高頻圖像的邊緣紋理信息節(jié)點(diǎn)進(jìn)行模糊,雙邊均值濾波器很好地充分考慮了這個復(fù)雜點(diǎn),很好地準(zhǔn)確保存了高頻圖像紋理模糊信息[9]。
之后采用中值濾波器進(jìn)行進(jìn)一步的去噪預(yù)處理,可有效地消除圖像中的椒鹽噪聲,有利于邊緣保留尖銳度。
關(guān)于灰度化的顏色處理,主要采用液位加權(quán)值的平均值對一個液位中的圖像顏色進(jìn)行一次灰度化顏色處理,實現(xiàn)方法過程概要如下:根據(jù)亮度rgb和亮度yuv兩個顏色分量空間之間的亮度變化,建立圖像亮度y與分量r、g、b顏色分量之間的亮度對應(yīng)變化關(guān)系,利用它的亮度對應(yīng)來描述液位圖像的顏色性質(zhì)。
輸入的圖像是bgr彩色圖像,不方便處理,需要將其轉(zhuǎn)換為灰色圖像,對每個像素點(diǎn)的轉(zhuǎn)換公式如下為:
Gray=R*0.299+G*0.587+B*0.114(1)
圖像預(yù)處理后的圖像見圖4。
圖4 預(yù)處理后的灰度圖
為了增強(qiáng)對比度,使灰度圖中液體與液位上部瓶身灰度區(qū)分更加明顯,采用直方圖均衡化操作。
首先對灰度圖所有像素進(jìn)行掃描,計算出圖像的歸一化直方圖H。
(2)
式中,n是圖像的總數(shù),k是圖像的第k個灰度級別(k=0,1,2,…,255);nk是該灰度級的個數(shù)。
再計算直方圖積分。
(3)
最后進(jìn)行圖像轉(zhuǎn)換。
dst(x,y)=H′(src(x,y))
(4)
變換后的結(jié)果見圖5。
圖5 直方圖均衡化圖
圖像分割可以將目標(biāo)圖像劃分成感興趣的區(qū)域和余下的區(qū)域,然后將感興趣的區(qū)域提取,進(jìn)一步分析。本文以常見最大型間誤差(otsu)、最小型誤差(最大型誤差)、局部型自適應(yīng)閾值(局部型)分割方法為主。
2.4.1 最大類間誤差法
根據(jù)灰度值的不同,對感興趣的目標(biāo)和對不感興趣的背景進(jìn)行區(qū)分。如果目標(biāo)和背景的類之間的差距越大,說明兩者的區(qū)別越小,當(dāng)類之間的方差越大時,錯誤的分類可能性越小。因此,用每個灰度值作為閾值來計算不同的分割類之間的方差,相應(yīng)的閾值為閾值。
2.4.2 最大熵方法
這種最大閾量數(shù)值分割選擇的基本原理也就是,對閾值分割之后的一個有效感興趣的該目標(biāo)信息類和不感興趣的目標(biāo)背景信息類之間的總值和熵值分別進(jìn)行最大的閾值分割,從而可以使其當(dāng)中所含的背景信息數(shù)量最大化。
2.4.3 自適應(yīng)閾值化
本文設(shè)計的是基于局部自適應(yīng)的二值分割法,與全局閾值分割不同,它通過像素窗函數(shù)中的像素值來確定該像素位置的二值分割閾值,是一個局部分割法。因此,每個像素位置的二值化閾值并非定值,而是動態(tài)變化的,它依賴于鄰域像素分布,這是選擇的這種方法的優(yōu)點(diǎn)所在。顯然,在圖像中明亮度更高的像素區(qū)間中,局部自適應(yīng)產(chǎn)生的閾值也較大,在圖像中,明亮度更低的像素區(qū)間中,局部自適應(yīng)產(chǎn)生的閾值將適當(dāng)?shù)乜s小。利用此方法,圖像中亮度不同,細(xì)節(jié)紋理,對比度不同的局部圖像區(qū)域?qū)邢鄳?yīng)的局部二值化閾值。
常用的局部自適應(yīng)閾值分割方式有如下兩種:一種是將該點(diǎn)的局部窗口函數(shù)的平均值設(shè)為該點(diǎn)二值化的閾值。還有一種是對計算該取值點(diǎn)的一個局部窗口化學(xué)函數(shù)的值進(jìn)行高斯加權(quán),作為計算該取值點(diǎn)的二次取值點(diǎn)在化學(xué)函閾下的值。
本文所設(shè)計的局部自適應(yīng)閾值分割是用鄰域塊的高斯加權(quán)計算的二值閾值,其方法是鄰域塊的高斯加權(quán)。結(jié)果見圖6。
圖6 閾值分割圖
閾值分割后液體和瓶蓋能大致凸顯出來,但液位上方仍有很多干擾,因此需要再經(jīng)過濾波和形態(tài)學(xué)操作。
濾波依然采用中值濾波,鄰域尺寸選擇7像素點(diǎn),效果見圖7。
圖7 中值濾波圖
這樣的液位上方的干擾就完全消失了,而液體和瓶蓋的白色部分中也存在著黑洞,有些在黑色部分中也有微型的白塊。為了確保后輪廓識別的唯一性,需要將圖像進(jìn)行形態(tài)操作,將圖像劃分為幾個獨(dú)立的完整區(qū)域。
對濾波后的圖像進(jìn)行先用3×3的核腐蝕,再使用15×15的內(nèi)核膨脹3次,操作后得到的圖像見圖8。
圖8 形態(tài)學(xué)操作后圖像
在已經(jīng)得到的二值圖像中,液體區(qū)域?qū)?yīng)下方白色區(qū)域,瓶蓋(即瓶身頂部)對于上方小塊白色區(qū)域,背景對應(yīng)像素為黑色,現(xiàn)在對輪廓進(jìn)行檢索。
輪廓檢索選擇多邊形近似的方法,對于一條閉合邊界,當(dāng)多邊形的邊數(shù)目等于邊界上的點(diǎn)數(shù)時,這種近似會變得很精確,此時每對相鄰點(diǎn)定義了多邊形的一條邊。尋找到的輪廓用綠色線標(biāo)出。
輪廓尋找后,為了方便計算像素距離,需要對輪廓繪制邊界框。矩形邊界框的提取基于Douglas-Peucker算法,原理見圖9。
圖9 Douglas-Peucker算法原理
1)將連續(xù)曲線的中段首尾為起點(diǎn)利用a,b之間的一條直線線將ab連接起來,這條線是一條連續(xù)曲線的正弦;
2)得到曲線上離該直線段距離最大的點(diǎn)C,計算其與AB的距離d;
3)對該原點(diǎn)距離和直線預(yù)先確定的原點(diǎn)threshold的直線大小距離進(jìn)行直線比較,如果沒有大于零的threshold,則將該距離直線大小作為近似處理曲線,對該段直線進(jìn)行近似處理;
4)若距離超過閾值,則用 c 將曲線劃分為ac和bc兩段,并分別處理兩段取弦,分別處理為13;
5)在所有的分割曲線點(diǎn)都處理好后,依次將各個被分割出的點(diǎn)所需要形成的兩條折線連接起來,即可形成作為近似點(diǎn)的曲線。
最終檢測出一條水平線,整體圖像矩形框出了箱頭,下面框出箱底,輸出為一個Rect變量和一個綠色線高度,這是Opencv中一種數(shù)據(jù)類型,包含成員變量(x,y)(矩形左上角頂點(diǎn))、width(矩形寬度)、height(矩形高度)。最終結(jié)果通過以下式子計算:
(5)
Hw=Rect[2].height
(6)
Hb=Rect[2].y+Rect[2].height-Rect[1].y
(7)
式中量與符號說明見表1。
表1 變量對應(yīng)關(guān)系
計算時需要先輸入瓶身的實際高度,這個可以預(yù)先通過標(biāo)準(zhǔn)直尺測量,這里輸入20。
采用的設(shè)備及試驗結(jié)果見表2。
表2 試驗設(shè)備及結(jié)果
經(jīng)實驗室測量,測量系統(tǒng)具有良好的精確度,能夠保持原儀表的精確度等級。
將YOLO-v5和ResNet算法應(yīng)用于艙底水液位識別,試驗驗證表明,該模型算法識別結(jié)果相對誤差僅為3.27%。模型算法具有自學(xué)習(xí)能力,隨著學(xué)習(xí)訓(xùn)練樣本的不斷增加,識別準(zhǔn)確率也將不斷提高,將來有望取代浮子、壓力式、超聲波和雷達(dá)自動水位式等傳統(tǒng)的監(jiān)測方法。