一、直線和圓擬合概述
直線和圓的擬合,是視覺項目中非常常見的需求,但是對新手來說,在Halcon中實現卻比較困難。
其基本思路都是:
① 分割出邊緣,得到XLD(gen_contours_skeleton_xld、edges_sub_pix等)
② 將XLD進行分割、篩選(segment_contours_xld、select_contours_xld)
③ 將XLD進行擬合(fit_line_contour_xld、fit_circle_contour_xld等)
直線的擬合參考:https://www.cnblogs.com/xh6300/p/9782132.html
雖然思路比較固定,但是算子組合、調參還是需要相當的技巧,並且很多時候效果都不盡如人意。
如果有用過康耐視的VisionPro的話,你會發現里面的抓圓、抓邊操作非常簡單。只需要用卡尺去擬合,然后簡單設置參數即可。
二、Halcon測量助手
實際上,Halcon是非常強大的,只是有時候沒有那么方便而已。但是已經有大神封裝了抓圓和抓邊的工具函數。其基本原理主要參考Halcon自帶的“測量助手”:
它涉及的主要算子如下,大家有時間可以自己研究一下:
gen_measure_rectangle2、gen_measure_arc(gen_measure_arc.hdev)
measure_pos :得到測量區域內邊緣處的交點坐標,以及交點之間的直線距離或弧線距離。
measure_pairs:與measure_pos類似
三、卡尺工具(rake、spoke)
rake和spoke工具函數就是大神封裝的抓邊和抓圓工具。下載鏈接:
https://files-cdn.cnblogs.com/files/xh6300/find_line_find_circle.zip
解壓以后將文件夾放在下面的路徑下即可(根據Halcon安裝路徑不同而有所不同):
C:\Program Files\MVTec\HALCON-12.0\procedures
該卡尺工具執行過程為:
① 確定邊緣檢測方向
② 高斯濾波
③ 執行投影處理
④ 執行微分處理
⑤ 設置邊緣敏感度、邊緣極性、邊緣的位置
⑥ 邊緣執行亞像素處理
四、擬合時不同算法參數的說明
1、fit_line_contour_xld
對於參數Algorithm中的一些類型解釋如下:
regression:回歸,標准的最小二乘法擬合
huber:加權的最小二乘法擬合,異常值的影響被減小基於Huber方法(越遠權值越低)
tukey:加權的最小二乘法擬合,異常值的影響被減小基於Tukey方法(異常值直接拋掉)
drop:加權的最小二乘法擬合,異常值的影響被消除
gauss:加權的最小二乘法擬合,異常值的影響被減小基於最逼近線上的所有其輪廓點的平均值和距離標准方差
參考:http://blog.sina.com.cn/s/blog_d38f8be50102wbtp.html
2、fit_circle_contour_xld
參數Algorithm的可選項解釋如下:
algebraic:這種方法減少了輪廓點與結果圓之間的代數距離
ahuber:類似於algebraic,輪廓點被加權以減小異常值的影響基於方法Huber
atukey:類似於algebraic,輪廓點被加權以減小異常值的影響基於方法Tukey
geometric:該法減少了輪廓點與結果圓之間的幾何距離,該法被統計是最優的,但占用很多計算時間。如果輪廓點被噪聲干擾嚴重,可以考慮使用該方法。
geohuber:類似於geometric,輪廓點被加權以減小異常值的影響基於方法Huber
geotukey:類似於geometric,輪廓點被加權以減小異常值的影響基於方法Tukey
參考:http://blog.sina.com.cn/s/blog_d38f8be50102wbud.html