劉凌霄,王德成,程 鵬,郎 寧
(機械科學研究總院 中機生產力促進中心有限公司,北京 100044)
在各種零部件中,有著各種大小,特征的孔、槽,比如通孔,盲孔,沉頭孔,鍵槽、異形槽等等,具有樣式多、尺寸各異等特點。在生產中,為了提高產品的質量,通常對其有著較高的尺寸精度要求。隨著相機、鏡頭和計算機圖像處理技術的快速發展,機器視覺這種非接觸式的測量方法逐漸取代了傳統接觸式機械測量,有著更高精度、更快處理、節省人力的特點。
在實際檢測過程中,光學系統對光源的要求比較高,不同大小、形狀的特征需要不同的光照強度,同時日光燈光等環境光也會對檢測結果有所影響[1]。目前已有相關學者對此問題進行了設計研究,并取得了一定的研究成果。采用不同像素當量的方法,根據實驗得到的數據,不同光照強度下每一個像素代表不同的實際尺寸值[2,3]。但此種方法需要提前知道光源的光照強度,無法適應環境光,且特征的基礎尺寸需要和計算模型用的量塊尺寸相當,有較大的局限性。
針對傳統方法存在的弊端,提出一種基于機器視覺的光照強度修正方法,并通過實驗驗證分析本文方法在零部件特征的尺寸檢測方面的優越性。
本文算法流程如圖1所示,主要分為5個部分:圖像采集、圖像預處理、亞像素邊緣檢測、光強修正、計算最終尺寸。

圖1 處理流程
需要注意的是,光強修正中所使用的訓練模型在實際檢測過程中是提前取得的,而在本次實驗的樣本中,一部分作為訓練模型使用,一部分作為檢測算法正確性使用,兩部分相互獨立,避免用訓練樣本進行驗證實驗。
在進行光照強度的尺寸修正之前要首先獲得特征的基礎尺寸。對采集好的圖片進行ROI區域的剪裁、圖像預處理、亞像素邊緣檢測。
為了減少圖像采集過程中非待檢測特征的影響,需要首先對采集到的圖像進行灰度化和二值化處理。圖像灰度化就是將相機采集到的圖像轉換為灰度圖像,即剔除彩色信息,保留圖像的亮度信息。本文采用一種包含圖像亮度信息最多的權值平均灰度算法,如式(1)所示:

式(1)中,f(x,y)表示圖像灰度化后在像素(x,y)的灰度值,R、G、B表示彩色圖像的三個分通道(x,y)的像素值。
對圖像進行灰度化之后,要對灰度化的圖像進行二值化進一步簡化計算的復雜程度。在全局閾值二值化算法中,常見的算法有:迭代法、OTSU、直方圖雙峰法等,還有Niblack、bernsen等局部二值化的算法??紤]到本文圖像只針對單一目標特征分割,但由于光照強度變化范圍大,易造成整張圖片整體過于明亮或昏暗,全局閾值的二值化方法相比來說無法勝任,故采取bernsen局部二值化算法進行圖像閾值分割。該算法原理為提前設置兩個閾值,當所選區域內灰度最大值和最小值的平均值大于閾值1時,認為其同時包含背景、目標兩部分,區域選擇上述平局值作為區域閾值;當此平均值小于閾值1時,認為區域只包含背景或目標其中之一,通過提前設置的閾值2進行判斷分割。Bernsen算法計算簡單快速,不受圖像整體亮度和對比度的影響。
連通區域一般是指圖像中具有相同像素值且位置相鄰的前景像素點組成的圖像區域,一般分為四連通和八聯通。而最大連通域則指的是尋找一張圖像內屬于該像素值的像素點最多的連通域。
由于噪音和待測特征上可能存在的污跡、劃痕等干擾,二值化后的圖像可能存在一些非待檢測目標的內容,對于我們下一步的邊緣檢測產生干擾。我們對特征和背景分別做一次最大連通域處理,即可去除目標外的雜質和目標內的噪音,提高視覺檢測的精度和準確性。
為了獲得待檢測目標的尺寸,首先要對預處理后的圖片進行邊緣檢測,經典像素級邊緣檢測算子有sobel算子、prewitt算子、Laplacian算子、LoG算子及Canny邊緣檢測算子等。Canny邊緣檢測算子是最為常用的像素級邊緣檢測算法,其原理可以分為以下5個步驟:1)應用高斯濾波來平滑圖像,目的是去除噪聲;2)找尋圖像的強度梯度;3)應用非最大抑制技術來消除邊誤檢;4)應用雙閾值的方法來決定可能的邊界;5)利用滯后技術來跟蹤邊界。本文通過Canny算法初步確定目標特征的像素級邊緣信息。
圖像處理過程中,提高檢測方法的精度一般有兩種方式。一種是提高圖像系統的光學放大倍數和CCD相機的分辨率能力;另一種是引入亞像素細分技術來彌補硬件的不足以提高圖像系統的分辨率,可以節省系統的硬件投入成本[4]。
亞像素方法一般分為矩方法、插值法和擬合法。矩方法的優點是計算簡便,并且可以得到解析解;插值法的運算時間最短;擬合方法對噪聲不敏感適合精準測量[5]。本文選擇擬合法,沿邊緣法線的方向,以某邊緣點為中心,取一列邊緣區域向量的灰度值,如圖2藍色實線所示。可以發現反正切函數圖像與邊緣區域灰度分布非常相似[6]。因此,擬合反正切函數如式(2)所示:


