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

相关推荐
奔跑中的小象1 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南1 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang1 小时前
LangGraph 状态机实战
人工智能
刹那芳华19921 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作1 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门1 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜1 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟2 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦2 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
阿里云云原生2 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能