提取低对比度场景下的直线划伤:基于轮廓和方向性分析

在图像处理和计算机视觉领域,低对比度场景下的直线划伤提取是一项具有挑战性的任务。在许多实际应用中,直线划伤或裂缝可能在背景中与周围区域的对比度较弱,且存在断续现象。为了有效地提取这些低对比度的直线划伤,我们可以利用图像中的轮廓信息和方向性分析,来准确地识别和提取这些划伤痕迹。

1. 算法概述

本算法通过以下几个步骤提取低对比度场景中的直线划伤:

  1. 轮廓提取:通过 lines_gauss 函数提取图像中的轮廓片段。
  2. 轮廓筛选:根据轮廓的长度和直线度筛选出有效的轮廓。
  3. 角度分析:分析提取的直线轮廓的角度分布,确保提取到的线条具有一致的角度。
  4. 区域方向性融合:根据每个轮廓的方向性延伸区域,并进行区域的融合。
  5. 目标直线区域选择:通过一定的长度标准选择符合要求的直线区域。
  6. 显示结果:将提取到的直线划伤区域可视化。

2. 算法实现

2.1 图像加载与轮廓提取

首先,我们使用 lines_gauss 函数对图像进行轮廓提取。此函数可以提取出图像中的直线轮廓,特别适用于低对比度场景下的轮廓检测。

read_image (Image, ImageFiles[imgi])
lines_gauss (Image, Lines, 1.0, 2, 5, 'light', 'false', 'bar-shaped', 'false')

通过这一步,图像中的轮廓将被提取出来,便于后续分析。

2.2 轮廓筛选

接着,我们对提取出的轮廓进行筛选,依据轮廓的长度和直线度来选择有效的轮廓。通过 select_shape_xld 函数进行筛选,只保留那些符合条件的轮廓。

select_shape_xld (Lines, Lines0, ['contlength', 'anisometry_points'], 'and', [5, 5], [1e4, 1e4])

这一步保证了我们只选择出具有较长且较直的轮廓片段,以去除无关的小噪声区域。

2.3 角度分析

由于在实际场景中,直线划伤通常沿某个方向分布,所以我们需要对每条轮廓的角度进行分析。通过 elliptic_axis_points_xld 函数获取每条直线的角度信息,并将其按角度范围进行划分。

elliptic_axis_points_xld (Lines0, _, _, Phis)

我们将角度范围划分为 -90 到 90 度,步长为 30 度(即±15度),以便对不同方向的轮廓进行分类。

2.4 方向性区域融合

对于每个方向上的轮廓,我们通过 segment_contours_xld 函数进行分段,并使用 fit_line_contour_xld 来拟合每段轮廓,从而得到直线的起止点。然后,我们生成直线的区域,并沿着每个方向延伸区域。

gen_empty_obj (RegHSLines)
for ang := -rad(75) to rad(75) by rad(30)
    curAng := ang
    select_shape_xld (Lines0, TempLines, 'phi_points', 'and', curAng - rad(15), curAng + rad(15))
    segment_contours_xld (TempLines, TempSmallLines, 'lines', 3, 2, 1)
    fit_line_contour_xld (TempSmallLines, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
    gen_region_line (RegionLines, RowBegin, ColBegin, RowEnd, ColEnd)
    
    elliptic_axis (RegionLines, RFeaRas, RFeaRbs, RFeaPhis)
    area_center (RegionLines, _, RFeaRows, RFeaCols)
    gen_rectangle2 (RegSEs, RFeaRows, RFeaCols, RFeaPhis, RFeaRas + 20.5, RFeaRbs + 1.5)
    union1 (RegSEs, RegSE)
    connection (RegSE, RegSEs)
    intersection (RegSEs, RegionLines, RegLines)
    concat_obj (RegHSLines, RegLines, RegHSLines)
endfor

在这一步中,我们不仅对轮廓进行方向性选择,还进行了轮廓的拟合和区域延伸,以便更好地处理低对比度下的直线划伤。

2.5 目标直线区域选择

最后,我们根据预定的长度标准(例如 150 像素)来选择目标直线区域,并生成其最小外接矩形,以便对目标直线区域进行可视化显示。

select_shape (RegHSLines, RegHS, 'contlength', 'and', 150, 1e6)
smallest_rectangle2 (RegHS, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1 + 5, Length2 + 10)

通过这一步,算法能够准确地定位出符合要求的直线区域,并为其绘制最小外接矩形。

2.6 显示结果

最后,算法将显示原始图像以及提取到的直线区域。

dev_display (Image)
dev_display (Rectangle)

通过这一步,我们可以直观地看到提取出的直线划伤区域,并进行后续的处理或分析。

3. 算法效果与应用

该算法能够成功地从低对比度的场景中提取出直线划伤,特别是在工业检测、表面缺陷分析等领域具有广泛的应用前景。通过有效的轮廓提取和方向性分析,即使在背景噪声较多、对比度较低的情况下,也能准确地定位出直线划伤。

原图与提取结果对比:

原图:

提取结果:

原图:

提取结果:

4. 工程下载

通过网盘分享的文件:低对比度下直线提取.7z
链接: https://pan.baidu.com/s/1hIYcax2Vjf7RVxJV5E2rbA?pwd=jkcf 提取码: jkcf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客晨风

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值