Halcon lines_gauss

一、基本功能

lines_gauss算子能够准确地检测出图像中的线条,并且可以提供亚像素精度的线条轮廓。这使得它在视觉表面检测、图像处理、机器视觉等领域具有广泛的应用。

二、参数说明

lines_gauss算子的参数列表如下:

  • Image:输入图像,应为二值图像或灰度图像。
  • Lines:输出的线条,以亚像素精度的XLD(Extended Line Description)轮廓形式表示。
  • Sigma:高斯平滑的系数,用于控制图像的平滑程度。较高的Sigma值会对图像进行更强烈的平滑处理,但可能导致线条定位的精度下降。
  • Low:后滞阈值分割的低值,用于控制线条检测的灵敏度。
  • High:后滞阈值分割的高值,同样用于控制线条检测的灵敏度。通常,High值越高,检测到的线条细节越少;Low值越低,检测到的线条细节越多。
  • LightDark:指定提取线条的类型,可以选择提取亮色线条('light')或暗色线条('dark')。
  • ExtractWidth:是否提取线条的宽度。如果设置为'true',则会提取线条的宽度信息;如果设置为'false',则不提取。
  • LineModel:用于调整线条位置和宽度的线模型。可选的模型包括'none'(无模型)、'bar-shaped'(条形)、'parabolic'(抛物线形)和'gaussian'(高斯形)。不同的模型适用于不同类型的线条检测。
  • CompleteJunctions:是否添加能够提取的接合点(junction)。当设置为'true'时,算子会尝试提取并连接线条的接合点,以形成更完整的线条轮廓。

三、工作原理

lines_gauss算子通过以下步骤来检测线条:

  1. 对输入图像进行高斯平滑处理,以减少噪声和细节。
  2. 计算图像与高斯掩膜的卷积的偏导数,以确定图像中每个像素点在x方向和y方向的泰勒二次多项式的参数。
  3. 使用泰勒二次多项式的参数来计算每个像素点的线条方向。
  4. 在垂直于线条方向上具有局部最大值的点被标记为线条上的点,这些点随后被连接成亚像素精度轮廓。
  5. 根据设置的Low和High阈值,接受或舍弃标记的点,以形成最终的线条轮廓。

四、注意事项

  • 在选择Sigma值时,需要权衡平滑程度和线条定位的精度。较高的Sigma值会导致更强烈的平滑处理,但可能降低线条定位的精度。
  • Low和High阈值的选择取决于要检测的线条的灰度对比度和宽度。通常,Low值应选择在0.25High到0.5High之间。
  • LineModel参数的选择取决于线条的类型和形状。对于大多数应用来说,'bar-shaped'模型是一个不错的选择。如果线条的边缘比较锐利,可以选择'parabolic'模型;如果线条的边缘不那么锐利,可以选择'gaussian'模型。
  • 在使用lines_gauss算子之前,建议对输入图像进行适当的预处理,以提高线条检测的效果。

五、示例代码

cpp 复制代码
dev_close_window ()  
read_image (Angio, 'angio-part')  
get_image_size (Angio, Width, Height)  
dev_open_window (0, 0, 3 * Width / 2, 3 * Height / 2, 'black', WindowID)  
dev_display (Angio) 
dev_set_color ('blue')  
MaxLineWidth := 8  // 设置最大线条宽度为8
Contrast := 12  // 设置对比度为12,用于lines_gauss算子的线条检测
calculate_lines_gauss_parameters (MaxLineWidth, [Contrast,0], Sigma, Low, High)  // 根据最大线条宽度和对比度计算lines_gauss算子所需的Sigma、Low和High参数
lines_gauss (Angio, Lines, Sigma, Low, High, 'dark', 'true', 'parabolic', 'true')  // 使用lines_gauss算子在图像Angio中检测暗色线条,提取线条宽度,线条模型为抛物线形,并提取接合点,检测到的线条存储在Lines变量中
count_obj (Lines, Number)  
dev_update_pc ('off')
dev_update_var ('off')
for I := 1 to Number by 1
    select_obj (Lines, Line, I)
    get_contour_xld (Line, Row, Col)
    get_contour_attrib_xld (Line, 'angle', Angle)
    get_contour_attrib_xld (Line, 'width_left', WidthL)
    get_contour_attrib_xld (Line, 'width_right', WidthR)
    * 为了显示线条,将显示灰度值降至线条与背景之间对比度25%的点。对于抛物线模型线条,这个点由sqrt(3/4)给出。
    RowR := Row + cos(Angle) * WidthR * sqrt(0.75)
    ColR := Col + sin(Angle) * WidthR * sqrt(0.75)
    RowL := Row - cos(Angle) * WidthL * sqrt(0.75)
    ColL := Col - sin(Angle) * WidthL * sqrt(0.75)
    dev_set_color ('red')
    dev_display (Line)
    dev_set_color ('green')
    disp_polygon (WindowID, RowL, ColL)
    disp_polygon (WindowID, RowR, ColR)
