专栏首页机器视觉那些事儿无纺布折痕检测(3)· 基于灰度投影的折痕检测

无纺布折痕检测(3)· 基于灰度投影的折痕检测

- 算法思路 -

(1)构造滤波器与原图卷积增强图像 (2)灰度投影,构建垂直灰度投影函数,并与平滑后的函数进行 差分运算,超过一定阈值即为缺陷所在位置的列坐标 (3)计算缺陷区域并显示

使用第一篇构造的滤波器与图像卷积运算,突出图像竖直方向的折痕,如下图。

使用gray_projections算子,得到图像的水平灰度投影HorProjection以及垂直灰度投影VertProjection

HorProjection:从上到下,依次计算图像水平方向上,所有点灰度值的平均值。

VertProjection:从左到右,依次计算图像垂直方向上,所有点灰度值的平均值。

右键控制变量VertProjection,点击“像函数一样绘图”

如下图所示,因为折痕所在部分的投影灰度值会与其他部分产生突变,所以,红圈部分即为折痕垂直投影灰度。

平滑垂直灰度投影函数后,显示垂直投影曲线与平滑曲线,如下图所示,通过将两者曲线差分,超过一定阈值,即为缺陷的灰度投影值。

在垂直方向膨胀运算,计算得到折痕所在区域

完整代码:

dev_update_off ()
read_image (Image1030179715f15e264af3b, 'C:/Users/SWD-AR02/Desktop/10_3017_9715f15e264af3b.png')

*------(1)构造滤波器与原图卷积增强图像
*构造滤波器
filter :=[5,5,5,-1,-5,1,5,1,-1,-5,1,5,1,-1,-5,1,5,1,-1,-5,1,5,1,-1,-5,1,5,1]
*图像卷积
convol_image (Image1030179715f15e264af3b, ImageResult, filter, 'mirrored')

*------(2)灰度投影,构建垂直灰度投影函数,并与平滑后的函数进行差分运算,超过一定阈值即为缺陷所在位置的列坐标
*设置差分阈值
ThresholdValue :=15
*灰度投影
gray_projections (ImageResult, ImageResult, 'simple', HorProjection, VertProjection)
*创建函数
create_funct_1d_array(VertProjection,Function)
*平滑函数
smooth_funct_1d_mean(Function, 12, 3, SmoothedFunction)
*离散平滑函数
funct_1d_to_pairs (SmoothedFunction, XValues, YValues)

*垂直灰度投影值与平滑后灰度值差分运算
sub:=(VertProjection-YValues)
*使用符号函数,计算得到缺陷Y坐标
flawYValues:=find(sgn(sub-ThresholdValue),1)

*------(3)计算缺陷区域
*计算缺陷所在区域
if(flawYValues[0]#-1)
    *生成图像中心位置行坐标
    tuple_gen_const(|flawYValues|, 107, Newtuple)
    *以图像中心所在位置为行坐标,缺陷位置为列坐标,生成区域点
    gen_region_points(Region, Newtuple, flawYValues)
    *在列方向膨胀操作,得出包含缺陷的区域
    dilation_rectangle1(Region, RegionDilation, 5, 300)        
endif
*与原图求交集,得出缺陷所在区域
intersection(RegionDilation,Image1030179715f15e264af3b,RegionIntersection)

*结果显示
dev_set_draw ('margin')
dev_display (Image1030179715f15e264af3b)
dev_display (RegionIntersection)

本文分享自微信公众号 - 机器视觉那些事儿(jiqishijue),作者:threeQing

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 凹坑缺陷检测

    threeQing
  • 利用卡尺工具进行损伤检测

    threeQing
  • 基于二次曲面拟合的脏污检测

    原图来自于Ihalcon论坛,条条大路通罗马,目前有动态阈值、频域分析等算法思路,都可以尝试,在此提出另一种思路--人为构造光滑的二次区域与原图对比,进...

    threeQing
  • 光流法与直接法视觉里程计

    根据使用的图像信息不同,可分为: 稀疏直接法:只处理稀疏角点或关键点 稠密直接法:使用所有像素 半稠密直接法:使用部分梯度明显的像素

    小飞侠xp
  • 小朋友学C++(20):内联函数

    第(2)种方法比第(1)种方法,有三个优点: ① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多 ② 如果需要做任何修改,修...

    海天一树
  • 66.如何使用Python提取PDF表格中数据

    用Python提取PDF文件表格中的数据,这里我说的是,只提取PDF文件中表格中的数据,其他数据不提取。这样的需求如何实现?今天就来分享一下这个技能。首先,需要...

    TalkPython
  • 滚动上报实现

    最近产品说要在一个课程卡片列表页面中收集用户滚动行为的数据,大致是要获取用户滚动列表后曝光过的课程卡片数据。

    IMWeb前端团队
  • 基于Kubernetes部署MatterMost实践

    Mattermost是为开发团队推动创新而构建的开源消息传递平台。支持私有云部署在不牺牲隐私的情况下提供了现代通信的优势。Mattermost为企业提供了自治能...

    泽阳
  • RabbitMQ 最常用的三大模式

    不处理路由键,只需要简单的将队列绑定到交换机上发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。 Fanout交换机转发消息是最快的。

    海向
  • 滚动上报实现

    本文作者:IMWeb 何璇 原文出处:IMWeb社区 未经同意,禁止转载 最近产品说要在一个课程卡片列表页面中收集用户滚动行为的数据,大致是要获取用户...

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券