圖2 邊緣法線灰度值
用式(2)描述物體邊緣實際的灰度分布情況,確定模型中的參數(a1,a2,a3,a4),即可得到如圖2虛線所示的擬合函數。亞像素邊緣位于灰度值變化率最大的位置,對擬合的反正切函數求一階和二階導數得到式(3):

從式(3)可知,灰度值變化率最大位置和拐點位置重合,位于反正切函數位置,此位置即是該像素級邊緣點亞像素邊緣位置。
通過圖3可知,圖像邊緣區域內外幾個像素的灰度直方圖皆呈現廣義高斯分布:

圖3 邊緣內外像素點灰度直方圖

式(4)中,參數α控制著分布的“形狀”,即衰減率;σ控制著方差。
由圖4可知,在光照強度變化時,邊緣的灰度直方圖擬合的廣義高斯函數的特征參數變化有一定規律:光照強度越大,廣義高斯函數的平均值越大,方差越小,衰減率越大。

圖4 不同光照強度邊緣處灰度直方圖
SVR(支持向量回歸)是SVM(支持向量機)中的一個重要的應用分支。SVR回歸與SVM分類的區別在于,SVR的樣本點最終只有一類,它所尋求的最優超平面不是SVM那樣使兩類或多類樣本點分的“最開”,而是使所有的樣本點離著超平面的總偏差最小[7]。


圖5 SVR示意圖
將各種尺寸、有一定數量的已知真實尺寸(由三坐標測量儀觸針檢測得到的值視為真實值)的特征在不同光照強度下進行拍照作為訓練樣本,以亞像素算法檢測的結果和實際值的差作為SVR的標簽,以視覺檢測的結果和邊緣灰度直方圖得到的廣義高斯分布的平均值、方差、衰減率作為訓練用向量進行數據歸一化,選擇合適的支持向量回歸參數進行訓練,得到訓練模型。
在獲得了訓練模型后,之后的檢測過程中需要導入已有的支持向量訓練模型,并通過SVR預測函數,將圖像處理得到的基礎尺寸和直方圖廣義高斯分布的特征參數作為特征向量,就可以預測得到由光照強度帶來的尺寸偏差值,通過基礎尺寸和偏差值相加得到光強修正后的精確尺寸。
實驗測試圖像通過VIEWORKS VP-101MC-M8H00工業相機、Schneider Xenon-Zirconia 3.2/92鏡頭拍攝獲取,原始圖像大小均為11648×8742,光源采用OPT 90°藍色LED環形光。實驗計算機為i7-9700 CPU,16g內存及Windows10、Matlab2018b、Visual Studio 2019軟件環境。實驗還使用三坐標測量儀通過觸針測量待測特征的尺寸值當作訓練模型和驗證誤差的真實值,實驗環境如圖6所示。

圖6 實驗環境
通過標準量塊、標準環規反復標定得到,本文實驗所用設備采集到的圖像,每一個像素長度為0.0018mm。
圖7為實驗用測試樣件,包含了多種類型和尺寸大小的特征,本文選擇其中的圓孔及鍵槽進行算法驗證。

圖7 測試樣件
4.2.1 檢測內容
為了驗證本文光強修正算法的正確性,選用測試樣件中的圓孔和鍵槽,包含通槽、盲槽、沉頭孔等各種類型的特征作為訓練樣本和測試數據,訓練樣本和測試數據彼此獨立。
對于圓孔選擇對亞像素邊緣的點坐標進行概率霍夫圓擬合,得到圓孔的半徑尺寸。對于鍵槽選擇先用概率霍夫直線檢測到直線部分并刪除直線的坐標點,對于剩余部分分別進行概率霍夫圓擬合,得到鍵槽兩側半圓部分的信息,槽長即為兩圓心距離加上兩圓半徑,槽寬為兩圓半徑的平均值。
擬合結果如圖8、圖9所示。

圖8 圓孔擬合結果

圖9 鍵槽擬合結果
4.2.2 檢測結果
實驗選擇每隔2個光照強度為步長,從勉強看清邊緣到邊緣過曝為止,拍攝了50個圓孔和20個鍵槽,每個特征拍攝10張左右不同光照強度的照片。隨機抽取20%作為測試集,其余80%為訓練集。
表1為對測試樣件測試樣本的檢測結果,可以看到,經過光強修正后測量值與實際值之間誤差基本在10μm以內,相對誤差更小,更接近真實尺寸。

表1 檢測結果
為了減小光照強度對視覺檢測的影響,提高視覺檢測精準度,本文提出了一種基于機器視覺的光照強度修正算法。首先采集大量不同大小不同光照強度已知實際尺寸的特征圖片,對圖片二值化并進行亞像素邊緣檢測,得到特征的基礎尺寸,然后對原圖的邊緣區域灰度直方圖進行廣義高斯擬合,獲得其均值、方差及衰減率作為特征向量,以基礎尺寸與實際尺寸的偏差值作為標簽進行支持向量回歸的訓練。通過訓練的模型對待檢測的特征即可獲得光強帶來的偏差從而進行修正,更加貼近真實值。
與傳統方法相比,結果顯示本文方法的檢測誤差減小了約50%,有效提高了檢測的正確性和精度,能夠更好的保證檢測零部件的質量,且穩定性較好。本文的方法僅適用于有一定量訓練樣本的情況,有一定的局限性。下一步的研究工作將進一步提高訓練樣本較少時的魯棒性和準確性,以便在更嚴格的檢測中應用。