一文学会,胶位偏移、缺胶、断胶、溢胶检测

文章目录

  • 检测任务
  • 检测思路
  • 点胶质量检测代码及解析
  • 图示处理思路

  • 博主写作不容易,孩子需要您鼓励
  • 万水千山总是情 , 先点个赞行不行

检测任务

点胶检查检测以下缺陷:
1.缺少粘合胶的部分(断胶)
2.粘合剂过多或过少的部分(溢胶、缺胶)
3.粘合胶离其预定位置太远(点胶偏移)

halcon对应示例程序:
apply_bead_inspection_model.hdev

效果图示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

检测思路

示例程序的图像处理思路:

1.使用halcon的可变形模板匹配,将检测物品转正,方便检测
这里我们用的较少,因为我们平时在做点胶检测的时候,用普通的模板匹配,还有普通的2D仿射变换就可以保证图像的一致性。

2.定义粘合胶条的参考路径,以及胶条的宽度,还有误差容忍值
注意,这里halcon的官方例程是给了一个轨迹的点集,我们在实际的检测中,可以使用CAD图纸导入或者手绘路径,完成此步骤。关于CAD图纸导入halcon我会出一期教学博客,写完了把链接贴上来。

3. 利用算子create_bead_inspection_model 创建点胶轨迹模型
创建点胶轨迹的模型,相当于我们使用模板匹配时候用到的穿件模板算子,也不难的。到第三步,我们已经完成了创建模板与点胶轨迹模型的步骤,准备工作都进行完毕,接下来就要进行检测了。

4.校正胎圈的位置,并生成四条平行轮廓,进行显示
显示一下前面准备工作的结果,包括胶轨迹的样子,可容许胶轨迹范围等。

5.读入待检测图像,并进行校正,最后利用算子apply_bead_inspection_model进行点胶轨迹检测
从这一步开始,就使用前面几部的模板,进行点胶轨迹的检测了。首先我们先把图片进行一个仿射变换,转正图片,让我们处理的点胶区域每次都保持一致。这样极大地减小了处理难度。再调用apply_bead_inspection_model进行点胶轨迹检测,就检测完成啦。是不是并不难。

6.根据不同的检测类型在窗口上进行相关显示
最后搞个交互界面显示一下结果就OK了啦。

点胶质量检测代码及解析

在本例中,图片矫正使用平面可变形匹配。
dev_update_off ()

首先使用仿射变换将图片转正,之后创建平面可变形模模板
这一步就是为了让每次处理的图片一致性好。

prepare_alignment (RegionPart, RowT, ColumnT, ModelID)
求取检测区域的最小矩形,这样的好处是只对需要进行图像处理的区域进行处理,使算法速度增加。
smallest_rectangle1 (RegionPart, PartRow1, PartColumn1, PartRow2, PartColumn2)

定义点胶轨迹的参考路径
//这里使用轨迹点集创建点胶轨迹,也可以通过在参考图像上绘制该路径来生成,例如使用算子draw_nurbs.
gen_contour_nurbs_xld (ContourRef, [701.767,626.953,538.867,443.54,390.447,360.28,354.247,363.9,400.1,458.02,509.907,588.34,659.533,696.94], [319.24,336.133,367.507,431.46,489.38,546.093,646.247,722.267,776.567,826.04,869.48,912.92,934.64,929.813], ‘auto’, [15,15,15,15,15,15,15,15,15,15,15,15,15,15], 3, 1, 5)

定义点胶轨迹模板创建变量
TargetWidth := 14
WidthTolerance := 7
PositionTolerance := 30
Polarity := ‘dark’

创建点胶轨迹模板
//参数说明:参考轮廓(ContourRef);胶轨迹标准宽度(TargetWidth);胶轨迹宽度误差大小(WidthTolerance);胶轨迹宽所在的区域范围(PositionTolerance);胶轨迹颜色(Polarity);进行处理的sigma与阈值([], []);创建出的模板(BeadInspectionModel)
create_bead_inspection_model (ContourRef, TargetWidth, WidthTolerance, PositionTolerance, Polarity, [], [], BeadInspectionModel)

