張勇停 李 鋒
(江蘇科技大學 鎮江 212003)
線結構光掃描技術是一種基于光學三角法的非接觸式測量技術,主要由相機和投射線光條的激光器組成,被廣泛應用于三維測量、三維圖像重建、焊縫檢測與跟蹤、質量檢測等領域[1~2]。測量時,先將線激光器發射的激光束投射到被測物體,激光平面勻速掃描物體表面的同時使用相機連續拍照,根據相機拍攝的光條圖像計算二維圖像的中心坐標,再根據標定得到的系統參數就可以計算二維坐標對應在世界坐標系中的三維坐標。線光條圖像具有一定的像素寬度,通常為幾到幾十個像素,能否精確地提取光條中心是線結構光視覺系統的關鍵,其提取精度直接影響到整個線結構光視覺系統的精度[3]。
傳統的光條中心提取算法主要有極值法[4]、灰度重心法[5]、方向模板法[6]、曲線擬合法[7]、基于Hessian 的Steger 算法[8]。極值法是從光條局部截面上尋找灰度分布的極大值點作為中心,對于灰度分布滿足符合理想高斯分布的光條具有非常好的提取效果,計算速度快,但易受噪聲影響,精度較低,適用性低。灰度重心法的算法簡單,計算效率高,但精度低,對噪聲敏感。方向模板法雖然降低了噪聲對中心提取結果影響,但是計算效率大大下降。曲線擬合法的核心在于采用多項式曲線來擬合已有光條,從而用擬合的多項式代替原光條。基于Hessian 的Steger 算法計算精度高,但需要進行大量的高斯卷積運算,運行速度較慢。Wu[9]等提出了一種均方灰度梯度法和灰度重心法結合的算法,速度快且精度高。蔡懷宇[10]等提出了一種基于PCA 的中心線提取方法,用PCA 法代替Hessian 矩陣獲取光條的法線方向,明顯提高了計算速度。
近年來,深度學習在圖像分類、目標檢測、圖像語義分割等[11~13]領域取得了一系列突破性的研究成果,但是深度學習在光條中心提取方面還沒有太多的研究。王勝春[14]等提出基于ENet 網絡對光條進行分割,再利用模板法計算光條中心,增加了算法復雜度。郭雁蓉[15]等提出一種兩段式的卷積神經網絡,第一個網絡用于目標檢測,第二個網絡進行中心提取,在復雜環境中的提取結果比Hessian 矩陣法、灰度重心法表現好,但是增加了傳播錯誤。
UNet 網絡是Ronnerberger 等[16]在FCN[17]網絡的基礎上開發的。如圖1所示,UNet網絡具有對稱的U型編解碼結構,編碼器對應的是圖像下采樣過程,解碼器對應的是特征圖上采樣過程。在編碼器部分中采用最大池化操作來縮小特征圖,提取更高層次的特征,用來獲取場景信息;在解碼器部分使用上采樣操作來恢復到原始圖像大小,上采樣的過程是結合了下采樣各層信息和上采樣的輸入信息來還原細節信息。相應的編碼器和解碼器之間通過跳躍連接恢復上采樣圖像的細節信息。編碼器通過CNN 單元來獲取圖像的特征信息,包括卷積層,BN層和ReLU層,如圖1所示。

圖1 UNet特征提取模塊
RCNN[18]是基于CNN的模型優化,在CNN單元上加兩個求和運算就得到了RCNN,如圖2所示。

圖2 改進的特征提取模塊
輸入圖像后,RCNN 首先通過第一個3×3 的卷積層生成初步特征圖,經過BN 層ReLU 層之后,再用第二個3×3 的卷積層生成新的特征圖,將兩次的特征圖相加生成輸出特征X(t-1)。再通過同樣的操作,并與初步特征圖相加就得到了RCNN 單元的輸出特征圖X(t)。
每個RCNN 單元中都有5 個卷積,并在每個卷積后還有一次加法運算,因此RCNN 單元的圖像有效感受場將逐漸擴大。通過這些成功的卷積操作和加法運算后,RCNN 單元可以提取比只有固定有效感受場的普通CNN 單元更深和更復雜的特征數據。同時這5 個卷積層共享權重參數,需要學習的參數數量不變,減少了網絡模型的復雜度。
本文提出的基于RCNN 的UNet 網絡結構如圖3 所示,將UNet 網絡中的CNN 單元替換為改進后的RCNN 單元。該網絡共7層架構,即3層編碼器、橋接器和3 層解碼器,共36 層網絡,最后一層是每個像素的sigmoid激活函數。sigmoid激活函數將對應的特征映射轉換為概率值pi,表示該像素是光條中心的概率。假設yi表示像素點(i)的標簽,則yi=1,否則,為yi=0。該算法采用二元交叉熵函數作為損失函數,其計算公式如下:

