1、直線和圓擬合概述html
直線和圓的擬合,是視覺項目中很是常見的需求,可是對新手來講,在Halcon中實現卻比較困難。算法
其基本思路都是:函數
① 分割出邊緣,獲得XLD(gen_contours_skeleton_xld、edges_sub_pix等)工具
② 將XLD進行分割、篩選(segment_contours_xld、select_contours_xld)spa
③ 將XLD進行擬合(fit_line_contour_xld、fit_circle_contour_xld等)cdn
直線的擬合參考:http://www.javashuo.com/article/p-plkdkesr-eu.htmlhtm
雖然思路比較固定,可是算子組合、調參仍是須要至關的技巧,而且不少時候效果都不盡如人意。blog
若是有用過康耐視的VisionPro的話,你會發現裏面的抓圓、抓邊操做很是簡單。只須要用卡尺去擬合,而後簡單設置參數便可。ip
2、Halcon測量助手ci
實際上,Halcon是很是強大的,只是有時候沒有那麼方便而已。可是已經有大神封裝了抓圓和抓邊的工具函數。其基本原理主要參考Halcon自帶的「測量助手」:
它涉及的主要算子以下,你們有時間能夠本身研究一下:
gen_measure_rectangle二、gen_measure_arc(gen_measure_arc.hdev)
measure_pos :獲得測量區域內邊緣處的交點座標,以及交點之間的直線距離或弧線距離。
measure_pairs:與measure_pos相似
3、卡尺工具(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
該卡尺工具執行過程爲:
① 肯定邊緣檢測方向
② 高斯濾波
③ 執行投影處理
④ 執行微分處理
⑤ 設置邊緣敏感度、邊緣極性、邊緣的位置
⑥ 邊緣執行亞像素處理
4、擬合時不一樣算法參數的說明
一、fit_line_contour_xld
對於參數Algorithm中的一些類型解釋以下:
regression:迴歸,標準的最小二乘法擬合
huber:加權的最小二乘法擬合,異常值的影響被減少基於Huber方法(越遠權值越低)
tukey:加權的最小二乘法擬合,異常值的影響被減少基於Tukey方法(異常值直接拋掉)
drop:加權的最小二乘法擬合,異常值的影響被消除
gauss:加權的最小二乘法擬合,異常值的影響被減少基於最逼近線上的全部其輪廓點的平均值和距離標準方差
參考:http://blog.sina.com.cn/s/blog_d38f8be50102wbtp.html
二、fit_circle_contour_xld
參數Algorithm的可選項解釋以下:
algebraic:這種方法減小了輪廓點與結果圓之間的代數距離
ahuber:相似於algebraic,輪廓點被加權以減少異常值的影響基於方法Huber
atukey:相似於algebraic,輪廓點被加權以減少異常值的影響基於方法Tukey
geometric:該法減小了輪廓點與結果圓之間的幾何距離,該法被統計是最優的,但佔用不少計算時間。若是輪廓點被噪聲干擾嚴重,能夠考慮使用該方法。
geohuber:相似於geometric,輪廓點被加權以減少異常值的影響基於方法Huber
geotukey:相似於geometric,輪廓點被加權以減少異常值的影響基於方法Tukey