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

相关推荐
带电的小王15 分钟前
【动手学深度学习】3.1. 线性回归
人工智能·深度学习·线性回归
谢尔登21 分钟前
结合 AI 生成 mermaid、plantuml 等图表
人工智能
VR最前沿34 分钟前
【应用】Ghost Dance:利用惯性动捕构建虚拟舞伴
人工智能·科技
说私域1 小时前
内容力重塑品牌增长:开源AI大模型驱动下的智能名片与S2B2C商城赋能抖音生态种草范式
人工智能·小程序·开源·零售
l1t1 小时前
三种读写传统xls格式文件开源库libxls、xlslib、BasicExcel的比较
c++·人工智能·开源·mfc
AI浩1 小时前
【Block总结】EBlock,快速傅里叶变换(FFT)增强输入图像的幅度|即插即用|CVPR2025
人工智能·目标检测·计算机视觉
Vertira1 小时前
Pytorch安装后 如何快速查看经典的网络模型.py文件(例如Alexnet,VGG)(已解决)
人工智能·pytorch·python
Listennnn1 小时前
信号处理基础到进阶再到前沿
人工智能·深度学习·信号处理
奔跑吧邓邓子2 小时前
DeepSeek 赋能智能养老:情感陪伴机器人的温暖革新
人工智能·机器人·deepseek·智能养老·情感陪伴
DX_dove2 小时前
pytorch3d+pytorch1.10+MinkowskiEngine安装
人工智能·pytorch·python