边缘缺陷检测

原图来自Ihalcon论坛

缺陷如在下图圆框中

首先,阈值分割+形态学处理,将包含边缘部分图像进行抠图

然后使用canny滤波器进行边缘检测

如下图红、绿双线

将凸起部分平滑掉,细节如下右图

计算待检测边缘上的点到平滑后边缘的距离,超过一定阈值公差即为缺陷

如下图

缺陷检测关键代码

 *选择待检测边缘
      select_obj(UnionContours, ObjectSelected, Index)
      *平滑边缘
      smooth_contours_xld (ObjectSelected, SmoothedContours, 89)
      *阈值公差
      disTH := 5
      *用于保存缺陷边缘X坐标
      flawPtsX :=[] 
      *用于保存缺陷边缘Y坐标
      flawPtsY :=[]
      *得到待检测边缘点坐标
      get_contour_xld(ObjectSelected, Row2, Col2)
      *待检测边缘上点到平滑边缘的距离
      tuple_length(Row2, Length)
      for Index1 := 0 to Length-1 by 1
          distance_pc(SmoothedContours, Row2[Index1], Col2[Index1], DistanceMin, DistanceMax)
          *根据公差判断是否合格
          if(DistanceMin > disTH)
              flawPtsX :=[flawPtsX,Col2[Index1]]
              flawPtsY :=[flawPtsY,Row2[Index1]]
          endif
      endfor      
      *将缺陷点生成区域,并进一步筛选
      gen_region_points(Region1, flawPtsY, flawPtsX)
      dilation_circle(Region1, RegionDilation, 5)
      connection(RegionDilation, ConnectedRegions1)
      select_shape(ConnectedRegions1, SelectedRegions1, 'area', 'and', 200, 99999)
      gen_empty_obj(EmptyObject)
      count_obj(SelectedRegions1, Number1)
      *再从筛选后的区域,选择不合格的边缘
      for Index1 := 1 to Number1 by 1
          select_obj(SelectedRegions1, ObjectSelected2, Index1)
          smallest_rectangle1(ObjectSelected2, Row11, Column11, Row21, Column2)
          clip_contours_xld(ObjectSelected, ClippedContours, Row11, Column11, Row21, Column2)
          concat_obj(EmptyObject, ClippedContours, EmptyObject)        
      endfor
      *连接相邻不合格边缘缺陷
      union_adjacent_contours_xld(EmptyObject, EmptyObject, 50, 1, 'attr_keep')
      
      *合并缺陷
      concat_obj(FlawEdgeObject, EmptyObject, FlawEdgeObject)

原图及详细注释的完整源代码见百度网盘:

链接: https://pan.baidu.com/s/178KvG8Gav1PWOeA-Wrbc2g 提取码: kwpa 复制这段内容后打开百度网盘手机App,操作更方便哦

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

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于变分模型的缺陷检测

    印刷缺陷检测经常用于两种方法:差分模型、变分模型。差分模型包括区域差分和图像差分,对于来料以及光源的一致性要求较高,而变分模型对此具有更好的鲁棒性。

    threeQing
  • 凹坑缺陷检测

    threeQing
  • 【测量篇】(1)1D测量

    清朝三百年,将国人的奴性打磨的根深蒂固,伟人毛主席将反抗的火种播撒至每个人的心中,随着经济的高速发展,一些资产违背国家意愿,逐渐形成联盟,劳动力阶级一定要摆脱轮...

    threeQing
  • CentOS 7下安装配置Nginx

    如果你的服务器是阿里云 ECS,你还可以通过控制台安全组,打开 80 和 443 端口,或者其他自定义端口。

    雪梦科技
  • 利用php url转发 - 解决空间不提供子目录绑定功能的问题

    由于很多新手都是使用的虚拟空间都是最便宜的那种,这空间一般不支持子目录绑定。但是很多朋友又想设置几个不同的二级域名访问不同的网站程序。于是大家找到了域名url转...

    用户6891928
  • python小白的初步爬虫

    最近工作不是很忙,领导突然找我谈话,说是谈话,其实就是分配活呗。果不其然,很快进入正题, 给了我一个网址链接,然后说需要商品的信息。。。巴拉巴拉。好吧,去做吧。

    py3study
  • 那些年,我们一起碰到过的骗局

    现在有很多骗局案例的顺利实施足以给予那些潜在的受害者一些警示,提醒他们避免上当受骗。因此,尽管ESET的大部分业务是主要集中在恶意软件上面,我仍旧花了很多时间在...

    FB客服
  • eclipse导入import git项目

    为模拟真实环境,wanzi要和mark共同开发。为模拟wanzi,换一台新机器,新装一个git,新建一个用户名和email。

    马克java社区
  • jQuery.data() 的实现方式

    jQuery.data() 的实现方式     jQuery.data() 的作用是为普通对象或 DOM Element 附加(及获取)数据。      ...

    用户1220053
  • python 获取真正对象的大小 get_size

    超级大猪

扫码关注云+社区

领取腾讯云代金券