測量是機器視覺應用場景之一,今天我來介紹一下在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
後期不定期更新各種知識,歡迎過來關注我