謝忠陽,楊成禹
(長春理工大學 光電工程學院,長春 130022)
工業內窺鏡是一種可在不拆卸被檢測設備甚至被測設備仍處在正常運行的情況下,對缺陷面實現缺陷檢測的光學傳感器。因其具備鏡頭尺寸小、簡易便攜和直觀可靠的特點,被廣泛用于汽車發動機、航空發動機、鐵路建筑和機械制造等領域[1]。
檢測人員在使用工業內窺鏡進行缺陷檢測時,首先要將內窺鏡頭伸入被檢測物體內部(一般是狹窄空間),然后調整鏡頭焦距、調節鏡頭與觀察面的距離,最后,通過移動鏡頭,對觀察面出現的缺陷進行拍攝。因為工業內窺鏡使用場合多是狹窄、灰暗的地方,且內窺鏡頭通常是靠近缺陷區域的,這就造成其視野范圍相對較小。當被檢測設備出現較大、較長的缺陷時,檢測人員憑借內窺鏡只能看到局部缺陷的圖片,便會造成檢測結果錯誤。
尺度不變特征變換(Scale-Invariant Feature Transform,SIFT)是Lowe[2]在2004 年提出的圖像特征描述方法,被廣泛用于圖像拼接、圖像匹配等領域。SIFT 算法的優點在于檢測出來的關鍵點對圖像尺度和旋轉是不變的,而且能在一定程度上不受仿射失真、三維視點變化、噪聲和光照變化的干擾,具有很好的穩定性和不變性。面對需要處理的大量特征信息時,也能夠進行高效的信息區分,區分性強,此外,還具備多量性、高速性和擴展性等優點,能夠滿足工業內窺鏡的使用場合。
在目標檢測及缺陷識別領域,基于深度學習的檢測算法已經逐步取代了傳統的檢測算法[3]。YOLO(You Only Look Once)算法是Redmon 等人[4]在2016 年提出的基于深度神經網絡的一種onestage 類型的對象識別和定位算法,運行速度快,可以進行實時檢測。本研究在圖像拼接完成后,利用YOLOv3 算法,對缺陷區域進行識別[5]。
SIFT 算法雖然具有很多優勢,但步驟十分復雜,在處理過程中,因計算量較大,使得實用性大大降低。基于此,提出一種基于改進SIFT 算法的缺陷測量方法。
在對獲取的缺陷圖片進行拼接實驗過程中,經常會發現圖片中有許多區域是無缺陷的空白區域,然而使用SIFT 算法進行角點檢測的過程,卻要對圖片進行全局處理,獲取整個圖片的尺度空間結構。基于此,決定在進行尺度空間的獲取中使用灰度閾值處理的方法,利用閾值,按圖像的灰度特性,將原圖像分成前景、背景兩個圖像,對被檢測設備的缺陷區域和背景區域進行劃分,減少對圖像中無效區域的處理,通過將圖像檢測范圍縮小,既可以大幅度降低檢測的計算量,又能夠滿足檢測區域對精度的要求。
1.1.1 改進的SIFT 角點檢測算法
(1)構建尺度空間
灰度閾值處理算法步驟概括:①計算輸入圖像的歸一化直方圖;②計算累積和;③計算累積均值;④計算全局灰度均值;⑤計算類間方差;⑥得到兩個閾值;⑦計算全局方差。通過對圖像的計算處理,獲得合適的閾值區間,進而將圖像中缺陷區域與空白區域劃分出來。
物體都是通過一定的尺度來反映的,不同尺度的觀察會得到不同的變化。基于此,在所獲得的缺陷區域圖像中找到對尺度變化不變的圖像位置,在所有可能的尺度上使用一個稱為尺度空間的函數,搜索穩定的特征實現圖像的分層。在SIFT 中,使用高斯核實現平滑,控制平滑的參數稱為尺度參數。建立起不同的尺度空間,也被稱為圖像的高斯金字塔。灰度圖像的尺度空間L(x,y,σ)是f與一個可變尺度高斯核的卷積,計算公式:
其中,*代表卷積。
SIFT 將尺度空間細分為倍頻程,每個倍頻程對應于σ的加倍,再將每個倍頻程進一步細分為s個整數區間。尺度空間的獲取如圖1 所示。

