基于厚度变化的分割点定位算法:以瓶口颈部为例

在工业图像处理中,分割点的精确定位是非常关键的。尤其是在产品形态变化较为复杂的场景下,传统的特征提取方法可能无法提供理想的解决方案。本文将介绍一种新的分割点定位算法,该算法不依赖特征提取,而是通过分析产品厚度的变化来自动识别分割点,特别适用于那些厚度由大到小再由小到大的产品,例如瓶口的颈部。

1. 算法概述

该算法的核心思想是通过分析图像中工件的厚度变化,找到从厚度大到小,再从小到大的过渡点,进而确定分割点。具体来说,算法通过以下几个步骤来定位分割点:

  1. 图像预处理:加载并分解图像,提取绿色通道。
  2. 区域提取:通过阈值分割提取目标区域,并进行区域连接和形态学处理。
  3. 区域划分:计算区域的最小外接矩形,并生成切割矩形进行区域划分。
  4. 厚度计算:通过计算每个切割矩形的高度,生成高度变化的函数。
  5. 极值定位:通过对厚度变化函数进行平滑处理,找到局部最小值和最大值,确定过渡点,即分割点。

数据集和算法下载

通过网盘分享的文件:快速定位一个区域中厚度转则的位置.7z
链接: https://pan.baidu.com/s/12YwQdy0UNykJRySgXprOAA?pwd=jkcf 提取码: jkcf

2. 算法流程详细解析

2.1 初始化与图像加载

首先,初始化窗口,并加载图像。图像中的绿色通道被提取出来用于后续处理:

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_paint ('default')
dev_set_draw ('margin')
dev_set_line_width (3)
set_font (WindowHandle, 'Arial-Bold-20')

read_image (Image, '5采集.png')
decompose3 (Image, ImgR, ImgG, ImgB)

这一步骤为后续的图像处理和显示准备了基础。

2.2 区域提取与形态学处理

接着,通过阈值分割提取绿色通道中的目标区域,接着进行区域连接和形态学操作,以去除噪声并平滑区域边界:

threshold (ImgG, Reg, 0, 180)
connection (Reg, Regs)
select_shape (Regs, RegMax, 'area', 'and', 1e3, 1e7)
closing_circle (RegMax, RegMaxCL, 30.5)

这里,threshold 用于提取图像中亮度值在指定范围内的区域,connection 将这些区域连接成一个完整的区域,select_shape 根据区域面积筛选出感兴趣的区域,closing_circle 进行形态学闭运算,去除小的噪点。

2.3 区域划分与切割

在提取的区域上,计算其最小外接矩形,并基于该矩形生成多个小矩形区域。这些小矩形将用于计算每个区域的厚度:

smallest_rectangle1 (RegMaxCL, R1, C1, R2, C2)
Cols := [C1 + 200 : 1 : C2 - 5]
Row1s := gen_tuple_const(|Cols|, R1 - 10)
Row2s := gen_tuple_const(|Cols|, R2 + 10)
gen_rectangle1 (cRects, Row1s, Cols, Row2s, Cols)
intersection (cRects, RegMaxCL, RegInters)

通过计算最小外接矩形 smallest_rectangle1 得到矩形的边界坐标,并根据该坐标生成多个小矩形 gen_rectangle1,这些矩形用于区域切割,并与原区域进行交集运算,以得到切割后的区域 RegInters

2.4 厚度计算与函数生成

计算每个切割矩形的高度,并将其形成一个高度变化的函数:

region_features (RegInters, 'height', RFeaHigs)
create_funct_1d_array (RFeaHigs, HigFunc)
smooth_funct_1d_gauss (HigFunc, 5, HigFuncSmooth)

通过 region_features 计算每个小矩形的高度,并将这些高度值生成一个一维函数 HigFunc。为了消除噪声影响,对高度函数进行高斯平滑处理,得到平滑后的函数 HigFuncSmooth

2.5 极值定位与分割点确定

通过查找平滑后的函数中的极小值和极大值,定位过渡点。过渡点就是从大到小,或者从小到大的变化点,通常就是分割点的标志。

local_min_max_funct_1d (HigFuncSmooth, 'strict_min_max', 'true', MinInds, MaxInds)
Inds := int(MinInds)
MinHigs := RFeaHigs[Inds]
minHig  := min(MinHigs)
minInd  := find(MinHigs, minHig)
select_obj (cRects, MinRect, Inds[minInd])

使用 local_min_max_funct_1d 查找函数中的极小值和极大值,find 函数用于定位最小高度值所在的位置,最终选出对应的小矩形作为分割点 MinRect

2.6 结果展示

最后,显示图像和定位出的分割点:

dev_display (Image)
dev_display (MinRect)

这一步显示原图像和定位出的分割点,便于直观地验证算法效果。

3. 算法效果

该算法可以快速、准确地定位产品从大到小或从小到大的厚度变化点,适用于复杂形状的产品分割。例如,在瓶口的颈部,算法能够成功地检测到从大到小的过渡点,提供精准的分割。

原图与定位结果对比:

原图:

定位结果:

4. 总结

本算法通过厚度变化分析来定位工件的分割点,避免了传统特征提取方法的复杂性,具有更高的适应性和准确性。通过对图像区域的高度变化进行分析,能够准确地找到从大到小或从小到大的过渡点,适用于复杂产品形状的分割,尤其是在瓶口颈部等应用场景中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客晨风

感谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值