陳鵬慧,張楠珂
(湖南信息職業(yè)技術(shù)學院,湖南長沙,410200)
仿生機器魚外型通常都類似于某種魚類,其自身所帶的感知系統(tǒng)來分析所處的水中環(huán)境。感知系統(tǒng)由攝像頭、聲吶、紅外、激光等其中的一個或多個組成。通過攝像頭或相機可以有效地存儲視頻和圖片數(shù)據(jù),然后進行后續(xù)的分析與處理。但是水中視覺的處理中也會存在很多問題,如水對光線的吸收、水下光線的折射、水下光線的散射,及水的波動等都會影響水中圖像的采集效果等。以下兩個是水中采集圖像中存在較為普遍的問題:一是水下采集到的圖像會退化嚴重,對比度會降低;二是攝像頭視角不是正對著物體和水波的影響,使得水下采集到的圖像會發(fā)生幾何形變,也稱畸變。在本文中,我們也針對水下仿生機器魚視覺系統(tǒng)采集圖像的這兩個主要問題來進行處理與分析,也就是所說的水下圖像預處理。
水下圖像退化的主要原因是仿生機器魚的移動造成水波引起的退化、水下光線的折射或攝像頭不聚焦引起的對比度的降低等,因此需要進行圖像的增強,這也是水下機器人圖像預處理和一般的圖像處理不一樣的地方[3]。在OpenCV中圖像增強的主要方法有4種:基于直方圖均衡的圖像增強、基于拉普拉斯算子的圖像增強、基于對數(shù)Log變換的圖像增強、基于伽馬變換的圖像增強。
這里我們就采用直方圖均衡的圖像增強,該算法是目前比較常用的水下圖像圖像增強算法之一。傳統(tǒng)的直方圖均衡HE算法(Histogram Equalization)有以下的問題:部分區(qū)域?qū)Ρ榷仍鰪娞蠛蟪蔀榱嗽朦c;另有一些區(qū)域因為調(diào)整后變得更暗或者更亮,丟失了細節(jié)。OpenCV中提供了改進的對比度有限的自適應(yīng)直方圖均衡CLAHE(Contrast Limited Adaptive Histogram Equalization)算法,可以直接調(diào)用實現(xiàn)。CLAHE算法改良了CLAHE算法加入了對比度限制避免了HE算法的問題,可以應(yīng)于水下圖像增強中。我們在實驗中直接調(diào)用CLAHE算法來實現(xiàn)圖像增強。
水下圖像畸變的主要原因是攝像頭視角不是正對著物體而發(fā)生的幾何形變,以及水中的水波紋對視像頭采集的圖像影響。為了后續(xù)機器魚識別不同形狀的物體,需要對拍攝到的圖像進行識別與矯正。
在OpenCV中的處理圖像畸變主要是兩種方法:仿射變換和透視變換。仿射變換是基于2*3矩陣進行的變化,是二維坐標到二維坐標之間的線性變換。仿射變換參數(shù)少,有利于問題的解決。它的缺點是所產(chǎn)生的表示并不能適應(yīng)視角間所有的關(guān)系。由視角微小的變化導致的失真就是仿射,所以在有些環(huán)境下,仿射變換也夠用了。
透視變換時基于3x3矩陣的變換,這種變換當作一個三維平面被一個特定觀察者感知的計算方法,觀察者也許不是垂直觀測該平面。仿射變換可以將矩形轉(zhuǎn)換成平行四邊形。它可以將矩形的邊壓扁但必須保持邊是平行的,也可以將矩形旋轉(zhuǎn)或者按比例變化。透視變換提供了更大的靈活性,一個透視變換可以將矩形轉(zhuǎn)變成梯形。當然,因為平行四邊形也是梯形,所以仿射變換是透視變換的子集。我們選用的時仿射變換來完成圖像的幾何畸變矯正處理。通過兩步完成:獲取仿射映射矩陣getAffineTransform或getRotationMatrix2D、然后進行仿射變換warpAffine。
考慮到仿生機器魚執(zhí)行水下任務(wù)時,水下環(huán)境中會人為放置很多設(shè)備,有些設(shè)備的幾何形狀是固定的,就可以通過幾何形狀的檢測將這些設(shè)備識別出來,因此在這里也進行圖像幾何形狀檢測的分析與處理。
Opencv中的幾何形狀的檢測就是檢測輪廓,將這些點具有同樣的顏色點連起來形成幾何形狀。在Opencv中可以采用霍夫變換(Hough Transform)來檢測圖像中的幾何形狀如直線、圓形及其他簡單形狀等。使用霍夫變換獲取幾何形狀之前,我們要先對圖像進行邊緣檢測,得到邊緣二值圖像后才能進行霍夫變換。在Opencv中進行邊緣檢測可以用Canny算法來實現(xiàn),得到二值圖像。霍夫變換是二值圖像中找到直線一個比較快速的方法。需要使用的函數(shù)有:cvCanny、HoughLines、HoughCircles。我們會使用cvCanny函數(shù)進行邊緣檢測、使用HoughLines 函數(shù)來檢測直線,使用HoughCircles函數(shù)來檢測圓形。
在本文中,我們選用的仿生機器魚是SmartTuna的創(chuàng)新版。該仿生機器魚創(chuàng)新平臺 SmartTuna 產(chǎn)品是深圳樂智機器人有限公司聯(lián)合北京大學智能控制實驗室共同研發(fā)的一款多用途機器人科研競賽教學平臺。仿生機器魚創(chuàng)新平臺的機械動力部分應(yīng)用仿生學技術(shù)模擬魚類的游動方式,使機器魚在水下游動時動作連續(xù)、自由靈活。由于平臺具有較高的拓展性,通過簡單的結(jié)構(gòu)和功能艙體組合,即可完成多方面的任務(wù)。圖1為SmartTuna未進行改進時的實物圖。
圖1 SmartTuna 實物圖
該仿生機器魚由:擺動推進機構(gòu)、主控部分與攝像頭等硬件共同組成。利用紅外傳感器和攝像頭兩種主要視覺傳感設(shè)備來幫助仿生機器魚在特定的水池實驗環(huán)境中完成石油管道巡檢任務(wù)。
IAR Embedded Workbench for Atmel AVR 集成開發(fā)環(huán)境、uCOS-II用于仿生機器魚的基本處理、visual studio2017、OpenCV用于仿生機器魚攝像頭的圖像采集與處理。仿生機器魚控制程序的編寫以C語言為主。
圖2 仿生機器魚的硬件基本組成圖
水池模擬水下石油管道的環(huán)境。水池的長寬深度為3000mm×2000mm×300mm,水池的顏色為深藍色,水池內(nèi)放置三根白色管道,管道直徑為110mm,并在管道的一些部位貼上黑色的直徑為50mm圓形貼紙,模擬石油管道出現(xiàn)漏油的情形。
圖3 實驗水池環(huán)境
仿生機器魚放置在水池中的任何一個地方,仿生機器魚都要能夠順利的把所有漏油點找出來,并在找到漏油點的地方發(fā)出警報聲。
為了更高效的查找到漏油點,我們在仿生機器魚的底部加入了多個防水的紅外光電傳感器,以便在石油管道上快速檢測漏油點。如圖4所示,仿生機器魚的頭部有2個紅外光電傳感器、魚身中間部位安裝了4個紅外光電傳感器。這個安裝的寬度與布局與石油管道的寬度有關(guān)。
圖4 實驗所用仿生機器魚的底部示意圖
我們將任務(wù)分成兩個主要部分,第一個部分是機器魚查找到石油管道;二是機器魚沿著石油管道前進并在管道上找到漏油點。具體實施時,考慮到機器魚的硬件處理能力等因素,完成第一個部分主要通過機器魚攝像頭的采集前方水域的圖像與處理來實現(xiàn)。完成第二個部分主要通過多個紅外傳感器采集機器魚下方水域信號及處理來實現(xiàn)。
完成第一部分任務(wù)時,考慮到實驗中黑色漏油點、白色管道、藍色水池,包含了黑、白、藍三個主要的顏色。攝像頭輸出的顏色格式為RGB格式。在RGB色彩空間,不同的光照情況會影響到顏色的識別,光照較強時,圖像色彩對比度變高,顏色識別效果好;當光照較弱時,圖像色彩偏黑,會將其他顏色識別為黑色。而HSV色彩空間則不一樣,H為顏色的色調(diào),S為顏色的飽和度,V為顏色的明度,光照不強時,影響的是圖像中像素點顏色的明度,與色調(diào)、飽和度沒有關(guān)系,因此可以使用HSV來減少光照對圖像顏色識別的影響。為了更好的識別漏油點,實驗處理時會將圖像RGB轉(zhuǎn)換成HSV。
完成第二部分任務(wù)時,機器魚有一個調(diào)整姿態(tài)確保其沿著管道運動的過程。機器魚沿著石油管道前進的直行姿態(tài)是:仿生機器魚頭部的兩個紅外傳感器獲的寬度大于石油管道的寬度,調(diào)整紅外傳感器的閾值使得讀取到藍色水池里水的顏色為黑色信號,仿生機器魚腹部紅外傳感器在石油管道上的獲取的是白色信號。一旦出現(xiàn)傳感器采集到的信號值與直行姿態(tài)不一致,則要分析機器魚的身體的偏離情況,再綜合上一時刻機器魚的姿態(tài),共同分析得到機器魚的當前需要如何運動才能保證機器魚沿著石油管道前進。
通過實驗任務(wù)和實現(xiàn)思路的分析,具體的實現(xiàn)步驟如下:
(1)仿生機器魚任意的放在水池中,利用仿生機器魚的攝像頭按一定的頻率去獲取水池中的圖像,并將圖像上傳到計算機中。
(2)同時將采集的圖像先將RGB色彩空間轉(zhuǎn)換為HSV色彩空間,然后利用Opencv中的cvtColor()函數(shù)檢測是否有一定數(shù)量的白色像素點。
(3)如果有一定的白色像素點,則利用圖像處理中的圖像增強和仿射變換的操作,來進行圖像的預處理通過。
(4)幾何檢測查找直線區(qū)域,判斷是否為石油管道。
(5)查找到石油管道后,機器魚游運動至機器魚底部檢測到白色信號。這里機器魚已經(jīng)位于石油管道上方,再調(diào)整機器魚姿態(tài),確保機器魚在石油管道上。
(6)然后繼續(xù)不斷檢測紅外傳感器上的信號,調(diào)整仿生機器魚的姿態(tài),機器魚在白色管道一直前進的基礎(chǔ)上。機器魚底部的傳感器若檢測到了黑色。
(7)為了驗證這個是漏油點而不是誤檢測,此時將多個周期采集到黑色信號作為查找到漏油點的依據(jù),并發(fā)出警報。
(8)最后,仿生機器魚判斷自身檢測到了幾次石油漏油點,少于8次可以重新開始一輪檢測過程。
在實驗室藍色水池底部的白色水管表面,我們隨機布置了8個黑色圓形區(qū)域作為漏油點,以十次實驗次數(shù)為單位做記錄,最近一次記錄仿生機器魚檢測到漏油點的比率為73.75%。
在實驗過程中,我們仿生機器魚上安裝的紅外傳感器的寬度、HSV色域中的參數(shù)閾值、邊緣檢測算子等都在不斷的調(diào)整,調(diào)整后讓檢測到漏油點的整體比率有所上升。該仿生機器魚硬件和控制程序參加了2018年的中國機器人大賽水中機器人石油管道檢測項目,只獲得三等獎,由此可見需要我們進一步的算法的改進和參數(shù)的調(diào)整等處理。
表1 實驗檢測到的漏油點個數(shù)