易煥銀
(廣東交通職業技術學院,廣東 廣州 510650)
作為一種常見的連接緊固零件,螺釘由于具有結構簡單、價格低廉、連接可靠等特點,在工程、工業、電子等領域有著不可取代的地位[1]。不合格的螺紋可能導致產品、機構甚至整個系統失效,因此需要對螺紋的參數進行嚴格管控[2]。螺紋數目是重點監控的參數之一,手工計數工作量大、效率低且難以保障測量結果的可靠性和一致性。關于螺紋的視覺檢測,張昊[3]提出了一種基于角點檢測和支持向量機的外螺紋參數檢測方法;吳智峰等[4]使用高倍遠心鏡頭測量礦山鉆孔所用的鉆桿接頭外螺紋;周策策等[5]采用旋轉工件和相機跟拍來測量螺紋參量;田野等[6]提出了一種基于機器視覺的內螺紋檢測方法;包能勝等[7]提出了一種對連續運動螺紋的尺寸進行檢測的機器視覺方法;李晉惠等[8]設計了一種基于雙遠心光學系統的外螺紋參數視覺測量系統。劉文龍[9]設計了一種能夠自動進行螺紋計數的設備,但該設備基于物理接觸式測量螺紋數,相對于視覺測量方法效率較低,且該設備結構較為復雜,包括機臺、由伺服電機驅動的線性滑臺、軟軸固定座、計數頭和控制裝置等,一定程度上限制了該設備的應用范圍。
針對人工檢測的不足、目前公開的自動螺紋計數設備存在型號適應性較弱且需對工件的位置進行控制等問題,本文以對螺釘兩側部分螺紋近似直線的檢測為出發點,以根據螺紋邊沿點到中軸線距離的變化趨勢來定位螺紋波峰點和波谷點為突破口,提出了一種快速對螺釘螺紋進行計數的機器視覺方法?;谠摲椒▽崿F的螺紋計數系統運行時只需拍攝一張圖片即可在50 ms左右完成螺紋計數,且系統自動適應螺釘型號、擺放角度和位置的變化。
系統包括上位機、工業相機、鏡頭和LED背光光源。上位機與工業相機連接,LED背光光源的亮度可調,用于建立光照環境;工業相機和鏡頭用于獲取工件圖像;上位機用于控制工業相機進行圖像采集和算法的運行與結果顯示。選型方面,系統采用500萬像素國產CMOS面陣黑白相機和國產LED背光源,鏡頭采用日本某公司生產的25 mm工業鏡頭。圖1a為系統采集到的螺釘原圖。
(a)采集到的螺釘原圖
圖像預處理用于提取螺釘的邊沿并去除背景噪聲。首先,對原圖進行反向二值化,得到二值圖像,由式(1)得到。
(1)
式中T為經實驗得到的最優閾值,實驗中T取245。對圖像gb(x,y)以半徑2像素圓盤形結構元素為參數進行形態學開運算以去除孤立的小毛刺,得到結果圖記為g0(x,y)。再以半徑1像素圓盤形結構元素為參數進行形態學腐蝕運算,得到結果圖記為ge(x,y)。再與腐蝕前圖像相減,如式(2)所示,得1像素寬度的螺紋邊沿圖像記為gt(x,y)。最后對gt(x,y)進行連通域分析后保留面積最大的連通域,得到去除噪聲后的邊沿圖像,記為g(x,y),結果如圖1b所示。此部分獲取較細的螺紋邊沿是為了提高后續邊沿遍歷的速度和保證所獲取螺紋波峰點和波谷點的準確性。
gt(x,y)=go(x,y)-ge(x,y)
(2)
最初的方案為一次性檢測左右兩側的螺紋邊沿直線段。但在批量測試過程中發現,該方案在一些測試用例中只能檢測到一條直線。經分析,其原因是當左右兩側直線段得分相差較大時,hough直線檢測函數會過濾掉其中一條直線。本方法采用了兩次hough直線檢測的方案,把首先檢測到的那條直線段周圍區域的邊沿點屏蔽,再檢查另一邊的直線段。
1)檢測螺紋一側的邊沿直線,結果如圖2a所示。對圖1b中的,首先采用概率霍夫變換[10]進行直線檢測,然后合并距離相近且夾角較小的線段并保留最長的線段L1,該線段的兩個端點記為P1、P2。
(a)hough直線檢測得到的一側邊沿直線L1
2)屏蔽L1周圍區域的邊沿點,結果如圖2b所示。屏蔽方法:以P1、P2為起止點繪制一定像素寬度(實驗中取20)的背景色直線,結果如圖2b所示。
3)首先,用步驟1)相同的方法對圖2b進行直線檢測,得到另一側的直線段L2,并將L2與L1的兩個端點調整為同一方向。然后,求取兩線段的中線,得到螺紋中線L3,結果如圖2c所示。
1)以P1為起始點按連通域關系依次遍歷螺紋的所有邊沿點(利用隊列結構),并保存邊沿點的坐標和到中軸線的距離信息。根據邊沿點到中軸線L3距離公式中加絕對值運算前的計算結果的正負,將直線左右兩邊的邊沿點分開,并將點坐標和距離絕對值信息按順序分別保存到結構體數組points_pos和points_neg中。式(3)為L3的直線方程,邊界點到中軸線L3的距離由式(4)表示,其中(x0,y0)為邊界點的坐標。
Ax+By+C=0
(3)
(4)
因為本算法只用到相對距離,所有邊界點到中軸線的距離公式的分母都為同一值,所以計算時舍棄除以分母的操作以提高速度。將Ax0+By0+C>0的邊界點的坐標及到L3的距離保存到points_pos結構體數組中,將Ax0+By0+C>0的邊界點的坐標及到L3的距離保存到points_neg結構體數組中。
2)將points_pos和points_neg結構體數組中保存的距離進行均值濾波處理以降低噪聲邊沿點的干擾,以當前點前后K個點的值為參數(實驗中K取5),均值濾波由式(5)表示。
(5)
3)分別以points_pos和points_neg結構體數組為對象搜索螺紋波峰點和波谷點,方法是判斷絕對上升個數和絕對下降個數的數量是否均達到預設閾值。
以結構體數組points_pos中的波峰點檢測為例,從points_pos中的第2個邊沿點開始到最后一個邊沿點為止,以當前點到中軸線距離與前一個點到中軸線距離相比較來判斷變化的趨勢,共有三種情況:上升、下降或維持不變。若待檢測點左側絕對上升的邊沿點計數數目up_N達到N個(螺紋波動幅度越大閾值N越大),且右側絕對下降的邊沿點計數數目down_N也達到N個,則判定該點為波峰點。
下面以圖3中的三種情況為例詳細說明搜索波峰點的具體操作方法,波谷點的判斷方法與波峰點類似。
圖3 搜索波峰點的三種情況
圖3a為最常見的情況,即先連續上升再連續下降的邊沿點數目都大于閾值N。達到局部頂點A點時up_N大于N,然后到達B點時down_N達到N,即可判斷A點為波峰點,并將A點加入到峰值點集合中。
圖3b為遍歷過程中有局部變化出現反復相反趨勢的情況。由于遍歷到局部頂點A時的up_N大于N,故將A點標記為候選峰值點。但達到局部低谷點B時down_N未達到閾值N,候選峰值點A未能判為波峰點。而到局部頂點C點后趨勢變為下降,此時up_N大于A點時的up_N,因此C點代替A點成為新的候選峰值點。C點到D點之間為下降趨勢,其間down_N從C點開始每遍歷一個點down_N自增1,up_N自減1(若減到0則不再變化)。由于達到D點時down_N未達到閾值N,因此候選峰值點C點此時未能判為峰值點。此后D點到E點之間趨勢變為上升,其間每遍歷一個點up_N自增1,down_N自減1(若減到0則不再變化)。直到E點后一個點的趨勢變為下降,因為此時up_N小于C點時的up_N,所以E點未能代替C點成為新的候選峰值點。E點到F點之間為下降趨勢,其間每遍歷一個點down_N自增1,up_N自減1。當遍歷至F點時down_N達到閾值N,因此將候選峰值點C點判為峰值點,并將C點加入到峰值點集合中。
圖3c為達到峰值A點后趨勢為維持不變的情況,此時需同時記錄達到峰值后趨勢維持不變的最后一個點B點(根據遍歷到B點的后一個點時趨勢變為下降來判斷),當遍歷到C點時down_N已經達到閾值N,此時將候選峰值點A點和B點的中間位置X點判為峰值點,并將X點加入到峰值點集合中。
4)刪除偽波峰點和偽波谷點。圖4中的空心圓點和實心圓點分別為搜索到的波峰點和波谷點。由圖中可見,所得到的波峰點和波谷點中存在少部分誤判點。圖中將誤判點標注為3類,其特點分別為:1類和2類偽點并非在L1、L2兩條邊界線附近,1類偽點距離中軸線過近,2類偽點距離中軸線過遠;3類偽點在邊界線L1、L2附近,但其兩側的波動幅度較小,不構成螺紋的波峰和波谷,而且該類偽波峰點和偽波谷點經常以相鄰成對的形式出現。①清除1類和2類偽波峰點和偽波谷點的方法:分別計算波峰點、波谷點到中軸線L3的平均距離,刪除與平均距離偏差過大的波峰點和波谷點。②清除3類偽波峰點和偽波谷點的方法:計算波峰點、波谷點到中軸線L3的平均距離,其差值記為GAP,若相鄰波峰點和波谷點的差值<β×GAP(實驗中β取0.2),則刪除這一對鄰波峰點和波谷點。
圖4 搜索得到的波峰點和波谷點
首先,按式(6)計算螺紋數c,其中a、b分別為波峰點和波谷點的數量。
(6)
然后,根據中軸線L3與螺紋邊沿的兩個交點確定螺釘的長度,并根據螺釘長度和螺紋數c確定螺釘的型號。最后,獲取該型號的螺紋數的預設閾值,并根據測量值是否在閾值范圍內判斷該螺釘是否通過檢測。檢測結果如圖5所示,圖中小圓點為波峰點和波谷點。
圖5 檢測結果的圖像顯示
以M6×50、M6×40、M5×40、M4×30、M3×30共5個型號的螺釘為實驗對象(前一組數據表示螺紋外徑,后一組數據表示螺紋長度),分別進行100次測試,共得到500組實驗數據,統計信息如表1所示。算法運行速度方面,在測試筆記本電腦上(型號:華碩FX86F,CPU主頻:2.2GHz,RAM:8G)運行,用OpenCV實現的該算法對2448*2048的采集圖像(500萬像素)的平均運行速度為50.31 ms。
表1 測試螺紋信息
實驗結果顯示,算法的螺紋計數誤差為±1個螺紋,測量均值與真實值最大相差0.23個螺紋(型號為M5×40),最大方差為0.448(型號為M4×30),說明本方法對螺紋數目的測量準確度較高。引起誤差的主要原因是,本方法基于二維視覺,兩端的螺紋在不同旋轉視角下的成像起伏變化較大,從而引起波峰點和波谷點數目的波動,導致螺紋計數出現1個左右的差異。
針對目前的螺紋計數方法和設備檢測效率低、適應性較弱等不足,提出了一種基于機器視覺的快速螺紋計數方法,包括如下步驟:①通過兩次hough直線檢測得到螺紋兩側的邊沿直線進而獲得螺釘中軸線;②根據邊沿點的連通關系遍歷螺紋邊沿點及由各邊沿點到中軸線的距離的變化趨勢得到螺紋的波峰點和波谷點;③計算得到螺紋數。通過算例實驗驗證,該方法運行速度較快(50 ms左右)、精度較高(±1個螺紋波動),自動適應工件擺放位置、角度和型號的變化,降低了人工檢測的工作強度并提高了檢測的效率。