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值。这些参数共同决定了线条检测的灵敏度和准确性。

相关推荐
Java后端的Ai之路14 小时前
【神经网络基础】-神经网络学习全过程(大白话版)
人工智能·深度学习·神经网络·学习
庚昀◟14 小时前
用AI来“造AI”!Nexent部署本地智能体的沉浸式体验
人工智能·ai·nlp·持续部署
喜欢吃豆14 小时前
OpenAI Realtime API 深度技术架构与实现指南——如何实现AI实时通话
人工智能·语言模型·架构·大模型
数据分析能量站14 小时前
AI如何重塑个人生产力、组织架构和经济模式
人工智能
wscats15 小时前
Markdown 编辑器技术调研
前端·人工智能·markdown
AI科技星15 小时前
张祥前统一场论宇宙大统一方程的求导验证
服务器·人工智能·科技·线性代数·算法·生活
GIS数据转换器15 小时前
基于知识图谱的个性化旅游规划平台
人工智能·3d·无人机·知识图谱·旅游
EnoYao15 小时前
Markdown 编辑器技术调研
前端·javascript·人工智能
TMT星球16 小时前
曹操出行上市后首次战略并购,进军万亿to B商旅市场
人工智能·汽车
Coder_Boy_16 小时前
Spring AI 源码大白话解析
java·人工智能·spring