读入图片进行显示点胶轨迹、描述信息等
read_image (Image, ‘bead/adhesive_bead_01’)

矫正图像,使图像与之前的图像保持较好的一致性
align_bead (Image, ImageAligned, ModelID, RowT, ColumnT) //校正

创建两个平行轮廓,用于显示正确点胶轨迹的宽度,并将两个轮廓合并到一个变量中
gen_parallel_contour_xld (ContourRef, ModelSide1, ‘regression_normal’, TargetWidth * 0.5)
gen_parallel_contour_xld (ContourRef, ModelSide2, ‘regression_normal’, -TargetWidth * 0.5)
concat_obj (ModelSide1, ModelSide2, ModelSides)

创建两个平行轮廓,用于显示正确点胶轨迹容许范围,并将两个轮廓合并到一个变量中
gen_parallel_contour_xld (ContourRef, PositionToleranceSide1, ‘regression_normal’, PositionTolerance)
gen_parallel_contour_xld (ContourRef, PositionToleranceSide2, ‘regression_normal’, -PositionTolerance)
concat_obj (PositionToleranceSide1, PositionToleranceSide2, PositionToleranceSides)

halcon显示操作相关操作
dev_close_window ()
dev_open_window_fit_size (0, 0, PartColumn2 - PartColumn1 + 1, PartRow2 - PartRow1 + 41, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
dev_set_part (PartRow1 - 20, PartColumn1, PartRow2 + 20, PartColumn2)
dev_display (ImageAligned)
dev_set_line_width (2)
dev_set_color (‘green’)
dev_display (ContourRef) //粘合胶条的参考路径
dev_set_line_width (1)
dev_display (ModelSides) //胶条的宽度
dev_set_color (‘yellow’)
dev_display (PositionToleranceSides) //容许点胶范围

显示描述文本
Message := ‘Correct adhesive bead and the reference contour. The’
Message[1] := ‘yellow contours indicate the range of position tolerance.’
disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘black’, ‘true’)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
*
开始读入图片进行检测
TextOffset := 20 //偏移值
NumImages := 7
for Index := 1 to NumImages by 1
read_image (Image, ‘bead/adhesive_bead_’ + Index$‘02’)

矫正图片
align_bead (Image, ImageAligned, ModelID, RowT, ColumnT)

使用之前生成的点胶轨迹模板,进行点胶轨迹检测
//参数说明:进行检测的图像(ImageAligned);胶轨迹左轮廓(LeftContour);胶轨迹右轮廓(RightContour);胶轨迹宽缺陷所在位置(ErrorSegment);使用的模板(BeadInspectionModel);缺陷种类(ErrorType)
apply_bead_inspection_model (ImageAligned, LeftContour, RightContour, ErrorSegment, BeadInspectionModel, ErrorType)

显示点胶轨迹,检测结果等相关信息
dev_display (ImageAligned)
dev_set_line_width (1)
dev_set_color (‘white’)
dev_display (ContourRef)
dev_display (ModelSides)
dev_display (PositionToleranceSides)
dev_set_line_width (2)
dev_set_color (‘green’)
dev_display (LeftContour) //检测出的内部XLD
dev_display (RightContour) //检测出的外部XLD
dev_set_color (‘red’)
dev_display (ErrorSegment) //错误部分区域

