張亦寧
(河南大學國際教育學院 河南省開封市 475001)
在工業生產中,使用工業相機對位系統[1-2]首先把矩形樣品移動到固定位置,然后再實施切割[3]得到理想的標準的矩形產品。這個過程中需要檢測出圖像中樣品矩形的4 條邊對應的直線并精確計算出4 條直線對應的直線公式[4-5],根據該直線公式便能進一步計算出旋轉角度和平移量,最后調動機械設備進行旋轉和平移到達目標位置實施切割。
這個直線檢測、計算和旋轉的過程中對時間要求非??量蹋渲兄本€檢測環節最耗時。利用Hough 變換對直線進行檢測,檢測結果通常不夠精確,速度慢,效率低,并且無法使用直線公式精確表述檢測到的直線,因此不能滿足實際生產的需要。
針對此問題,本文提出了一種快速直線檢測并精確計算直線公式的方法。該方法首先確定檢測方向,其次確定直線邊緣的灰度值,然后檢測出直線上的像素點,最后采用最小二乘法擬合出該直線并得到需要的直線參數。實驗證明該方法是快速地、精確地、有效地,能滿足生產的實時性要求,具有很強的應用價值。
首先講述一下Hough 變換直線檢測的原理[6-7],然后分析Hough 變換在精確直線檢測中存在的問題。
Hough 變換思想[6]為:將圖像域(x-y 系)中過某個點(x,y)的一條直線映射到變換域(ρ-θ 系)中的一個點(ρ,θ),將過(x,y)的所有直線映射到變換域(ρ-θ 系)中的一條正弦曲線;反之,變換域中的一個點對應了圖像域中的一條直線。圖像域中一條直線上的所有點,它們的斜率和截距是相同的,所以它們在變換域中對應于同一個點。這樣將圖像域中各點映射到變換域中之后,在變換域中會出現正弦曲線交點的聚集區域,這些聚集點就對應了圖像域中各直線上的點。聚集區域的點數越多,表明對應的圖像域中的直線越長。對于圖像域中的一條直線,ρ 表示原點到直線的距離,θ 表示該法線與x 軸的夾角。Hough 變換的極坐標方程可用式(1)來表示:

圖1:設計方法流程圖

圖2:工業相機拍攝得到的矩形樣品的4 條邊的圖像

圖3:使用本文方法檢測出矩形樣品的4 條邊的精確直線的圖像

