measure_pos方式的找线的参数详解

勇哥之前发表的一篇文章《Halcon学习(27-2)halcon测量技术:找线

这个文章介绍的找线方式是使用算子measure_pos来工作的,因此这种方式适合halcon及以上版本。

勇哥另外几篇贴子里介绍了适合halcon17及以上版本的找线方法:

视觉进阶:2D Metrology(二维计量)

halcon17的找线功能

听说,这些高阶的功能其实也是对halcon10原来的算子的一些封装。


因此,对于工业视觉中常见的找线功能来说,我们必须了解核心的measure_pos算子。

在找线的时候,先使用gen_measure_rectangle2设置测量的矩形句柄,然后再执行measure_pos算子,如下面的代码所示:

 gen_measure_rectangle2 (row[i], col[i], Phi, Length1, roiWidth, Width, Height, 'nearest_neighbor', MeasureHandle1)
 measure_pos (Image, MeasureHandle1, sigma, thresold, transition, select, RowEdge, ColumnEdge, Amplitude, Distance)


下面我们详细来研究下上面两个算子。


(1)gen_measure_rectangle2 

创建查找边缘的操作句柄

定义如下:

gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation : MeasureHandle)

产生测量矩形句柄,控制输入为测量矩形范围的坐标中心,矩形长轴和水平方向夹角范围的弧度,矩形边长的一半,测量图片的宽和高度,输出为测量句柄。

Row, Column是矩形的中心
Length1, Length2是矩形区域的长和宽的一半,关于区域的宽度,尽量在包住边缘的同时设置的越大越好,因为设置的太小噪声太大
Phi是Rectangle旋转的角度,当为正时表示逆时针旋转,当为负时表示顺时针旋转

如果想看ROI是否合适可以利用gen_rectangle1查看
Interpolation表示插值的方法,因为当ROI不是垂直或者水平的话,那么他的Projection(下图中短的等距线)经过的就不是一个完整的像素,因为要计算它的平均值给Profile。它的值就需要插值。

image.png


(2)measure_pos  

找寻你设定检测区域内的边缘

定义为:

measure_pos(Image : : MeasureHandleSigmaThresholdTransitionSelect : RowEdgeColumnEdgeAmplitudeDistance) 

算子中的参数Threshold和Amplitude 都涉及到边缘的幅度值

image.png

   以前 我理解边缘幅度值边缘处渐变的灰度差值,但现在看来这个理解是不准确的,应该是边缘灰度值变化的趋势,因为由黑到白(小变大)和由白到黑(大变小) 在图形中反映出幅度为负和正;因此可以理解这个幅度值是有正负的;

Sigma表示高斯滤波的参数,高斯滤波的是对Profile形成的曲线

Threshold是对他的一阶导数设置的阈值。这个理解比较不容易,可以暂时理解为你选取的幅度阈值下限。

另有一种可信的官方说法是:提取边缘轮廓的最小梯度幅度

Transition = ‘negative’时表示由像素值高转到低像素值的边缘放在RowEdgeFirst中,这里有一个参考方向,就是Rectangle旋转角度为0时,从左到右的方向。另一解释:沿主轴方向dark-to-light定义为第一类边缘,反之为第二类边缘。

或者参考下面的理解:

Transition=‘positive’  代表找寻所有正边缘 :所谓正边缘即为在查找方向上从黑到白过渡变化的边缘;

Transition=‘negative’  代表找寻所有负边缘 :所谓负边缘即为在查找方向上从白到黑过渡变化的边缘;

Transition=‘all’  代表找寻所有边缘 ;


RowEdge:边的中心行坐标

ColumnEdge :边的中心列坐标

Distance: 表示的是边缘组之间的距离

Amplitude  获取的是你提取到的边缘处的幅度大小


image.png


1.构造测量对象——建立测量区域
2.剖面线计算——做灰度值平均投影
3.剖面线光滑——消除噪声
4.剖面线求导
5.局部极值/边缘


勇哥以几个实例来说明一下measure_pos及其Sigma和Threshold的实际效果。


(例1)

在这里,我们看到底边突出来的部分,由于其点数相对于总点数150较少,所以最终拟合线条时被舍弃掉那部分点。

    thresold := 40
    sigma := 1
    roiWidth := 60
    transition := 'negative'
    select := 'first'
    p_number :=150
    level := 3

image.png


(例2)

参数没有变,勇哥让底边突出部分超过150个点的一大半。

可以看到由于它占的比率大,所以最后拟合的线条是突出来的那部分。


    thresold := 40
    sigma := 1
    roiWidth := 60
    transition := 'negative'
    select := 'first'
    p_number :=150
    level := 3

image.png


(例3)

    thresold := 40
    sigma := 1
    roiWidth := 60
    transition := 'negative'
    select := 'first'
    p_number :=150
    level := 3

image.png


 sigma := 30

image.png

Sigma表示高斯滤波的参数,高斯滤波的是对Profile形成的曲线。

我们通过实验,眼睛看到参数sigma影响的是点吃进去边缘像素的程度


至于threshold来说,用起来容易理解。

如果边缘与背景越难区分,其值要越小。反之,其值需要越大。


--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864