lines_gauss用法解析

本文深入解析了lines_gauss算子的工作原理及参数配置,该算子广泛应用于图像处理领域,用于精确提取图像中的线条及其宽度。文章详细介绍了如何通过调整参数如Sigma、High、Low等实现最佳线条检测效果,适用于各种复杂场景。

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

Lines_gauss——检测图像中的线条及其宽度,在视觉表面检测方面应用广泛。


Signature

lines_gauss(Image Lines Sigma, Low, High, LightDark, ExtractWidth, LineModel, CompleteJunctions 

Image:输入图像

Lines:提取出的亚像素精度线条

Sigma:应用的高斯平滑的系数

Low:后滞阈值分割的低值

High:后滞阈值分割的高值

LightDark:提取图像中的亮色或者暗色线条

ExtractWidth:是否提取线条的宽度

LineModel:提取线条的模式,有'none', 'bar-shaped', 'parabolic', 'gaussian' 四种

CompleteJunctions:是否添加能够提取的接合点(junction)(没搞懂什么意思)

 

LineModel被设置为除'none'以外的其他值时,lines_gauss算子会补偿非对称线条(即在线条的中心两侧有不同对比度的线条),来校正提取出的线条的位置和宽度。对大多数应用来说,LineModel'bar-shaped'参数是正确的选择,'parabolic'参数常用来提取边缘比较锐利的线条(比如背光照明的图像中的线条),'gaussian'则在线条边缘不那么锐利的时候使用。参数LineModel仅在参数ExtractWidth被设置为'true'时才有意义。

 

以下是大恒图像的培训资料中LineModel参数的解释:

lines_gauss用法解析

 

因为几何算法的原因,线条提取器(即lines_gauss算子)不可能提取出所有确定的接合点,当CompleteJunctions被设置为'true'时,算子会试图通过不同的算法提取出那些能够提取出来的接合点。

 

线条提取算法通过图像与一个高斯掩膜的卷积的偏导数来决定图像中的每个点在x方向和y方向的泰勒二次多项式的参数。参数Sigma指定了高斯掩膜的参数(平滑程度)。高的Sigma值代表对图像进行大尺度的平滑处理,但由此可能造成提取线条的定位失准。一般来说,在具有对比性的参数下,lines_guass能比lines_facet返回更加准确的线条位置。泰勒二次多项式的参数被用来计算每个像素点的线条方向。那些二阶偏导数在垂直于线条方向上具有局部最大值的点被标记为线条上的点,这些点随后被连接成亚像素精度轮廓。如果被标记的点的二阶偏导数值大于参数High,其被认为是线条上的点而被立即接受,如果低于参数Low,其被认为不是线条上的点而被立即舍弃,如果其大于参数Low但小于参数High,则仅在此点能够通过某一路径与已经被接受的点相连时这些点才被接受。(参考hysteresis_threshold)

 

在选在参数High和参数Low时,应该注意,二阶偏导数受线条幅度和宽度影响的同时,也受参数Sigma的影响。二阶偏导数对线条幅度呈近似线性响应(即幅度值越大,二阶偏导数越大)。而对线条宽度的响应却差不多呈反指数关系(即线条的宽度越宽,二阶偏导数越小),这跟对参数Sigma值的大小响应差不多(即Sigma值越大,得到的二阶偏导数越小)。这就意味着对于一个大的Sigma值,应该选择一个比较小的High值和Low值。两个例子说明这个问题,对于一个幅度值大于1005个像素宽的线条,如果Sigma=1.5,那么参数High应该大于14。而对于一个幅度值大于10010个像素宽的线条来说,如果Sigma=3,那么参数High应该大于3.5参数Low的值选在0.25High0.5High之间比较合适。

 

在提取线条的同时,lines_guass算子还提取线条上每个点的以下属性:

如果ExtractWidth='false'

(1)'angle':垂直于线条的方向的角度

(2)'response':二阶偏导数的幅度值

如果ExtractWidth='true',下面的属性也会被提取出来

(3)'width_left':线条左侧的宽度

(4)'width_right':线条右侧的宽度

如果LineModel没有被设置为'none',那么下面的属性也会被提取出来

(5)'asymmetry':线条的不对称度

(6)'contrast':线条的对比度

上面这些参数能够通过get_contour_attrib_xld算子得到。

 

注意:

一般来说,特别是在需要提取线条宽度的时候,参数Sigma的选择应该满足Sigma >= w/sqrt(3)w代表图像中线条的宽度(线条直径的一半)),最小允许值是Sigma >= w/2.5。例如,对于一个宽度为4个像素(直径为8个像素)的线条来说,Sigma >= 2.3是合适的参数。

 

 

参考资料:

1、大恒图像HALCON测量技术

2、《机器视觉算法与应用》

 

 

