Halcon一维测量--直线测量

本文介绍使用图像处理技术中的gen_measure_rectangle2和measure_pairs算子来测量图像中直线的距离,包括获取测量句柄和提取边缘组的过程。此外,还介绍了如何通过模糊算子进行测量,包括创建模糊测理论量句柄并提取与矩形或弧线垂直的直线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、测量直线对距离的算子

gen_measure_rectangle2+measure_pairs

gen_measure_rectangle2( : : RowColumnPhiLength1Length2WidthHeightInterpolation : MeasureHandle)

获取测量句柄。

Row测量矩形范围的坐标中心行坐标 

Column测量矩形范围的坐标中心列坐标 

Phi测量矩形范围的坐标中心旋转角度 

Length1测量矩形长的一半

Length2测量矩形宽的一半

Width测量图片的宽

Height测量图片的高度

Interpolation插值方法有:'nearest_neighbor', 'bilinear', 'bicubic'三种。

MeasureHandle输出为测量句柄。


measure_pairs(Image : : MeasureHandleSigmaThresholdTransitionSelect : RowEdgeFirstColumnEdgeFirstAmplitudeFirst,RowEdgeSecondColumnEdgeSecondAmplitudeSecondIntraDistanceInterDistance)

提取图像的边缘组

MeasureHandle测量句柄

Sigma进行高斯平滑的方差值。

Threshold边缘的最小幅值。

Transition:沿主轴方向dark-to-light定义为第一类边缘,反之为第二类边缘。 

Select(input_control)  string  (string) 

RowEdgeFirst第一类边缘点的行坐标值。

ColumnEdgeFirst第一类边缘点的列坐标值。

AmplitudeFirst第一类边缘点幅度值。

RowEdgeSecond第二类边缘点的行坐标值。

ColumnEdgeSecond第二类边缘点的列坐标值。

AmplitudeSecond第二类边缘点的幅度值。

IntraDistance每个边缘对之间的距离。

InterDistance连续边缘对之间的距离。

IntraDistance和InterDistance这两个距离可以计算物体的高度和计算物体的个数。

2、模糊算子测量

create_funct_1d_pairs( : : XValues, YValues : Function)

根据一系列的(x,y)坐标值创建一个函数。X坐标值会被升序排列。

set_fuzzy_measure_norm_pair( : : MeasureHandle, PairSize, SetType, Function : )

设置归一化的隶属度函数。

PairSize:优先的边缘对宽度

SetType:待选择的模糊集合

Function :隶属度函数

fuzzy_measure_pairs(Image : : MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition :RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond,AmplitudeSecond, RowEdgeCenter, ColumnEdgeCenter, FuzzyScore, IntraDistance, InterDistance)

创建模糊测理论量句柄,提取和矩形或弧线垂直的直线

AmpThresh:最小的边缘梯度阈值;

FuzzyThresh:最小的模糊阈值;

FuzzyScore:对所提取边缘值的模糊评价;









### Halcon一维测量算子的使用方法 #### 创建测量对象 为了执行一维测量,在Halgon中必须先创建一个描述感兴趣区域(ROI)的测量对象。对于沿直线进行的一维测量,该测量对象通过`gen_measure_rectangle2`函数来定义;而对于沿着弧线进行的测量,则应使用`gen_measure_arc`函数[^1]。 ```cpp // 定义基于矩形的一维测量对象 gen_measure_rectangle2 (Image, RowBegin, ColumnBegin, Phi, Length1, Length2, \ Sigma, NumLevels, IntegrationMode, GaussianDerivative, MeasureHandle) // 或者定义基于圆弧的一维测量对象 gen_measure_arc (RowCenter, ColumnCenter, Phi, RadiusMin, RadiusMax, ArcEtaExtent, \ Sigma, NumLevels, IntegrationMode, GaussianDerivative, MeasureHandle) ``` #### 执行边缘检测 一旦有了测量对象句柄(`MeasureHandle`)之后,就可以调用`measure_pos`来进行实际的边缘位置计算工作。此命令会自动寻找并返回满足设定条件的最佳匹配边缘的位置信息,包括但不限于行坐标、列坐标以及对应的灰度变化强度等参数[^5]。 ```cpp measure_pos (Image, MeasureHandle, Sigma, Threshold, Transition, Select, \ RowEdge, ColumnEdge, Amplitude, Distance) ``` 这里需要注意的是,`Sigma`用于控制高斯滤波器的标准差大小,而`Threshold`则决定了能够被识别出来的最小边缘梯度值。另外两个重要选项分别是`Transition`用来指定所期望捕捉到的亮度转换方向(上升沿还是下降沿),还有就是`Select`允许用户进一步筛选出特定类型的边界点。 #### 结果处理与优化 当获得了初步的结果后,还可以考虑应用形态学操作或者其他高级技术手段对所得数据做进一步加工改进。例如可以利用圆形结构元素实施开闭运算去除噪声干扰项,或是借助插值算法提高定位精度等等[^2][^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值