圖1 SIFT 算法的尺度空間獲取
圖1 中,經過灰度閾值處理后的圖像,按相同尺度變換,形成不同層次的倍頻程,每個倍頻程的各個高斯低通核中使用的標準差(有著相同冪次k的相同數量的圖像是在每個倍頻程生成的)。
(2)得到初始關鍵點
首先檢測一個倍頻程中兩幅相鄰尺度空間圖像的高斯差的極值,然后與對應于這個倍頻程的輸入圖像進行卷積。獲得關鍵點的示意圖,如圖2 所示。

圖2 獲得初始關鍵點
中間的檢測點和與他同尺度的8 個相鄰點和上下相鄰尺度對應的26 個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。
Lindberg 證明了尺度空間中的真正尺度不變性,要求使用σ2對LOG 進行歸一化:
因此,DOG 函數已經“內置”了必要的尺度,因子(k-1)在所有尺度上都是常數,它不影響尺度空間中極值的定位過程。
(3)提高關鍵點位置的精度
一個連續函數被取樣時,它真正的最大值或最小值實際上可能位于樣本點之間。得到接近真實極值(亞像素精度)的一種方法是,首先在數字函數中的每個極值點處擬合一個內插函數,然后在內插后的函數中查找改進精度后的極值位置。
利用DOG 函數在尺度空間進行泰勒展開,對展開式進行求導,使其為0,便可以得到極值點。通常,保留絕對值不低于0.03 的特征點,可以達到去除低對比度點的目的。
(4)刪除不合適的關鍵點,消除邊緣響應
產生邊緣效應主要是指高斯函數在邊緣易產生噪聲。DOG 函數峰值點在橫跨邊緣的方向有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。
利用Hessian 矩陣來判斷關鍵點是否位于邊緣。由于DOG 函數的主曲率和Hessian 的特征值成正比,為了避免直接計算這些特征值,處理過程中只考慮他們之間的比率。當特征值的比值小于設定值時,將關鍵點保留,反之剔除。
(5)計算關鍵點方向
通過求每個極值點的梯度來為極值點賦予方向,使其具備旋轉不變性。所有方向的計算都以尺度不變的方式執行,對這一尺度的每個圖像樣本L(x,y),使用像素差計算梯度幅度M(x,y)和方向角θ(x,y),計算公式如下:
(6)計算關鍵點描述子
特征描述符指的是檢測圖像的局部特征(比如邊緣、角點、輪廓等),然后根據匹配目標的需要進行特征的組合、變換,以形成易于匹配、穩定性好的特征向量,從而把圖像匹配問題轉化為特征的匹配問題,進而將特征的匹配問題轉化為特征空間特征向量的聚類問題。
以關鍵點為中心的鄰域窗口采樣,并用直方圖統計鄰域像素的梯度方向。直方圖的峰值代表了該關鍵點鄰域梯度的主方向,相當于主峰值80%能量的峰值稱為關鍵點輔方向。主方向與輔方向共同存在,可以增強匹配的魯棒性、穩定性。SIFT 用描述子來識別兩幅或多幅圖像中局部區域之間的匹配(相似性),描述子數據被組織為一個128 維的向量。該向量選取16×16 領域,然后將這個大區域分為16 個4×4 區域,分別對每個4×4 區域8 方向分布,共計16×8=128 維向量組成的特征點描述子。具體步驟如圖3 所示。此時的SIFT 特征向量已經去除了尺度變化、旋轉等幾何變形因素的影響,再繼續將特征向量的長度歸一化,則可以進一步去除光照變化的影響。