圖3 改進的UNet網絡結構
其中N是輸入圖像的像素數量。
實驗采用FU650L200-BD22 一字線激光器和Manta G-125B 工業相機采集圖像,數據集的圖片大小均為512pixel×512pixel,數據集共1500 張圖片,訓練集和測試集分別為1150和350張圖片。
本文的實驗使用的深度學習框架是Pytorch,顯卡是GeForce GTX 1080GPU(顯存大小為8GB),操作環境是基于i7-7820 的64 位Windows 10,編程語言是Python3.7。
在數據預處理階段,將數據集圖片進行數據增強處理,包括翻轉、旋轉、裁剪、縮放等操作。在參數優化階段使用Adam優化器,Adam算法的作用是可以在訓練時自適應地調整學習率,初始學習率為0.0001,batch size為6,epoch為200次。
通過對比如圖4 所示的loss 曲線,可以看出迭代次數在達到25左右時loss曲線趨于平緩,隨著迭代次數的增加,模型逐漸收斂。

圖4 訓練loss曲線
為了驗證本文所提算法的性能,分別采用傳統的灰度重心法,Steger 算法和本文算法對線結構光的光條進行中心提取,分別對比三種算法的精度和計算效率。圖5(a)~圖5(c)分別為連續型光條、間斷型光條和曲線型光條三種不同形狀的光條。

圖5 三種不同形狀的光條
不同方法提取不同形狀光條中心的實驗結果如圖6 所示。圖6(a)~圖6(c)分別為灰度重心法、Steger算法和本文改進方法的提取結果。

圖6 不同算法的提取結果
由上述實驗結果可知,灰度重心法在光條灰度不均勻時的提取效果較差,Steger 算法和本文算法受光條灰度分布影響較小,性能更穩定。
對上述實驗的實驗結果做精度分析,可以通過改進算法提取到的光條中心點到光條中心真值距離的標準差來表示該提取算法的精度。標準差可表示為
式中,n為中心點個數,xi為第i個中心點到真值的距離,為中心點到真值的平均值。表1 為通過三種算法計算后得到光條中心坐標的標準差。

表1 各算法的標準差
表2 為上述三組不同形狀的圖片分別在三種算法下的程序運行時間。

表2 各算法的運行時間
為了進一步體現本文算法的優勢,對比灰度重心法、Steger算法和本文算法的綜合性能,分別取三種算法的程序運行時間和標準差的乘積作為衡量算法綜合性能的評判標準,如表3 所示,可以看出,本文所提算法的綜合性能與灰度重心法和Steger法相比較具有一定的優勢。

表3 各算法的綜合性能
為了驗證本文算法的在噪聲下的提取效果,在光條圖像中添加由高斯噪聲和椒鹽噪聲組成的單像素噪聲點。圖7 為原圖提取的光條中心,圖8 為噪聲處理后提取的光條中心。

圖7 原圖的提取結果

圖8 噪聲處理后的提取結果
通過對比圖可以看出,噪聲處理前后光條的提取結果相差很小,幾乎不受噪聲影響。
綜上所述,本文提出的基于改進UNet 網絡的線結構光光條中心提取算法相比Steger 算法和灰度重心法對光條中心的提取效果更好、性能更穩定、計算效率更高。
通過對傳統的UNet 網絡進行改進,將普通的CNN單元替換為改進的RCNN單元,在特征變換過程中保留了更多的細節信息,利用端到端的深度學習方式,減少了先分割光條后提取中心的傳播錯誤。通過對不同形狀的光條,采用傳統的灰度重心法和Steger 算法進行對比實驗,本文算法的精度要比傳統灰度重心法要高,運行時間要比Steger 算法更少,滿足實時性的要求,且有一定的抗噪性,綜合性能較好。