<think>好的,用户想了解Halcon中的calculate_lines_gauss_parameters函数的使用说明和参数详解。首先,我需要回忆一下这个函数的作用。根据引用[2]和[4],这个函数是用来计算lines_gauss算子需要的Sigma、Low、High参数的,这样可以避免手动调整这些参数的麻烦。用户可能在使用lines_gauss时遇到了参数选择困难,所以需要这个辅助函数来简化流程。 接下来,我需要确认函数的参数。根据引用[2],函数的输入是MaxLineWidth和Contrast,输出是Sigma、Low、High。MaxLineWidth是要提取线条的最大宽度,Contrast是对比度。输出参数会作为lines_gauss的输入。引用[4]提到,Sigma的选择会影响二阶偏导数,进而影响高低阈值的选择。因此,这个函数通过自动计算,帮助用户得到合适的参数。 然后,用户可能需要知道具体的使用步骤。引用[3]中的代码示例显示,调用calculate_lines_gauss_parameters后,将结果传给lines_gauss。比如,当MaxLineWidth设为30,Contrast为60时,函数计算出Sigma、Low、High,然后lines_gauss使用这些参数进行线条提取。此外,引用[5]中的例子使用了不同的参数,说明Contrast可以是单个值或数组,但需要根据实际情况调整。 还需要注意参数的相互关系。根据引用[4],线宽和Sigma的关系是反指数依赖,线宽越大,Sigma也越大,而High值会减小。因此,用户需要根据实际图像中的线条宽度和对比度来设置MaxLineWidth和Contrast,确保函数计算出合适的参数。 最后,用户可能需要一些应用示例或注意事项。例如,在低对比度情况下如何调整Contrast,或者如何处理不同亮度的线条(如'dark'或'light')。此外,引用[3]和[5]中的代码示例可以作为参考,展示如何在实际中结合这两个函数使用。 总结用户的需求,他们需要一个清晰的参数解释和使用步骤,可能还需要一些示例和最佳实践。需要确保回答结构清晰,分点说明每个参数的作用,并给出使用示例和常见问题解答,帮助用户更好地理解和应用这个函数。</think>### Halcon calculate_lines_gauss_parameters 使用说明 #### 功能概述 `calculate_lines_gauss_parameters` 是 Halcon 中用于自动计算 `lines_gauss` 算子参数的辅助函数[^2]。通过输入线条最大宽度(`MaxLineWidth`)和对比度(`Contrast`),可自动生成适合当前场景的 Sigma、Low 和 High 值,解决手动调试参数困难的问题[^4]。 --- #### 参数详解 1. **输入参数** - **MaxLineWidth** 类型:整型 作用:定义待提取线条的最大宽度(单位:像素)。 示例:若图像中线宽最大为 5 像素,则设为 5[^4]。 - **Contrast** 类型:整型或数组 作用:控制线条与背景的对比度阈值。 特性:支持单值(如 `60`)或区间值(如 `[60,20]`),后者可适应不同对比度的线条[^3][^5]。 2. **输出参数** - **Sigma** 类型:浮点型 作用:高斯滤波器的标准差,影响线条边缘检测的灵敏度。 规律:线宽或 `MaxLineWidth` 越大,Sigma 值越大。 - **Low / High** 类型:浮点型 作用:定义线条提取的阈值范围。 关系:`Low` 通常为 `0.25*High` 到 `0.5*High`,用于抑制噪声并保留有效线条。 --- #### 使用示例 ```python # 读取图像并设置参数 read_image(Image, 'mreut') MaxLineWidth = 30 Contrast = 60 # 计算 lines_gauss 参数 calculate_lines_gauss_parameters(MaxLineWidth, Contrast, Sigma, Low, High) # 提取线条亮色、条形) lines_gauss(Image, Lines, Sigma, Low, High, 'light', 'true', 'bar-shaped', 'true') ``` > 注:若图像中存在不同对比度的线条,可将 `Contrast` 设为数组(如 `[60,20]`)以增强鲁棒性[^3][^5]。 --- #### 关键公式与原理 - **Sigma 与线宽关系** 线宽 $w$ 与 Sigma $\sigma$ 满足 $\sigma = w / (2\sqrt{3})$[^4]。 - **阈值计算公式** $$ High = \frac{Contrast}{\sqrt{2\pi}\sigma} \cdot e^{-1/2} $$ $$ Low = k \cdot High \quad (0.25 \leq k \leq 0.5) $$ 该公式确保对不同宽度的线条自适应选择阈值[^4]。 --- #### 常见问题 1. **如何选择 `MaxLineWidth`?** 测量图像中最粗线条的像素宽度,并向上取整[^4]。 2. **`Contrast` 设置过高/低的影响?** 过高:漏检低对比度线条;过低:引入噪声伪影[^5]。 3. **处理暗色线条需调整哪些参数?** 在 `lines_gauss` 中设置 `'dark'` 选项,其他参数无需修改。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值