機器視覺測量,halcon測量講解,卡尺找線,卡尺找圓

測量是機器視覺應用場景之一,今天我來介紹一下在halcon中測量項目的一些方法。

在halcon中本身的測量demo比較多,在實際項目使用中,最為廣泛的方法還是使用卡尺來解決測量任務,整體的思想就是先找到邊界點,然後判斷邊界點是否符合要求,最後通過擬合出線或者圓來進行測量任務。當然也可以通過邊緣查找後擬合。

理解halcon測量原理

在halcon中,來確定邊緣的方法為在一個ROI寬度上,計算每個寬度上的像素平均值,在ROI的整個長度上計算所有的均值,得到了一系列的平均灰度值,那麼在這一系列的灰度值組成了輪廓線Profile Line

投影輪廓線計算均值

如果在這個寬度上計算灰度值的時候,投影線不平行,那麼就會使用插值計算平均灰度值,nearest_neighbor 最鄰近插值,biliner雙線性插值,bicubic插值。

寬度和濾波的影響

同時,ROI的寬度越寬,計算的平均值越逼真,得到的值也是越準確,同時,同樣的ROI寬度,如果使用濾波,那麼效果也最好,測量對象中使用的濾波器是高斯濾波器。

測量矩形ROI

測量的ROI,矩形中心R,C坐標,矩形寬、高,phi

測量過程

建立測量對象

gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation :MeasureHandle)
gen_measure_arc( : : CenterRow, CenterCol, Radius, AngleStart, AngleExtent, AnnulusRadius, Width,Height, Interpolation : MeasureHandle)

Row: 矩形ROI的中心R坐標

Column:矩形ROI的中心C坐標

Length1: 矩形ROI的半長

Length2:矩形ROI的半寬

Width:圖像的寬度

Height:退昂的高度

Interolation:插值

MeasureHandle:輸出的測量句柄對象

gen_measure_arc的位圓弧與gen_measure_rectangle2類似

測量

measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge,Amplitude, Distance)
measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst,ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance,InterDistance)

Image:輸入圖像

MesureHandle:輸入句柄

Sigma:濾波參數

ThresHold:邊緣幅度

Transition:邊緣極性,由白到黑、由黑到白、兩者

Select:點的選擇,第一點、最後一點,所有

RowEdge,ColumnEdge,Amplitude,Dinstance:輸出點的信息

還有一種高級測量是fuzzy_measure的方法, 我個人在實際應用中沒有用到這種方法,不過也研究過,在後期會專門說fuzzy_meausre.

這一步為止,我們還是單獨的得到一個點,我們還不能真實的表達一條邊界呢,我們最好的方式是通過找到的一系列點進行擬合直線或者圓,以偽代碼表示

最後通過fit_circle_contour_xld和fit_line_contour_xld擬合圓和直線。

計算

distance_pp 計算兩個點的距離

distance_pl計算一個點到線的距離

mean_tuple計算平均值,這在使用distance_pl的時候回用到

卡尺找圓,找線

雖然這裡只有最簡單的2個算子,但是組合起來會有強大的效果,可以滿足98%以上的項目需求,halcon的給的測量方法有很多,我都看過,但是實際項目中我還是沒有用,對於初學的同學來說, 也沒必要都知道那麼多,否則打消你的積極性。

感覺來關注我公眾號 VisionManMaster

後期不定期更新各種知識,歡迎過來關注我