endfor

Halcon算子**calculate_lines_gauss_parameters** 是一个用于计算lines_gauss算子所需参数的函数。这些参数包括高斯滤波器的标准差(Sigma)、用于滞后阈值方法的低值(Low)和高值(High)。这些参数根据要提取线条的最大宽度(MaxLineWidth)和对比度(Contrast)来确定。

以下是**calculate_lines_gauss_parameters**算子的详细说明:

参数说明

  1. MaxLineWidth (input_control):
    • 类型:数值型
    • 说明:lines_gauss算子要提取线条的最大宽度(以像素为单位)。这个值用于确定高斯滤波器的尺寸,因为较宽的线条需要更宽的滤波器来平滑。
  2. Contrast (input_control):
    • 类型:数值型或数值型数组(长度为1或2)
    • 说明:lines_gauss算子要提取线的对比度。这个值用于计算阈值分割的低值和高值,以便从背景中分离出线条。
      • 当Contrast为单个数值时,最小对比度将默认为最大对比度的1/3。
      • 当Contrast为两个数值的数组时,数组中的第二个值表示最小对比度,且其值不能大于第一个值(最大对比度)。
  3. Sigma (output_control):
    • 类型:数值型
    • 说明:获取用于lines_gauss输入的高斯滤波器标准差Sigma值。这个值由calculate_lines_gauss_parameters函数根据线条宽度和对比度计算得出。
  4. Low (output_control):
    • 类型:数值型
    • 说明:获取用于lines_gauss输入的滞后阈值低值Low。这个值用于确定哪些灰度值较低的像素点被认为是线条的一部分。
  5. High (output_control):
    • 类型:数值型
    • 说明:获取用于lines_gauss输入的滞后阈值高值High。这个值用于确定哪些灰度值较高的像素点也被认为是线条的一部分。

功能说明

calculate_lines_gauss_parameters算子根据输入的最大线条宽度和对比度,计算出适用于lines_gauss算子的Sigma、Low和High值。这些参数共同决定了线条检测的灵敏度和准确性。

相关推荐
封步宇AIGC10 分钟前
量化交易系统开发-实时行情自动化交易-3.4.1.4.A股衍生数据
人工智能·python·机器学习·数据挖掘
爱写代码的小朋友27 分钟前
基于图像处理与机器学习的车牌检测识别系统设计与实现
图像处理·人工智能·机器学习
摆烂小白敲代码29 分钟前
【机器学习】K近邻算法
c++·人工智能·算法·机器学习·近邻算法
UQI-LIUWJ1 小时前
模型运行速度笔记: s/epoch VS s/iter
人工智能·笔记·机器学习
墨绿色的摆渡人1 小时前
用 Python 从零开始创建神经网络(三):添加层级(Adding Layers)
人工智能·python·深度学习·神经网络
nuc_baixu1 小时前
opencv kdtree & pcl kdtree 效率对比
人工智能·opencv·计算机视觉
学步_技术2 小时前
自动驾驶系列—自动驾驶中的短距离感知:超声波雷达的核心技术与场景应用
人工智能·机器学习·自动驾驶·uss
凡人的AI工具箱2 小时前
15分钟学 Go 第 54 天 :项目总结与经验分享
开发语言·人工智能·后端·算法·golang
&永恒的星河&2 小时前
爆火的AI智能助手ChatGPT中自注意力机制的演化与优化
人工智能·chatgpt
WenGyyyL2 小时前
无人机检测车辆——多目标检测
人工智能·目标检测·无人机