if (|ErrorType| == 0)
没有错误信息,显示OK
Message := ‘Adhesive bead is OK’
disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘white’, ‘forest green’)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
else
有错误信息,显示not OK,并且显示缺陷种类,标识缺陷位置
Message[0] := ‘Adhesive bead is not OK:’
ErrorClasses := [‘no bead’,‘too thin’,‘too thick’,‘incorrect position’]
for ClassIndex := 0 to |ErrorClasses| - 1 by 1
Class := ErrorClasses[ClassIndex]
ErrorIndices := find(ErrorType,Class)
if (ErrorIndices != -1)
select_obj (ErrorSegment, SelectedSegments, ErrorIndices + 1)
dev_set_color (‘red’)
dev_set_line_width (3)
if (Class != ‘no bead’)
gen_display_segments (SelectedSegments, LeftContour, RightContour, ErrorParts)
dev_display (ErrorParts)
else
dev_display (SelectedSegments)
endif
area_center_points_xld (SelectedSegments, Area, Row, Column)
for E := 0 to |ErrorIndices| - 1 by 1
disp_message (WindowHandle, ErrorIndices[E] + 1, ‘image’, Row[E], Column[E] - TextOffset, ‘white’, ‘red’)
TextOffset := 20 - TextOffset
endfor
endif
endfor
disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘white’, ‘red’)
disp_message (WindowHandle, [1:|ErrorType|] + ': ’ + ErrorType, ‘image’, 500, 500, ‘red’, ‘false’)
if (Index < NumImages)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
endif
endif
endfor

释放所有模板句柄
clear_bead_inspection_model (BeadInspectionModel)
clear_deformable_model (ModelID)

图示处理思路

1、使用符合要求图像,创建模板
在这里插入图片描述
2、读入新图像,矫正图像(图像仿射变换)

矫正前图像:
在这里插入图片描述
矫正后图像:
在这里插入图片描述
3、使用创建的模板检测点胶轨迹,得到结果
在这里插入图片描述

  • 博主简介:
  • 工业自动化上位机软件工程师、机器视觉算法工程师、运动控制算法工程师。目前从业于智能制造自动化行业。 博主邮箱:2296776525@qq.com
  • 帮忙点个赞吧。哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『转载』hadoop2.x常用端口、定义方法及默认端口

『转载』hadoop2.x常用端口、定义方法及默认端口1.问题导读 DataNode的http服务的端口、ipc服务的端口分别是哪个&#xff1f;NameNode的http服务的端口、ipc服务的端口分别是哪个&#xff1f;journalnode的http服务的端口、ipc服务的端口分别是哪个&#xff1f;ResourceManage…

宏定义和内联函数的学习

宏定义可以提高效率&#xff0c;但是宏不是函数。 预编译通过代码复制的方式代替函数调用&#xff0c;省去了诸如函数压栈等系统过程&#xff0c;从而提高了效率。但是由于宏定义仅仅是代码替换&#xff0c;所以引起很多问题。#define MAX(a&#xff0c;b) (a) > (b) ? (…

HAProxy介绍及配置文件详解

一、HAProxy简介 HAProxy是一个开源的、高性能的、基于TCP和HTTP应用的负载均衡软件&#xff0c;借助HAProxy可快速、可靠地提供基于TCP和HTTP应用的负载均衡解决方案 二、HAProxy优点 1) 可靠性和稳定性非常好&#xff0c;可以与硬件的F5相媲美2) 最高可以同时维护40000--5000…

unbutu安装搜狗输入法【转载】

安装支持库 sudo apt-get install fcitx libssh2-1 如果安装过程中出现错误失败&#xff0c;运行apt-get -f install 查看支持库是否安装成功 dpkg -l | grep fcitx dpkg -l | grep libssh 下载搜狗输入法 wget "http://pinyin.sogou.com/linux/download.php?flinux&…

深入理解halcon相机标定

目录相机标定简介深度说明1、相机标定参数介绍2、标定板详细介绍问题1&#xff1a;halcon是否只能使用halcon专用的标定板&#xff1f;问题2&#xff1a;halcon标定板如何生成&#xff1f;问题3&#xff1a;halcon标定板如何摆放&#xff0c;拍照数量有无限制&#xff1f;标定步…

halcon模板匹配干扰边缘消除办法(最硬核方式)

目录halcon手绘形状匹配模板手绘形状匹配模板主要算子解析draw_nurbs 绘制平滑曲线参数解释create_shape_model_xld 使用XLD轮廓创建模板参数解释实例演示与解析实例代码展示与解析运行过程与处理展示读入图像绘制模板使用绘制的XLD创建模板查找模板博主写作不容易&#xff0c;…

往文件中写数据--增量

有的功能需要打印日志文件&#xff0c;但是日志文件太多不方便查看&#xff0c;我就把信息输出到一个TXT文件中了。 下面就是我将要说的&#xff0c;往文件中写数据&#xff08;增量&#xff09;&#xff0c;代码很简单&#xff0c;也可以放在你的代码中运行一下&#xff1a; /…

SQL Server 数据库查找重复记录的几种方法

http://www.hanyu123.cn/html/c61/6790.html 一、查某一列&#xff08;或多列&#xff09;的重复值。&#xff08;只可以查出重复记录的值&#xff0c;不能查出整个记录的信息&#xff09; 例如:查找stuid&#xff0c;stuname重复的记录&#xff1a; select stuid&#xff0c;s…

xvid 数据编码和解码

由于视频开发的需求&#xff0c;封装xvid c调用接口&#xff0c;使之优雅易用 我已经对pc camera视频流(RGB)进行尝试&#xff0c;编码之后传输到远程主机进行解码回放&#xff0c;效果不错 具体的xvid的参数可以进一步优化&#xff0c;这里只是提供简单的范例 1. xvid 解码 …

第一个PowerShell脚本——PowerShell三分钟(九)

前面把基础知识讲了一遍&#xff0c;现在我们开始写一个最初级的脚本写脚本的工具有很多&#xff0c;有文本文档&#xff0c;有PowerShell ISE&#xff0c;PowerShell Studio等&#xff0c;这里选用系统自带的PowerShell ISE这里大家依然要记得以管理员身份运行&#xff0c;否则…

C#精准定时

文章目录简介StopWatch类例子1&#xff0c;用作延时例子2&#xff0c;用作算法耗时评估博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在自动化上位机编写过程中&#xff0c;上位机的定时应用在很多地方。对于工业上位机程序设计起…

联合体(union)和结构体(struct)的区别

1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同…

MVC架构简介及其测试策略

最近在WEB端测试工作中陷入了瓶颈&#xff0c;单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的&#xff0c;WEB自动化测试一时半会还没有什么进展&#xff0c;所以决定先学习一下网站用的MVC架构&#xff0c;跟着教程写了一个小网站&#xff0c;大概也找到了WEB测试…

prototype与_proto_

1、prototype与_proto_ ①prototype&#xff1a;是函数才有的属性&#xff0c;这个属性是一个指针。当一个构造函数被创建时&#xff0c;该构造函数会自动生成一个prototype指针&#xff0c;该指针指向构造函数的原型。这个原型会有其他实例共享的一些属性和方法。 ②_proto_&a…

Halcon求取矩形顶点坐标

文章目录简介Halcon源码博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在使用Halcon画矩形时&#xff0c;并不能得到矩形四角顶点坐标。但是我们可以通过数学计算得到矩形定点坐标的位置。 我们在计算过程中需要知道矩形的长轴与短…

kafka常用的shell命令

kafka常用shell命令&#xff1a; ------------------------------------ 1、创建topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 2、查看创建的topic bin/kafka-topics.sh --list --zookeeper localhost:…

python+pycharm+Django报错

报错&#xff1a; Unhandled exception in thread started by <function wrapper at 0x2d7e410>Traceback (most recent call last):File "/root/virtual_dir/wxwebapp_court_nositepkg/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, i…

C++多线程实例(_beginThreadex创建多线程)

C多线程&#xff08;二&#xff09;(_beginThreadex创建多线程) C/C Runtime 多线程函数一 简单实例&#xff08;来自codeprojct&#xff1a;http://www.codeproject.com/useritems/MultithreadingTutorial.asp&#xff09; 主线程创建2个线程t1和t2&#xff0c;创建时2个线程…

halcon求取区域顶点

文章目录简介Halcon源代码处理效果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 使用halcon求取顶点的方法。 Halcon源代码 read_image (Image1, 1.png)points_foerstner (Image1, 1, 2, 3, 200, 0.3, gauss, false, RowJunctions, …

从excel表中生成批量SQL,将数据录入到数据库中

excel表格中有许多数据&#xff0c;需要将数据导入数据库中&#xff0c;又不能一个一个手工录入&#xff0c;可以生成SQL&#xff0c;来批量操作。1.首先在第二行的H列&#xff0c;插入函数&#xff1a;CONCATENATE("INSERT INTO book (bookid, title, volume, author, u…