圖3 計算關鍵點描述子
當兩幅圖像的SIFT 特征向量生成后,下一步采用關鍵點特征向量的歐式距離來作為兩幅圖像中關鍵點的相似性判定度量。取一個圖像中的某個關鍵點,并找出其與另一個圖像中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離少于某個比例閾值,則接受這一對匹配點。降低這個比例閾值,SIFT 匹配點數目會減少,但更加穩定。過程步驟如圖3 所示。
1.1.2 BF 匹配算法
暴力匹配(Brute Force,BF)是一種模式匹配算法。在計算機語言中,一幅圖片就是一組數據的集合,處理圖像其實就是在處理圖片中的像素數據。兩幅缺陷圖像在進行拼接處理的過程中,把其中一幅缺陷圖像數據視為目標串數據S,另一幅要與之拼接的圖像稱為模式串數據T。通過使用BF 算法將目標串S的第一個字符與模式串T的第一個字符進行匹配,若相等,則繼續比較S的第二個字符和T的第二個字符;若不相等,則比較S的第二個字符和T的第一個字符,依次比較下去,直到得出最后的匹配結果。
圖像匹配通過識別出圖像之間相似的部分,將兩幅或多幅圖像中的某種性質進行對比,被廣泛應用于諸多領域。
通過BF 算法,將兩幅圖片中相同的角點進行匹配,尋找兩張圖片中的相似處。據此使兩張缺陷圖片完成融合。實驗中,在融合之后,對圖片做了修剪處理。
目標檢測可以看成圖像分類與定位的結合,給定一張圖像,目標檢測系統要能夠識別出圖片的目標并給出其位置,由于圖片中目標數是不定的,且要給出目標的精確位置,目標檢測相比分類任務更復雜。其中,YOLO 系列算法比較簡潔且速度快,由于是對整張圖片做卷積,所以其在檢測目標的過程中有更大的視野,不容易對背景誤判。另外,YOLO 的泛化能力強,在做遷移時,模型魯棒性高[6]。
YOLOv3 算法采用多尺度融合預測的方案,提高了對小目標的檢測精度。通過FPN 操作將下采樣得到的特征圖進行多尺度融合,分別得到13×13、26×26 和52×52 的三種尺度特征圖,實現了對大、中、小目標的預測。將原來的單標簽分類改為多標簽分類,實現對重疊區域的分類和框選。借鑒殘差結構的設計思想,使用Darknet-53 作為主干特征提取,整個網絡沒有使用池化層和全連接層,而是通過增加卷積核步長來實現采樣。YOLOv3 總共有106 層,實現了對每張圖像在大、中、小三個尺度上檢測目標,網格有三個出口,分別是82 層、94 層、106 層[7]。YOLOv3的網絡結構,如圖4 所示。

圖4 YOLOv3 網絡結構
YOLOv3 將目標檢測當作回歸問題進行處理,所以采用的損失函數為均方差損失函數。YOLOv3 的損失函數losstotal由三部分組成,分別是邊界框預測損失函數losscoord、邊界框置信度損失函數lossconfidence、分類損失函數lossclass,計算公式為:
YOLOv3 的評價指標主要為精度和召回率,精度以及召回率的計算如下:
2.1.1 圖像預處理
實驗中,對鋼管上較長、較大的缺陷進行拍攝,得到了兩幅局部缺陷圖,如圖5(a)所示。因為在獲取圖像的過程中,會產生以高斯噪聲和椒鹽噪聲為主的噪聲信號,所以在進行缺陷測量前,需要對圖像進行預處理,降低由于噪聲所產生的誤檢率[8]。


圖5 圖像預處理
為改善檢測的效果,本實驗使用高斯濾波算法進行圖片的濾波處理。高斯濾波是一種通過對整幅圖像進行加權平均的線性平滑濾波算法。處理效果如圖5(b)所示。為了增強圖像的視覺效果,有目的地強調圖像的整體或局部特性,將原來不清晰的圖像變得清晰,擴大圖像中不同物體特征之間的差別,使用圖像增強算法對圖像進行預處理,結果如圖5(c)所示。
2.1.2 角點檢測
圖像經過預處理后,已經基本滿足使用條件。分別對兩幅圖使用灰度閾值分割算法,結果如圖6(a)所示。根據分割結果,對原圖片進行切分處理,得到新的缺陷圖片,結果如圖6(b)所示。