式(1)就是在極坐標系中點(x,y)的 Hough 變換。在極坐標系中,橫坐標為直線的法相角θ,縱坐標為原點到直線的距離ρ。
Hough 變換檢測出來的是圖像上所有直線邊緣上的像素點,這樣就存在如下兩個問題:
(1)Hough 變換比較耗時,時間不能滿足需求,怎樣提高算法的速度?
(2)怎樣從這些像素點上提取出確定直線的精確參數k 和b?使用Hough 變換不能很好地解這兩個問題,因此本文提出了一種快速直線檢測并使用直線公式精確表述檢測到的直線的方法,能夠較好地解決此問題,并可以滿足生產的需要。
首先講述了本文提出方法實現的步驟;然后詳細描述直線上像素點的提取方法,這是本文提出方法的核心內容;最后使用最小二乘法[8]擬合直線,得到確定精確直線所需要的參數k 和b。
設計方法步驟如下,流程圖如圖1 所示。
(1)使用工業相機拍攝圖像,得到要處理的圖像信息;
(2)設置圖像的ROI(),減小處理文件的大小,從而降低處理時間;
(3)對圖像進行降噪處理,減少圖像的噪音對算法的影響;(4)進行Canny 邊緣檢測,轉化為二值圖像,便于檢測出直線上的像素點;
(5)指定要檢測的矩形的邊(上下左右),根據指定的閾值來檢測出該邊上的像素點;
(6)把(5)中檢測到的直線上的像素點從ROI 坐標恢復到全圖坐標;
(7)根據直線的全圖坐標點,使用最小二乘法擬合直線,得到圖像上該直線的精確直線參數k(斜率)和b(截距)。
工業上,在實際的操作過程中,需要使用4 個工業相機對矩形樣品的4 條邊進行拍攝,得到4 幅矩形樣品的邊緣圖像,如圖2 所示,左上角的圖片對應矩形樣品的上邊,右上角對應矩形樣品的右邊,左下角對應矩形樣品的下邊,右下角對應矩形樣品的左邊。
對圖像的質量進行分析可以看出圖像具有如下特征:圖像中有一條明顯的較粗的直線,并且該直線在樣品的外側部分比較干凈,像素相對比較純凈;而在樣品內部的部分由于樣品比較臟,有較多的雜點。根據這個特征可以設計出直線上邊緣像素點的精確提取方法,在提取直線上邊緣像素點之前,需要確定如下參數:
(1)確定圖像的掃描方向(Direction):矩形樣品的上邊緣圖像從上往下掃描,右邊緣圖像從右往左掃描,下邊緣圖像從下往上掃描,左邊緣圖像從左往右掃描;
(2)確定圖像中粗直線的近似像素值(Min_GrayValue):對整個灰度圖像進行掃描,找到像素值最小的點,把該點的像素值作為粗直線的近似像素值,該操作在系統初始化時完成,然后把改參數記入系統參數表保存以備后用;
(3)設置采樣頻率(Sampling_Frequency):該參數的意思是掃描直線時可以不對直線上的所有點掃描,而是每隔Sampling_Frequency 個點掃描一個像素點。該參數的設置會影響提取到的像素點數量和算法的速度,在系統初始化時需要做折中處理,既要保證提取的像素點能夠描述精確的直線,也要保證算法的速度滿足需求。
在確定了掃描方向、直線上像素點的近似像素值和采樣頻率之后,就可以對圖像進行掃描得到直線邊緣的精確像素點了,具體掃描算法描述如下(4 個方向掃描算法類似,在此以矩形樣品的上邊為例進行描述,即從上往下描述):
(1)設置列循環變量col=0,即從第1 列開始掃描;
(2)從上往下掃描第col 列的像素,只到遇到一個像素點(x,y)的值小于等于Min_GrayValue,停止本列的掃描,并把該像素點(x,y)保存到直線像素點列表Node_List 中;
(3)修改列循環變量col=col+Sampling_Frequency;如果col大于圖像的最大列數則轉到(4)結束本算法,否則轉到(2)繼續掃描下一列;
(4)結束直線上像素點的提取算法。
最小二乘法的數學原理[2]為:給定一組數據(xi,yi)(i=1,2,…,n)。
設其經驗方程為F(x),方程中含有一些待定系數an。將(xi,yi)代入方程求差yi-F(xi),為了考慮整體的誤差,可以取平方和,之所以要平方是考慮到誤差正負直接相加可以相互抵消,所以記誤差為:e=∑(yi-F(xi))^2。
通過求e 的極小值可以求出an,從而求出該組數據的最佳擬合函數,該函數使得誤差平方和最小。
根據2.2 得到的Node_List,使用最小二乘法能夠對Node_List中的像素點擬合出一條精確的直線。
使用本文方法得到的精確直線檢測效果圖如圖3 所示,使用Hough 變換檢測出矩形樣品4 邊上的像素點后再使用最小二乘法對其進行直線擬合,得到的效果圖如圖4 所示。從效果圖上可以直接看出,圖3 是理想的實驗結果,圖4 由于使用Hough 變換得到所有的黑色邊框的像素點,因此擬合的直線基本位于黑色邊框的正中間,根據生產實際需求此結果不符合要求,因為對矩形樣品切割是沿著邊框的邊沿,不是正中間位置。
在Window10 專業版64 位操作系統、Intel i7-9750H CPU、8G DDR42400MHZ 內存、NVIDIA GeForce GTX1650 顯卡的軟硬件環境下對兩種檢測方法的效率進行了10 次測試,對本文的方法中采樣頻率取值為10 進行測試,本文所用方法的平均時間是45.7ms,Hough 變換方法的平均時間是262.5ms。測試結果如表1 所示。從表1 中可以清晰的看出本文方法效率要比Hough 變換方法快的多,如果降低采樣頻率、減小ROI 的范圍等措施犧牲一點精度效率會更高。
本文的方法可以精確地檢測出矩形樣品的邊沿,并給出直線的精確描述公式,運行效率也很高,很好的滿足了當前工業生成中的應用。但是也存在一個問題需要繼續努力進行研究,那就是矩形樣本邊沿直線的像素閾值問題,在本文中該閾值是根據具體生產條件進行的人工設置,將來的研究方向是該閾值如何進行智能檢測并設置。

表1: 直線檢測時間對比

圖4:使用Hough 變換方法檢測出矩形樣品的4 條邊的精確直線的圖像