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
上述内容需要一定的技术功底,本章至此已结束,欢迎阅读下章,谢谢!