圖6 閾值圖像分割結果
角點也被稱為興趣點和特征點,能夠在一定程度上保留圖像中重要的特征信息。角點檢測是圖像拼接的重要環節,檢測效果的好壞將直接影響到拼接結果的準確性。實驗對兩幅圖像分別進行SIFT 角點檢測,檢測結果如圖7(a)所示。

圖7 缺陷拼接結果
與SIFT 算法類似,FAST、Harris、SURF 等也可以用于角點檢測。其中,SIFT 和SURF 檢測效果是優于FAST 和Harris 的,但SIFT 在尺度和旋轉變換的情況優于SURF,所以SIFT 算法更適合工業內窺鏡的使用場合。為了驗證所選算法的適宜性,本實驗在完成檢測環節之后,通過檢測同一張圖片,將幾種算法的檢測效果作了對比,實驗進行20 組,結果如表1 所示。

表1 角點檢測對比
從表中可以看出,FAST 和Harris 檢測速度非常快,但FAST 檢測出的角點個數明顯過多,Harris檢測出的角點個數過少,將會使拼接效果變差。SIFT 與SURF 檢測個數居中,在拼接中具有優勢,改進的SIFT 算法檢測速度得到明顯提升,與傳統的SIFT 算法相比提高了44.3%。
2.1.3 匹配融合
使用BF 匹配算法,將兩幅圖片中的角點進行匹配。匹配結果如圖7(b)所示。最后,對圖像進行融合,完成拼接實驗。拼接結果如圖7(c)所示。
2.2.1 基于YOLOv3 算法的缺陷檢測實驗
在完成實驗之前,需要在不同的光照場景、角度對缺陷進行拍攝,共拍攝3 000 張缺陷圖片,建立數據集[9]。利用Matlab 編寫YOLOv3 訓練程序,并在訓練中對參數進行優化設置,總的訓練次數為200 輪次(epoch)。YOLOv3 的總損失值分別來自位置、置信度和分類帶來的誤差,函數曲線如圖8(a)所示。根據公式(6)和公式(7),計算得到準確率及召回率曲線,如圖8(b)、圖8(c)所示,平均精度均值(mean Average Precision,mAP)最大值為83.28%,函數曲線如圖8(d)所示。

圖8 YOLOv3 訓練結果
訓練結束后,利用得到的參數模型對50 組拼接后的圖像進行識別,實驗結果證明,缺陷檢測率高達92.83%,滿足實際使用要求[10]。部分檢測圖如圖9 所示。

圖9 缺陷識別結果
2.2.2 測量實驗
通過像素尺寸與實際尺寸的轉換關系,得到缺陷的測量長度。將測量長度減去真實長度的絕對值除以真實值,得到測量的相對誤差[11]。進行50 組實驗后,部分測量結果如表2 所示。平均相對誤差達到0.63%,滿足使用要求。

表2 拼接圖像測量結果
本文針對工業內窺鏡在缺陷檢測時無法一次性完成對較大、較長的缺陷的識別和測量問題,提出一種基于改進SIFT 算法的缺陷測量方法。在建立尺度空間的過程中,使用灰度閾值的方法,縮小了檢測范圍,解決了SIFT 算法在使用過程中計算量過大的問題。使用YOLOv3 算法完成對缺陷區域的識別,并通過像素尺寸與實際尺寸的關系,實現對拼接后圖像真實長度的測量。
論文使用SIFT 圖像拼接算法,解決了工業內窺鏡在缺陷檢測時,因使用空間狹窄、鏡頭檢測范圍有限,而無法一次性識別、測量大尺寸缺陷的問題;在建立尺度空間的過程中,使用灰度閾值的方法,縮小了檢測范圍,解決了SIFT 算法在使用過程中計算量過大的問題;使用YOLOv3 深度學習算法代替傳統的檢測算法,完成對缺陷區域的識別。
借助工業內窺攝像頭,開展了缺陷拼接、識別和測量實驗。實驗結果表明,利用改進的SIFT算法對缺陷圖像的拼接識別準確率可達92.83%;角點檢測速度提高了44.3%;拼接后的圖像測量相對誤差可達0.63%,能夠滿足使用需求。