C# 基于halcon的視覺工作流-章22-直線查找
本章目標:
一、創建直線卡尺工具;
二、測量及擬合直線;
三、匹配批量查找;
尋找整圖中所有直線,可用霍夫直線查找等算法,而尋找圖片中指定區域的直線,除了霍夫直線查找等算法外,halcon還封裝了自有的查找測量工具。查找原理是將指定區域劃分為等格區域,再對各區域求取梯度變化劇列的點,最后將各點連接擬合組成直線。
一、創建直線卡尺工具
創建卡尺工具分如下幾步:
1、創建計量模型
halcon算子create_metrology_model用于創建計量模型,輸出模型句柄,為后續創建各具體測量對象作準備。
與C#聯合開發時可用如下方法實現
HOperatorSet.CreateMetrologyModel(out HTuple auto_MetrologyHandle);
其中,auto_MetrologyHandle為輸出模型句柄
2、創建直線測量對象
halcon算子add_metrology_object_generic用于將計量對象添加到計量模型中,計量對象有多種,直線、圓、矩形和橢圓等,本文中屬直線。
與C#聯合開發時可用如下方法實現
HOperatorSet.AddMetrologyObjectGeneric(auto_MetrologyHandle,shape,shapeParam, measureLength1,measureLength2,measureSigma,measureThreshold, genParamName ,genParamValue, out HTuple index );
其中,auto_MetrologyHandle為輸入模型句柄,
shape為計量對象的類型,此處為直線line,(圓circle, 橢圓ellipse, 矩形rectangle2)
lineParams為計量對象的參數,
measureLength1為卡尺半長,
measureLength2為卡尺半寬,
measureSigma為高斯函數的西格瑪平滑,
measureThreshold為最小邊緣振幅,
genParamName 為參數名,
genParamValue為參數值,
index 為輸出的計量對象的索引
3、設置測量對象參數
設置參數可以在步驟2中參數名、參數值中進行設置,也可按如下進行單獨設置。
halcon算子add_metrology_object_generic用于為計量對象設置參數
與C#聯合開發時可用如下方法實現
HOperatorSet.SetMetrologyObjectParam(auto_MetrologyHandle,index,genParamName,genParamValue,);
其中,auto_MetrologyHandle為輸入模型句柄,
index為計量對象索引,
genParamName 為參數名,
genParamValue為參數值
參考如下圖
二、測量及擬合直線
測量及擬合分如下幾步:
1、測量擬合
halcon算子apply_metrology_model用于測量并擬合計量模型中所有計量對象的幾何形狀。
與C#聯合開發時可用如下方法實現
HOperatorSet.ApplyMetrologyModel(Image, auto_MetrologyHandle);
其中,Image為輸入圖像,
auto_MetrologyHandle為輸入模型句柄
2、獲取邊緣點坐標
halcon算子get_metrology_object_measures用于獲取計量模型的計量對象的測量區域和邊緣位置結果,即取得找到的邊緣點的坐標。
與C#聯合開發時可用如下方法實現
HOperatorSet.GetMetrologyObjectMeasures(out HObject calipersCoutours, auto_MetrologyHandle, index , transition, out HTuple hv_Row, out HTuple hv_Column);
其中,calipersCoutours為輸出的卡尺輪廓,
auto_MetrologyHandle為輸入模型句柄,
index 為計量對象索引,此處為all,
transition為選擇亮/暗或暗/亮邊,此處為all,
hv_Row為找到的邊緣點的行坐標,
hv_Column為找到的邊緣點的列坐標
3、獲取擬合的直線坐標
halcon算子get_metrology_object_measures用于獲取計量模型的測量結果。
與C#聯合開發時可用如下方法實現
HOperatorSet.GetMetrologyObjectResult(auto_MetrologyHandle, index, instance, genParamName , genParamValue, out HTuple Parameter);
其中,auto_MetrologyHandle為輸入模型句柄,
index 為計量對象索引,此處為all,
instance 為計量對象的實例,此處為all,
genParamName 為參數名,此處為result_type,
genParamValue為參數值,此處為all_param,
Parameter為輸出結果參數,直線的起末點坐標
4、獲取擬合的直線輪廓
halcon算子get_metrology_object_result_contour用于查詢計量對象的結果輪廓。
與C#聯合開發時可用如下方法實現
HOperatorSet.GetMetrologyObjectResultContour(out HObject ho_ContourXld, auto_MetrologyHandle, index, instance , resolution );
其中,ho_ContourXld為輸出輪廓,
auto_MetrologyHandle為輸入模型句柄,
index 為計量對象索引,此處為all,
instance 為計量對象的實例,此處為all,
resolution 為相鄰輪廓點之間的距離,此處為默認值1.5
三、匹配批量查找
本文中結合了模板匹配,根據模板匹配查找到各目標圖像,再根據目標圖像定位到查找區域,最后找到目標直線。核心點在于將模板匹配坐標進行仿射變換,取得查找區域坐標。
效果如下圖,不論方向、角度如何,都能自動找到各零件指定區域的直邊
卡尺理論理解-參考鏈接
https://blog.csdn.net/qq_37299618/article/details/119606955
上述內容需要一定的技術功底,本章至此已結束,歡迎閱讀下章,謝謝!