一般我们进行一维尺寸测量有两个关键步骤:
一 设置测量区域
首先需要设定测量区域的大小,一般是通过gen_measure_rectangle2 来查找平面区域的边缘距离,通过gen_measure_arc来设定圆弧区域的边缘距离;
注意生成图像的角度,会影响你找边缘的方向 及找边缘的结果;
二 执行测量任务
在一维测量中有两个测量关键算子measure_pos和measure_pairs
Halcon 的F1文档中关于measure_pos有如下说明:
measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)
这个算子会找寻你设定检测区域内的边缘
算子中的参数Threshold和Amplitude 都涉及到边缘的幅度值;
以前 我理解边缘幅度值边缘处渐变的灰度差值,但现在看来这个理解是不准确的,应该是边缘灰度值变化的趋势,因为由黑到白(小变大)和由白到黑(大变小) 在图形中反映出幅度为负和正;因此可以理解这个幅度值是有正负的;
话回参数:
Threshold 设置的是你选取的幅度阈值下限;
Amplitude 获取的是你提取到的边缘处的幅度大小;
Transition=‘positive’ 代表找寻所有正边缘 :所谓正边缘即为在查找方向上从黑到白过渡变化的边缘;
Transition=‘negative’ 代表找寻所有负边缘 :所谓负边缘即为在查找方向上从白到黑过渡变化的边缘;
Transition=‘all’ 代表找寻所有边缘 ;
measure_pairs属于加强版的measure_pos
halcon 的F1文档中关于measure_pairs有如下说明:
measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
首先需要明确几点:
1、这个算子找出的都是边缘对(两个边形成一对边缘),边缘给出的是边缘对打间距值;
2、边缘查找的方向性;
边缘查找的方向影响边缘查找的效果,从一个方向看是从白到黑,从反方向看就是从黑到白;正确的查询方向为MeasureHandle矩形的绘制角度方向是正方向还是反方向;
在halcon自带例子 测量灯丝的宽度的例子fuse.hdev中
当测量矩形的以rad(90)角度生成时,RowEdgeFirst 坐标为两条钨丝的下边缘坐标,说明查找方式是从矩形下边缘到上边缘;
当测量矩形的以rad(-90)角度生成时,RowEdgeFirst 坐标为两条钨丝的上边缘坐标,说明查找方式是从矩形下边缘到上边缘;
3、算子参数Transition 控制着哪种类型的边缘来组成边缘对;
根据F1文档的解释:
Transition=‘positive’ 沿测量矩形中轴线方向(查询方向为MeasureHandle矩形的绘制角度方向),第一个边缘点是 黑-白的点,第二个点是白-黑的点 具有这样特征的边缘将会组成边缘对;
Transition=‘negitive’ 沿测量矩形中轴线方向,第一个边缘点是 白-黑的点,第二个点是黑-白的点 具有这样特征的边缘将会组成边缘对;
Transition=‘all’ 沿测量矩形中轴线方向,所有具有白黑白 ,或者黑白黑过渡特征的边缘对都会被找出;
4、算子参数 IntraDistance ;
边缘对内边缘之间的距离。
5、算子参数 InterDistance ;
连续边缘对之间的距离。
文章内容为自己理解和相关文档学习而得,不足之处欢迎批评指正!!