Halcon学习笔记之缺陷检测(二)教学教材
- 格式:doc
- 大小:26.00 KB
- 文档页数:5
1、介绍缺陷检测时机器视觉需求中最复杂难度较的一类需求。
究其原因,主要在发过程中首先要保证检测的稳定性和精度,又要实现缺陷检测的通用性,常见的缺陷:凹凸、污瑕疵、划痕、裂缝、伤痕、毛刺等等类型种类繁杂,缺陷检测不同于尺寸、、OCR识别等算法。
后者的应用场景比较单一,基本使用一些成熟的算法实现,最多增加一些定位、图像增强的算法,应用门槛相对较低,也比较容易成通用的产品或工具。
但缺陷检测主要针对工业场景,不同的行业的需求和重都有差别,这导致不同的行业所使用的缺陷算法迥然不同,这也注定了缺陷检测被工业场景非标定制所束缚。
随着缺陷检测要求的不断提高和技术的不断发展,机器学习和深度学习也成了缺陷领域一个不可或缺的技术难。
2、缺陷检测目前解决方案2.1 传统算法检测缺陷优:可根据需求和图像进行不同需求的发,可直观展示;缺:调试难度,图像变化后会导致检测算法不稳定进而需要反复调参,而且复杂缺陷误检的概率较,兼容性不好,很难成通用。
2.2 机器学习检测缺陷一般使用类似MLP的一些单层神经网络,对缺陷特征进行训练分类,该方法需要事先提取出缺陷部分,一般用来与传统分割法搭配使用,达到缺陷检测分类的。
2.3 深度学习检测缺陷优:通用性好,可以通过迭代训练模型不断提升某个产品的检测准确度。
缺:需要量的数据样本(缺陷样本),而且缺陷种类越多,特征性越模糊,检测精度要求越高,其需要的缺陷样本就越,而且深度学习中的缺陷样本需要人工去标注标签,样本越,手动标注的工作量也越,训练的周期也越长。
只适合产品产量且缺陷样本较多的案例。
2.4 深度学习检测缺陷(迁移学习方法)其操作方法如2.3,但同一行业或相似行业有量的缺陷样本库,如果深度训练网络具有泛化和迁移的特,可以在常规缺陷少的情况下,根据统一行业缺陷进行迁移学习训练,进而解决缺陷样本少的问题。
该方法感觉会成为后面工业领域检测瑕疵的一个趋势,但需要一些去收集各种行业的缺陷类型图片和训练的网络模型,并共享出来,然后后来者可以使用迁移学习的方法学习前人训练好的模型。
Halcon学习笔记之缺陷检测(二)例程:detect_indent_fft.hdev说明:这个程序展示了如何利用快速傅里叶变换(FFT)对塑料制品的表面进行目标(缺陷)的检测,大致分为三步:首先,我们用高斯滤波器构造一个合适的滤波器(将原图通过高斯滤波器滤波);然后,将原图和构造的滤波器进行快速傅里叶变换;最后,利用形态学算子将缺陷表示在滤波后的图片上(在缺陷上画圈)。
注:代码中绿色部分为个人理解和注释,其余为例程中原有代码*Initialization(初始化)dev_updata_off() //这一句包含如下三个算子://dev_updata_pc(‘off’) 关闭更新程序计数器//dev_updata_var(‘off’) 关闭更新变量窗口//dev_updata_window(‘off’) 关闭更新图像窗口(即通过命令来显示想要在图像窗口显示的图片)dev_close_window() //关闭活动的图像窗口read_image(Image,’plastics/plastics_01’) //载入图片//参数说明:为读入图片命名(Image)// 文件名(’plastics/plastics_01’)get_image_size(Image,Width,height) //获取图片的长宽;//参数说明:之前读入或生成的图片(Image)// 图片的宽(Width)// 图片的高(Height)dev_open_window(0,0,Width,Height,’Black’,WindowHandle) //打开一个新的图像窗口//参数说明:起始坐标(0,0)// 大小(Width,Height)// 背景颜色(’Black’)// 窗口句柄(WindowHandle)set_display_font (WindowHandle,14,’mono’,’ture’,’false’)//设置不依赖操作系统的字体//参数说明:窗口句柄(WindowHandle)// 字体大小(14)// 字体类型(’mono’)// 是否黑体(’ture’)// 是否倾斜(’false’)dev_set_draw(‘Margin’) //定义区域填充模式//参数说明:填充模式(’Margin’或者’Fill’)dev_set_line_width(3) //设置输出区域轮廓线的线宽//可以修改参数来看最后缺陷区域标示的区别dev_set_color(’red’) //设置一种或者多种输出颜色**Optimize the fft speed for the specific image size(根据指定图像大小进行fft速度最优化)optimize_rft_speed(Width,Height,’standard’) //对指定大小的图片的fft速度进行优化//参数说明:图片大小(Width,Height)// 优化模式(’standard’)**Construct a suitable filter by combining two Gaussian filters(结合两个高斯滤波器构造一*个合适的滤波器)Sigma1 := 10.0Sigma2 := 3.0 //定义两个常量gen_gauss_filter(GaussFilter1,Sigma1,Sigma1,0.0,’none’,’rft’,Width,Height)gen_gauss_filter(GaussFilter2,Sigma2,Sigma2,0.0,’none’,’rft’,Width,Height) //在频域生成两个高斯滤波器//参数说明:生成的高斯滤波器(GaussFilter)// 空域中高斯在主方向上的标准差(Sigma)// 空域中高斯在正交于主方向的方向上的标准差(Sigma)// 滤波器主方向的角度(0.0)// 滤波器的规范(’none’)// 直流项在频域的位置(’rft’)// 图片的大小(Width,Height)sub_image(GaussFilter1,GaussFilter2,Filter,1,0) //两图片相减(灰度)//sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : )//g' := (g1- g2) * Mult + Add//以上为函数原型以及运算公式**Process the images iteratively(对图像进行迭代运算)NumImages := 11For Index := 1 to NumImages by 1 //for循环从1到NumImages,步长为1**Read an image and convert it to gray valuesread_image(Image,’plastics/plastics_’+Index$’02’)rgb1_to_gray(Image,Image) //将原图转化为灰度图,第一个参数为原图*Perform the convolution in the frequency domainrft_generic(Image,ImageFFT,’to_freq’,’none’,’complex’,Width)//对计算一幅图片实部进行快速傅里叶变换 //参数说明:输入的图片(Image) // 傅里叶变换后输出的图片(ImageFFT) // 变换方向(’to_freq’或’from_freq’) //变换因子的规范(’none’) // 输出图片的数据类型(’complex’) //图片的宽(Width)convol_fft(ImageFFT,Filter,ImageConvol) //对图片用一个滤波器在频域进行卷积运算 //参数说明:输入的图片(ImageFFT) // 频域滤波器(Filter) //运算后输出的结果 rft_generic(ImageConcol,ImageFiltered,’from_freq’,’n’,’real’,Width) //对滤波后的图片进行傅里叶反变换**Process the filtered imagegray_range_rect(ImageFiltered,ImageResult,10,10)//用一个矩形掩膜计算像素点的灰度范围 //参数说明:输入的图片(ImageFiltered) // 输出的灰度范围图(ImageResult) // 矩形掩膜大小(10,10)min_max_rect(ImageResult,ImageResult,0,Min,Max,Range)//判断区域内灰度值的最大和最小值 //参数说明:待分析图片区域(ImageResult) // 图片(ImageResult)// 被去除的直方图两边像素点所// 占总像素数的百分比(0)// 得到的最小值最大值及灰度值范围(Min,Max,Range)threshold(ImageResult,RegionDynThresh,max([5.55,Max*0.8]),255)//利用全局阈值对图像进行分割 //参数说明:输入的图片(ImageResult) // 分割后得到的区域(RegionDynThresh) // 阈值(max([5.55,Max*0.8]),255)// 公式:MinGray <= g <= MaxGrayconnection(RegionDynThresh,ConnectedRegions) //计算区域内的连通部分 //参数说明:输入的图片(RegionDynThresh) // 得到的连通区域(ConnectedRegions)select_shape (ConnectedRegions,SelectedRegions,’area’,’and’,4,99999)//根据指定的形态特征选择区域//参数说明:输入的图片(ConnectedRegions)// 满足条件的区域(SelectedRegions)// 将要计算的形态特征(’area’)// 独立特征间的连接关系(’and’)// 特征的最小限制(4)// 特征的最大限制(99999)union1(SelectedRegions,RegionUnion) //返回包含所有区域的集合 //参数说明:包含所有区域的待计算区域的图片(tedRegions) // 所有输入区域合(RegionUnion)closeing_circle(RegionUnion,RegionClosing,10)//用一个圆圈来封闭一个区域 //参数说明:将要被封闭的区域(RegionUnion) // 被封闭的区域(RegionClosing)// 圆圈的半径(10) connection(RegionClosing,ConnectedRegions1)select_shape(ConnectedRegions1,SelectedRegions1,’area’,’and’,10,99999)area_center(SelectedRegions1,Area,Row,Column) //计算区域的面积以及中心位置//参数说明:待计算的区域(SelectedRegions1) // 区域的面积(Area) // 区域中心的行(Row) // 区域中心的列(Column)**Display the resultsdev_display(Image) //显示原图 Number := |Area| //将区域面积赋给Number用于后面检查是否存在缺陷 if(Number)gen_circle_contour_xld(ContCircle,Row,Column,gen_tuple_const(Number,30),gen_tuple_const(Number,0), gen_tuple_const(Number,rad(360)),’positive’,1)//构造一个与设定的圆弧或圆相一致的边界//参数说明:生成的边界(ContCircle)// 圆弧或圆的中心坐标(Row,Cloumn)// 圆弧或圆的半径(gen_tuple_const(Number,30))// 圆弧或圆的起始角度(gen_tuple_const(Number,0))// 圆弧或圆的结束角度(gen_tuple_const(Number,rad(360)))// 不明白是什么意思// 相邻两点间的距离(1)ResultMessage := [‘Not OK’,Number + ‘defect(s) found’]Color := [‘red’,’black’]dev_display(ContCircle) elseResultMessage := ‘OK’Color := ‘forest green’endifdisp_message(WindowHandle,ResultMessage,’window’,12,12,Color,’ture’)if(Index#NumImages)disp_continue_message(WindowHandle,’black’,’ture’)stop()endifendfor算法讲解:在实际的表面缺陷检测系统中,针对的检测表面很多是具有一定纹理的比如:布匹、皮革、塑料等,针对这一类表面的检测就不能单纯依靠帧差或者背景差来完成,因为背景的纹理不可能和当前图像的纹理完全相同。
halcon 缺陷检测处理流程Halcon缺陷检测处理流程引言:缺陷检测是工业生产中非常重要的环节,它可以帮助制造商在生产过程中及时发现并处理产品中的缺陷,提高产品质量。
Halcon是一款强大的机器视觉软件,提供了丰富的功能和工具来进行缺陷检测。
本文将介绍Halcon缺陷检测处理流程,帮助读者理解并应用该软件进行缺陷检测。
一、图像采集与预处理:在进行缺陷检测之前,首先需要采集产品的图像。
Halcon支持多种图像采集设备,例如相机、扫描仪等,并提供了丰富的接口和驱动程序来与这些设备进行连接。
在图像采集之后,还需要对图像进行预处理,以提高后续缺陷检测的准确性和效率。
预处理包括图像去噪、灰度调整、滤波等操作,可以根据具体情况选择适当的方法进行处理。
二、特征提取与分割:在进行缺陷检测之前,需要对图像中的缺陷进行分割和提取。
Halcon提供了多种特征提取和分割的工具和算法,例如边缘检测、形状匹配、颜色分割等。
这些工具和算法可以帮助用户准确地提取出图像中的缺陷,并进行分类和分析。
三、缺陷检测与分类:在特征提取和分割之后,就可以进行缺陷检测和分类了。
Halcon提供了多种缺陷检测和分类的方法和算法,例如模板匹配、机器学习等。
用户可以根据具体需求选择适当的方法进行缺陷检测和分类。
在进行缺陷检测和分类时,需要设置合适的参数和阈值,以确保检测结果的准确性和稳定性。
四、缺陷定位与标记:在进行缺陷检测之后,需要对检测到的缺陷进行定位和标记。
Halcon提供了多种定位和标记的方法和工具,例如边缘定位、区域标记等。
这些方法和工具可以帮助用户准确地定位和标记图像中的缺陷,便于后续处理和修复。
五、缺陷分析与统计:在进行缺陷检测之后,可以对检测结果进行分析和统计。
Halcon提供了多种分析和统计的工具和函数,例如缺陷数量统计、缺陷大小分析等。
这些工具和函数可以帮助用户对缺陷进行分析和评估,以改进生产工艺和提高产品质量。
六、结果显示与输出:在进行缺陷检测之后,需要将检测结果显示和输出。
2018年第1期信息通信2018 (总第181 期)INFORMATION & COMMUNICATIONS (Sum. N o 181)基于HALCON的标签模切缺陷的检测陈萍(北京信息科技大学自动化学院,北京101192)摘要:针对标签模切的凸起缺陷,采用模板对比检测方法中存在的误报和漏报的问题,文章提出了利用图像形态学处理的 方法和通过提取轮靡的方法对现有的视觉检测算子改进以提升检测效果。
使用H A L C O N软件实现模板比对、形态学和 提取亚像素轮廣的三种检测的方法,并进行误报、漏报和算子处理速度进行比较。
通过样本标签测试结果说明,针对样本 中的凸起缺陷,改进后的方法误报和漏报为0,正确率较高。
此方法对于规则物体边缘凸起缺陷的检测有较高的参考价值。
关键词:标签检测;图像处理;机器视觉;缺陷检测中囹分类号:TP27 文献标识码:A文章编号:1673-1131( 2018 )01-0116-04Detection and implementation of die cutting defects based on HALCONChen Ping(School of A utomation,Beijing lofarmation Science&Technology U n i v ersi ty,Beijing,100192) Abstract:For the bump d e f e c t s of t h e l a b e l7s d i e c u t t i n g,t h e method using templates comparison o f t e n l e a d s t o f a l s e p o s i t i v e s and&lse ne gatives,and the method of u sing image moiphological processing and the method of e x t r a c t i n g contour a r e put f o rward i n t h i s paper t o Improve t h e e x i s t i n g v i s u a l i n s p e c t i o n effect^nd use H A L C O N soft ware t o accomplish t h e s e t h r e e v i s u a li n s p e c t i o n methods of templa te matching,morphological processing and e x t r a c t i o n of sub p i x e l contour,and compare the f a l s enegatives,f a l s e p o s i t i v e s and the pro ce ssing speed of t h r e e methods.Through t h e sample7s t e s t r e s u l t s f o r convex d e f e c t s i n t h e l a b e l s,f a l s e p o s i t i v e s r a t e and f a l s e n egatives r a t e has improved t o be0. The c o r r e c t r a t e i s h i g h e r.T h i s method of m orphological proce ssing has a high r ef er en ce value f a r t h e d e t e c t i o n of d e f e c t s i n t he edge of t h e r e g u l a r o b j e c t.Keywords:Label E>etection;l i n ag e Processing;Machine^s io n;Defect Detection0引言印刷业的标签大部分用来标识产品相关说明,且一般背 面自带胶。
一、边缘提取1、设置ROI兴趣区域2、快速二值化,并连接相邻区域。
这样做的目的是进一步减少目标区域,通过二值化将目标区域大概轮廓提取出来3、提取最接近目标区域的轮廓.常用函数有boundary,gen_contour_region_xld4、根据自己的需求提取需要的初步轮廓5、将初步提取的初步轮廓进行膨胀操作6、将膨胀后的区域和原图进行减操作(在这步之前有可能需要对原图进行高斯滤波)。
这样就能得到只有边缘的真实图像7、用canny或其他算子(根据需要)提取亚像素轮廓,一般使用edges_sub_pix函数8、处理和计算得到真实的边缘XLD后你可能需要进一步处理得到你想要的线、弧等。
你可能用到的函数segment_contours_xld(分割)union_collinear_contours_xld(联合相邻或相同角度直线)select_contours_xld(提取想要的轮廓)union_cocircular_contours_xld(联合相同圆)等等得到轮廓后如果你不知道怎么处理后得到你想要的东西(线、弧、圆、角、矩形)你都可以将轮廓转化为点,然后用点集合来拟合任何你想要的东西。
二、BLOB分析检测(前面一篇有详细讲解,本骗只讲思路)1、应用ROI,可以使Blob分析加速。
2、匹配ROI区域或图像,详将GUIDEIIB以形状为基础的匹配。
3、校正图像<经常用来去除镜头畸变或把图像转换到参考点视角,如双目视觉时的图像校正>4、图像前处理5、引用分割参数6、分割图像7、区域处理8、特征提取9、把提取的结果转换到世界坐标中10、结果可视化。
三、赃物检测1、得到两个不同高斯标准差的高斯积卷2、对原始图像进行傅里叶变换'to_fre'3、用之前的积卷对图像做积卷滤波4、傅里叶反变换‘from_fre’。
halcon——缺陷检测常⽤⽅法总结(光度⽴体)引⾔机器视觉中缺陷检测分为⼀下⼏种:blob分析+特征模板匹配(定位)+差分光度⽴体特征训练测量拟合频域+空间域结合:深度学习前⼀篇总结了频域与空间域的结合使⽤,本篇就光度⽴体的缺陷检测做⼀个总结。
光度⽴体在⼯业领域,表⾯检测是⼀个⾮常⼴泛的应⽤领域。
在halcon中,使⽤增强的光度⽴体视觉⽅法,三维表⾯检测被加强。
利⽤阴影可⽅便快速的检测物体表⾯的缺⼝或凹痕。
使⽤光度⽴体视觉⽅法可在复杂图像中轻松找到表⾯缺陷。
适⽤场景:光度⽴体法可以看作是2.5维,适⽤于检测⾦属物料上⾯的凹凸特征。
函数原理:1.通过photometric_stereo算⼦获得表⾯梯度图像,该算⼦可以得到表⾯梯度图像和反照率图像。
需要输⼊多张从不同⾓度照明所得到的图像。
2.通过derivate_vector_field算⼦获得⾼斯(平均)曲率图像,该算⼦中需要输⼊表⾯梯度图像。
光源:光度⽴体法不需要特殊的光源,只需要从不同的⾓度打光⽽已。
1 光度⽴体法的典型应⽤:光度⽴体法的典型应⽤是检测物体表⾯微⼩变化,例如,受打光⽅向影响的缺陷。
⽐如⾮平⾯的打印检测(个⼈理解:普通打光⽅式受光线影响特征成像不理想,可以通过光度⽴体法检测)。
值得注意的是:光度⽴体法不适⽤于绝对⾼度的重建,也就是说,它不能替代传统的3D重建算法,如对焦测距和激光三⾓测量。
2 光度⽴体法的局限性:光度⽴体法基于Woodham算法。
因此:⼀⽅⾯假定相机是⽆畸变成像,也就是说必须使⽤远⼼镜头或者长焦镜头。
另⼀⽅⾯假定每⼀个光源发射的光束都是平⾏且均匀的,也就是说必须使⽤具有均匀强度的远⼼照明光源,或者使⽤远距离的点光源代替。
此外,物体必须具有朗伯反射特性,即它必须以漫反射的⽅式反射⼊射光。
有镜⾯反射的物体或者区域(镜⼦或者光滑的表⾯)不能使⽤此⽅法,会得到⼀个错误的结果。
3 采集图像设置:带有远⼼镜头的相机必须与被测物体表⾯垂直安装,在采集多幅图像时,⼀定要保证相机和物体不被移动。
halcon——缺陷检测常⽤⽅法总结(模板匹配(定位)+差分)引⾔机器视觉中缺陷检测分为⼀下⼏种:blob分析+特征模板匹配(定位)+差分光度⽴体:特征训练测量拟合频域+空间域结合:深度学习本篇主要总结⼀下缺陷检测中的定位+差分的⽅法。
即⽤形状匹配,局部变形匹配去定位然后⽤差异模型去检测缺陷。
模板匹配(定位)+差分整体思路(形状匹配):1. 先定位模板区域后,求得模板区域的坐标,创建物品的形状模板create_shape_model,注意把模板的旋转⾓度改为rad(0)和rad(360)。
2. 匹配模板find_shape_model时,由于物品的缺陷使形状有局部的改变,所以要把MinScore设置⼩⼀点,否则匹配不到模板。
并求得匹配项的坐标。
3. 关键的⼀步,将模板区域仿射变换到匹配成功的区域。
由于差集运算是在相同的区域内作⽤的,所以必须把模板区域转换到匹配项的区域。
4. 之后求差集,根据差集部分的⾯积判断该物品是否有缺陷。
模板匹配(定位)+差分的⽅法主要⽤来检测物品损坏,凸起,破洞,缺失,以及质量检测等。
halcon例程分析:1,印刷质量缺陷检测(print_check.hdev)该例程⽤到了差异模型,将⼀个或多个图像同⼀个理想图像做对⽐,去找到明显的不同。
进⽽鉴定出有缺陷的物体。
差异模型的优势是可以直接通过它们的灰度值做⽐较,并且通过差异图像,⽐较可以被空间地加权。
变化模型检测缺陷的整体思路:1. create_variation_model —— 创建⼀个差异模型2. get_variation_model —— 获得差异模型3. train_variation_model —— 训练差异模型4. prepare_variation_model —— 准备差异模型5. compare_variation_model —— ⽐较模型与实例6. clear_variation_model —— 清除差异模型dev_update_off ()* 选择第1张图像创建形状模板read_image (Image, 'pen/pen-01')get_image_size (Image, Width, Height)dev_close_window ()dev_open_window (0, 0, Width, Height, 'black', WindowHandle)set_display_font (WindowHandle, 16, 'mono', 'true', 'false')dev_set_color ('red')dev_display (Image)* 把我感兴趣的区域抠出来,原则上范围越⼩越好,因为这样创建模板时⼲扰会少很多threshold (Image, Region, 100, 255)fill_up (Region, RegionFillUp)difference (RegionFillUp, Region, RegionDifference)shape_trans (RegionDifference, RegionTrans, 'convex')dilation_circle (RegionTrans, RegionDilation, 8.5)reduce_domain (Image, RegionDilation, ImageReduced)inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, 20)gen_contours_skeleton_xld (ModelRegions, Model, 1, 'filter')* 获得抠图区域的中⼼,这是参考点area_center (RegionDilation, Area, RowRef, ColumnRef)* 创建形状模板create_shape_model (ImageReduced, 5, rad(-10), rad(20), 'auto', 'none', 'use_polarity', 20, 10, ShapeModelID)* 创建变化模型(⽤于和缺陷⽐较)create_variation_model (Width, Height, 'byte', 'standard', VariationModelID)* ⽂件夹中前15张图⽚是质量良好的,可以⽤来训练模板for I := 1 to 15 by 1read_image (Image, 'pen/pen-' + I$'02d')* 先寻找模板的实例find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)if (|Score| == 1)if (|Score| == 1)* 使⽤仿射变换,将当前图像平移旋转到与模板图像重合,注意是当前图像转向模板图像vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')* 训练差异模型train_variation_model (ImageTrans, VariationModelID)dev_display (ImageTrans)dev_display (Model)endifendfor* 获得差异模型get_variation_model (MeanImage, VarImage, VariationModelID)* 做检测之前可以先⽤下⾯这个算⼦对可变模型进⾏设参,这是⼀个经验值,需要调试者调整prepare_variation_model (VariationModelID, 20, 3)dev_set_draw ('margin')NumImages := 30* 可变模板训练完成后,我们终于可以进⼊主题,马上对所有图像进⾏缺陷检测,思想就是差分for I := 1 to 30 by 1read_image (Image, 'pen/pen-' + I$'02d')* 要注意做差分的两幅图像分辨率相同,当然也需要通过仿射变换把待检测的图像转到与模板图像重合* 先寻找模板的实例find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score) if (|Score| == 1)* 使⽤仿射变换,将当前图像平移旋转到与模板图像重合,注意是当前图像转向模板图像vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')* 抠图reduce_domain (ImageTrans, RegionDilation, ImageReduced)* 差分(就是检查两幅图像相减,剩下的区域就是不同的地⽅了,与模板图像不同的地⽅就是缺陷)*这⾥可不能⽤difference做差分啊,halcon为变形模板提供了专门的差分算⼦:compare_variation_modelcompare_variation_model (ImageReduced, RegionDiff, VariationModelID)connection (RegionDiff, ConnectedRegions)* 特征选择:⽤⼀些特征来判断这幅图像印刷是否有缺陷,这⾥使⽤⾯积* 其实可以考虑利⽤区域⾯积的⼤⼩来判断缺陷的严重程度,这⾥就不过多讨论了select_shape (ConnectedRegions, RegionsError, 'area', 'and', 20, 1000000)count_obj (RegionsError, NumError)dev_clear_window ()dev_display (ImageTrans)dev_set_color ('red')dev_display (RegionsError)set_tposition (WindowHandle, 20, 20)if (NumError == 0)dev_set_color ('green')write_string (WindowHandle, 'Clip OK')elsedev_set_color ('red')write_string (WindowHandle, 'Clip not OK')endifendifif (I < NumImages)disp_continue_message (WindowHandle, 'black', 'true')stop ()endifendfor* 结语:如果发现前⾯作为训练变形模板的良好图像也被判定为NG,* 可以调整prepare_variation_model参数* 或者调整select_shape特征筛选的标准相关算⼦分析:create_variation_model(创建⼀个差异模型)create_variation_model(Width, Height, Type, Mode ,ModelID)//创建⼀个ID为ModelID,宽为Width,⾼为Height,类型为Type的差异模型参数参数Mode决定了创建标准图像和相应的变化图像的⽅法。
第39卷第2期2021年3月佛山科学技术学院学报(自然科学版)Journal of Foshan University(Natural Sciences Edition)Vol.39No.2Mar.2021文章编号:1008-0171(2021)02-0028-05基于Halcon的圆形陶瓷片表面缺陷检测方法贺潇苏彩红仔,詹宁宙2,林军帆-梁智宇1(1.佛山科学技术学院机电工程与自动化学院,广东佛山528000;2.佛山精视自动化科技有限公司,广东佛山528000)摘要:针对圆形陶瓷片的产品特性以及厂家检测的需要,设计了一种基于Halcon平台的表面缺陷分区检测算法。
通过前期预处理中的灰度化、图像增强处理以及ROI的选取后,再针对不同缺陷分别采用阈值分割、极坐标转换及边缘提取等方法获取产品缺陷区域并进行检测。
实验结果证明本检测算法具有较高的准确性,并能较好地满足实际检测要求。
关键词:缺陷检测;Halcon;阈值分割;边缘提取中图分类号:TP391.41;TQ174文献标志码:A圆形陶瓷片在生产过程中,由于生产工艺和生产环境的影响,会出现一定比例的缺陷产品。
如果不能及时筛选出来,对于产品后续的使用会存在一定的安全隐患。
目前针对圆形陶瓷片的缺陷筛选主要是人工目检,而人工目检存在检测效率低、人工成本高等缺点。
近年来,随着图像处理技术和机器视觉技术的不断发展,出现了越来越多的机器视觉检测来代替人工目检的情况。
Halcon是由德国MVTec公司研发的机器视觉图像处理软件,提供了全面的图像处理函数库。
本文基于Halcon算法平台,主要研究了圆形陶瓷片表面的气泡、斑点、粉尘和炸裂等缺陷的图像处理算法。
1缺陷分类及检测流程圆形陶瓷片在生产线上通过面阵CCD进行图像采集,在Halcon软件上进行处理、分析和检测[1]o 圆形陶瓷片的表面缺陷主要包括气泡、斑点、粉尘和炸裂4种,缺陷特点及分类如表1所示。
表1缺陷分类及特点缺陷类型缺陷出现位置缺陷特点气泡外环白色缺损,区域图像灰度比周围背景图像大10以上斑点大内环黑色缺损,区域图像灰度比周围背景图像小15以上粉尘大内环边缘黑色缺陷,区域内连续多个面积大于10的黑色缺陷炸裂内孔边缘白色缺损,内孔边缘出现的裂缝,区域裂缝长度大于5圆形陶瓷片缺陷检测流程如图1所示,检测步骤主要包括:1)利用图像灰度化和增强技术,将原始图片进行预处理;2)利用阈值分割的方法提取图片中各类缺陷对应的感兴趣区域ROI(Region of收稿日期:2020-06-10基金项目:广东省普通高校科研资助项目(2019KZDZX1034)作者简介:贺潇(1996-),男,湖南南县人,佛山科学技术学院硕士研究生。
第37卷第1期湖南理工学院学报(自然科学版)V ol. 37 No. 1 2024年3月 Journal of Hunan Institute of Science and Technology (Natural Sciences) Mar. 2024基于Halcon的手机背板表面缺陷快速检测方法朱志鹏, 陈腾飞, 廖杜杰, 张国云, 赵林(三维重建与智能应用技术湖南省工程研究中心, 湖南岳阳 414006;湖南理工学院信息科学与工程学院, 湖南岳阳 414006)摘要:针对人工检测手机背板表面缺陷效率低、成本高等问题, 提出一种基于Halcon的手机背板表面缺陷检测方法. 该方法可快速定位并校正光照不均、位置偏差等成像不一的背板图像, 同时运用二进制大型对象分析、形态学处理和模板匹配等算法实现对手机背板表面缺陷图像的检测与分类. 针对logo区域和非logo区域, 该检测系统采用不同的策略来检测缺陷. 缺陷分类环节利用Halcon中的分类工具, 结合事先定义的特征集合, 根据其形状、大小和颜色等特征进行分类, 以便后续的品质监控和反馈. 一方面对120张缺陷图片进行检测, 检出113张缺陷图片, 单张图片平均耗时约500 ms, 检出率达94%以上; 另一方面对800张同样条件下的无缺陷图片进行测试, 检出25张误判的图片, 即误判率约3%. 实验表明, 该方法具有较高的准确性和实用性, 相较于传统的人工检测, 可大幅度提升生产效率和检测精度, 有效控制企业人力成本. 该方法已在工业生产线实际应用.关键词:Halcon; 缺陷检测; 手机背板; 图像处理中图分类号: TP391 文章编号: 1672-5298(2024)01-0020-07Surface Defect Detection Rapid Method ofMobile Phone Backplane Based on Halcon ZHU Zhipeng, CHEN Tengfei, LIAO Dujie, ZHANG Guoyun, ZHAO Lin (Hunan Engineering Research Center of 3D Reconstruction and Intelligent Application Technology, Yueyang 414006, China;School of Information Science and Engineering, Hunan Institute of Science and Technology, Yueyang 414006, China) Abstract:Aiming at the problems of low efficiency and high cost of manually detecting defects on the surface of mobile phone backplane, a method based on Halcon was proposed for surface defects detection of mobile phone backplane. The method can quickly locate and correct the backplane images with different images such as uneven illumination and position deviation. At the same time, the algorithm of binary large object analysis, morphological processing and template matching was used to detect and classify the surface defect images of mobile phone backplane. For logo area and non-logo area, the detection system adopts different strategies to detect defects. The defect classification process utilizes the classification tool in Halcon, combined with the predefined feature set, according to its shape, size, color and other characteristics, so as to facilitate subsequent quality monitoring and feedback. On one hand, through the detection experiment of 120 defect diagrams, 113 defect diagrams were detected, and the average time of a single image was about 500 ms, and the detection rate was more than 94%. On the other hand, 800 non-defect pictures were tested under the same conditions, and 25 misjudgments were detected, that is, the misjudgment rate was 3%. The experiment shows that the method has high accuracy and practicability, compared with the traditional manual detection, can greatly improve the production efficiency and detection accuracy, and effectively control the labor cost of enterprises. At the same time, the method has been applied in industrial production lines.Key words: Halcon; defect detection; mobile phone backplane; image processing0 引言随着移动通信技术的快速发展, 智能手机已成为现代社会不可或缺的一部分. 而手机背板作为智能手机的外壳, 不仅承担着保护内部电路和组件的功能, 同时也具备提升美观和质感的重要作用. 然而, 在手机背板的制造过程中, 由于材料、工艺等方面的不确定因素, 不可避免地会产生各种各样的缺陷[1]. 准确、高效地检测手机背板的缺陷, 对于保证产品质量、提高生产效率以及增强品牌竞争力具有重要意义. 而Halcon作为一种先进的机器视觉软件系统, 它提供了大量的视觉处理函数, 支持各种图像采集、处理、收稿日期: 2023-02-15基金项目: 湖南省研究生科研创新项目(CX20221237, CX20221212)作者简介: 朱志鹏, 男, 硕士研究生. 主要研究方向: 机器视觉、人工智能通信作者: 赵林, 男, 博士, 副教授. 主要研究方向: 图像信息处理、智能控制第1期 朱志鹏, 等: 基于Halcon 的手机背板表面缺陷快速检测方法 21 分析、识别和检测任务[2].传统的手机背板表面缺陷检测方法主要是人工检测, 该方法耗时耗力且效率低下, 无法满足大规模生产的质量控制需求[3]. 此外, 人工检测容易受到操作人员主观判断的影响, 导致检测结果的不一致性和可重复性差[4]. 随着计算机视觉技术、图像处理技术以及人工智能的发展, 自动化视觉检测系统能够提供一个高效、准确并且客观的解决方案, 以确保产品质量和提升生产效率[5].本文提出一种基于Halcon 的手机背板表面缺陷检测方法. 通过结合高分辨率成像技术和先进的图像处理算法, 尝试解决实际工业生产线上的手机背板缺陷快速检测问题. 先提出包含图像预处理、特征提取、模板匹配以及缺陷分类等多个步骤的综合解决方案[6], 然后在此基础上开展一系列实验, 验证所提方法的有效性和实用性, 并探讨在实际应用时的潜在挑战及可能的解决策略.1 手机背板表面缺陷检测系统总体方案根据手机背板表面缺陷快速检测的需求构建一个综合性系统, 一方面包括硬件部分对图像的获取和采集, 另一方面包括软件部分对图像的处理以及对缺陷的识别和分类. 旨在通过优化硬件配置和软件算法, 实现自动化的高性能缺陷检测, 从而为手机背板检测提供一个可靠的方案.1.1 机械硬件结构手机背板缺陷检测机械结构包括提取背板的吸盘及气缸、工业相机、光源、工控机、图像采集模块、图像处理模块等. 当机台启动时, 载有手机背板的托盘被送入机台指定位置, 吸盘提取背板并放置在相机下方进行图像采集, 通过相机、光源、传感器等图像采集单元将图像信号传输到工控机上[7]. 工控机上的图像处理模块利用Halcon 中的图像处理算法对背板进行图像定位、图像增强等预处理操作, 然后根据预定的手机背板表面缺陷检测算法判断待检品是否存在缺陷, 最后由运控模块将检测出的OK 、NG 产品分类放置. 手机背板缺陷检测系统如图1所示.1.2 图像处理软件结合VS 2022集成开发环境, 使用图像处理开源库研发, 实现基于Halcon 的手机背板表面缺陷快速检测. Halcon 的开发接口支持几乎所有的工业相机和框架抓取卡, 功能覆盖数学运算、图像滤波、形态学分析、图像校正、颜色处理和几何及模式识别等计算任务. 手机背板的表面缺陷主要包括脏污、划伤、腐蚀点、水渍等. 手机背板的常见表面缺陷如图2所示.图像采集模块载有手机背板的托盘图1 手机背板缺陷检测系统 图2 手机背板常见表面缺陷手机背板缺陷检测流程如图3所示. 检测的主要步骤包括: (1)图像采集模块采集图像传输至图像处理模块; (2)运用图像定位、通道转换、图像增强和感兴趣区域(Region Of Interest, ROI)提取进行图像预处理;(3)将手机背板图像非logo 区域和logo 区域分开; (4)对不同区域进行检测, 并根据各缺陷特征将识别的缺22 湖南理工学院学报(自然科学版) 第37卷进而提取到特定特征点(角点、边缘、logo等)的位置信息, 后续在对齐的图像上应用相应的缺陷检测算法. 图4为部分特征点提取结果展示.2.2 通道转化现场缺陷检测机台CCD相机采集的图像为4096像素×4096像素RGB三通道的彩色图像. 为简化后续图像处理与分析, 并降低计算复杂度, 可将三通道图像转换成单通道图像, 对于特定问题只提取某个通道作为灰度图像. 该环节应尽可能防止手机背板部分颜色信息的丢失, 故按照Halcon中decompose3算子将输入的RGB图像分解为红、绿、蓝三个通道的图像. 图5为通道转换后的相应效果图. 在RGB图像中, 每个像素的颜色由红、绿、蓝三个通道的亮度值确定, 其亮度值范围为0~255, 0最暗, 255最亮. decompose3算子将每个像素的RGB值分别存储在三个通道图像中, 将RGB图像转换为三个独立的8位灰度图像, 每个灰度图像对应一个通道. 分解后的图像, 可根据后期实际项目情况达到特定的图像效果和任务需求.输入:Image输出:Image1输出:Image2输出:Image3图4 图像特征点区域及其坐标信息图5 通道转换效果2.3 图像增强实际检测流水线中采集的手机背板图像数量众多, 且图像易受外界传感器、环境或者传输影响, 带来图3 手机背板缺陷检测流程第1期 朱志鹏, 等: 基于Halcon 的手机背板表面缺陷快速检测方法 23 的变化具有不确定性, 因此成像的统一性是缺陷检测中不可忽视的重要问题之一. 图像增强的作用是改善图像的质量、对比度、清晰度或者细节等以突出图像中的一些重要的缺陷特征, 同时弱化非必要的图像信息. 以腐蚀点缺陷特征为例, 使用scale_image 算子调整图像的对比度, 调整前后对比如图6所示.scale_image 算子根据设定的目标值对输入的手机背板图像像素值进行线性映射, 即scale max min255factor ,value value =- (1) scale min offset factor value ,=-⨯ (2)new scale pixel factor pixel offset.=⨯+ (3)其中max value 、min value 分别是输入图像像素值的最大值和最小值, scale factor 、offset 分别是像素映射的斜率和偏移, new pixel 是线性映射后的新像素值. 通过增强图像, 可以使采集到的图像更易于观察、分析和处理, 以适应不同的要求和环境, 进而提高缺陷检测算法的准确性和效果.2.4 感兴趣区域提取受工业环境复杂性等影响, 实际采集到的手机背板图像有较多非必要背景, 还需将背板图像中的相机孔、logo 区域分离开, 即对感兴趣区域(ROI)进行提取, 以便进行后续的缺陷检测工作. 图7为手机背板部分点位的感兴趣区域提取过程效果图.通过ROI 提取可以减少图像处理的时间和计算量, 进而提高检测算法的效率和性能. 本文数据集单张图片规格为4096像素×4096像素, 占据内存48 MB, 每一组图像(包含可采集到手机背板全部信息的8个点位图像)占内存384 MB, 且每次至少检测100组数据, 因此缺陷检测的数据集属于大型数据集.调整前调整后原图分离背景分离相机孔、logo 图6 scale_image 算子调整图像对比度效果图7 ROI 提取效果 3 手机背板表面缺陷检测智能手机在设计的时候会划分不同的功能和装饰区域, 其中之一是logo 区域. 这个区域通常包括特定图案及文字, 往往会采用不同于手机背板其余区域的材料和颜色等. 由于这种划分, 手机背板的缺陷检测需要能区分这两个区域, 即logo 区域和非logo 区域. 因此, 需根据每个区域的特定性质实施不同的检测策略.3.1 logo 区域检测手机背板上的logo 和小字体通常设计为尺寸、形状固定, 具有高度标准化[8], 模板匹配算法能够轻松识别出其在不同图片中的相似区域. 这种一致性降低了算法出错的可能性, 提高了检测的准确性. 由于logo 等字体区域包含大量可区分的特征信息, 即使存在噪声或图像质量的轻微变化, 模板匹配技术通常也能可靠执行. 本文采用最小二乘法模板匹配遍历待检测图像的每个像素点, 将待检测图像与模板图像进行匹配, 通过对比计算两者对应位置的匹配得分来确定它们之间的差异, 匹配效果如图8所示. 设置一24 湖南理工学院学报(自然科学版) 第37卷个分数阈值, 当匹配得分超过设定的阈值时, 可以认为该位置与模板匹配良好, 从而达到对logo文字区域的检测效果.模板图待检测图8 手机背板logo区域检测3.2 非logo区域检测(1) 缺陷初筛对于非logo区域缺陷的检测, 先读取图像并将其转换为灰度图像, 水平和垂直方向遍历ROI图像的每一个像素点, 根据需求筛选出特定的灰度值. 记录所选灰度值像素点的位置信息, 并绘制出对应的散点图, 通过观察散点图来初步识别缺陷. 如果特定灰度值与缺陷特性相关, 那么这些灰度值的像素点的聚集可能就暗示着潜在缺陷的存在. 同理, 特定灰度值可换成其他缺陷相关的特征信息. 图9为背板ROI图像缺陷初筛灰度散点分布.图9 背板ROI图像缺陷初筛灰度散点分布(2) 缺陷检测初筛之后, 基于Halcon机器视觉软件平台, 对经过预处理的手机背板表面缺陷图像进行二进制大型对象(Blob)分析处理来细化缺陷检测, 提取出脏污、划伤、亮斑、腐蚀点等缺陷特征, 然后使用select_shape( )算子基于面积、周长、圆度、长短轴比、平均灰度等特征将识别出的非缺陷特征部分排除掉. 再采用area_center( )和intensity( )算子计算剩余区域的中心位置、面积和灰度值平均强度、标准偏差, 其中intensity( )算子可分析区域的纹理和一致性. 这种综合利用面积、位置和灰度信息的方法极大提高了对真第1期 朱志鹏, 等: 基于Halcon 的手机背板表面缺陷快速检测方法 25 实缺陷的识别能力. 最后, 通过对剩余候选区域的细致分析, 能够进一步筛选出真正的缺陷, 降低漏检率和误判率, 提高手机背板表面缺陷检测的精确度和可靠性.(3) 缺陷分类 接下来对手机背板表面几种常见工艺缺陷进行特征分析, 目的是选出有效特征进行提取. 这些特征包括几何特征、形状特征、颜色特征等. 为将缺陷及其相关特征进行可视化和量化, 对各类缺陷图像及其特征进行统计, 结果见表1. 每种缺陷类型都会与相应的示例检出图像配对展示, 紧接其后是各自的特征统计数据. 这些数据的统计不仅有助于揭示缺陷的本质和特征, 更重要的是, 为后续的分类算法设计提供了依据. 表1中单位pixel 表示像素.表1 各类缺陷图像及其特征统计特征类别缺陷名称脏污碰伤水渍斑点划伤异色 擦伤面积/pixel 1869 11006 151868 960 9550 365705 11671周长/pixel 213.581 407.061 3248.130126.627 1691.8505014.200 1500.480宽/pixel 40 112 950 36 88 1297 398高/pixel 87 136 274 34 736 560 68最大直径/pixel 90.758 135.724 953.546 38.079 739.899 1401.700 400.522圆度 0.273 0.735 0.200 0.805 0.022 0.154 0.086矩形度 0.820 0.780 0.670 0.851 0.762 0.630 0.610紧密度 1.942 1.198 5.528 1.329 23.851 5.470 15.351凸形 0.929 1.00 0.816 0.944 0.756 0.936 0.669长短轴比 3.664 1.308 3.616 1.042 40.718 2.984 7.723蓬松度 1.035 1.010 1.224 1.017 1.040 1.174 1.237平均灰度67.153 151.121 155.856 39.413 92.731 100.489 121.421 4 实验结果与分析出率是互补的, 其计算公式为FN MR 1DR.TP FN==-+ (5) 误判率是系统错误标记为缺陷的非缺陷项目与所有实际非缺陷项目的比例, 反映系统产生误报的频率, 其计算公式为FP FAR .FP TN=+ (6)26 湖南理工学院学报(自然科学版) 第37卷其中TP为真阳性(正确识别为缺陷的数量), TN为真阴性(正确识别为非缺陷的数量), FP为假阳性(错误识别为缺陷的数量), FN为假阴性(错误识别为非缺陷的数量, 即漏检数).按照本文的缺陷检测方案, 实际的检测结果见表2. 可以看出, 基于Halcon的自动化图像处理系统在扫描手机背板表面缺陷方面表现优异. 该系统的检出率达到94.167%, 这意味着其能够检测到几乎所有缺陷, 确保产品质量的高标准. 同时, 误判率仅为3.125%, 表示它几乎不会将良好的产品错误判定为次品, 这对于减少浪费和维护生产流程的连续性至关重要. 此外, 该系统的图像处理速度达到平均500 ms/张, 这样的速度可以轻松适应快节奏的工业生产线, 确保不会成为生产效率的瓶颈. 与传统的人工检测方式相比, 这种自动化缺陷检测方案显著提升了检测的速度, 同时也提高了结果的一致性和可重复性, 减少了因人为判断不一致引起的误差.表2 检测结果统计有缺陷样本数/个检出数/个检出率/% 平均耗时/ms 120 113 94.167 524.1无缺陷样本数/个检出数/个误判率/% 平均耗时/ms 800 25 3.125 512.75 结束语本文基于Halcon图像处理软件, 提出了一种先进的手机背板表面缺陷检测方法. 该方法利用Halcon 强大的图像分析库, 结合自定义的算法, 实现了对手机背板上各类缺陷的快速准确检测. 通过采集高分辨率图像, 并运用Halcon中的图像预处理、特征提取、分类器训练和模板匹配等多种算子, 本文方案能够有效区分正常品和次品, 提高了生产线的自动化水平和质量控制精度. 实验结果表明, 缺陷检出率达到了94%以上的高水平, 同时将误判率控制在3%左右, 证明了该方法的可靠性和实用性. 此外, 每张图像的平均处理时间约为500 ms, 使得本方法能够适应高速的工业生产环境. 另外, 本文提出的快速检测方法已应用于成都、杭州等地企业的实际项目.本文虽然给出基于工业背景下的手机背板表面缺陷快速检测方法, 但该方法在一些极端工作条件下仍存在一些局限性, 例如在背景复杂或光照条件极端变化时, 检测性能可能受到影响. 因此, 未来的工作将致力于提高算法的鲁棒性, 以确保算法在不同的生产环境下都能保持高效稳定的检测性能. 此外, 随着人工智能和机器学习技术的快速发展, 如何进一步融入深度学习等创新方法以提升检测准确度和速度, 也将是我们下一步研究的重点.参考文献:[1]陶显, 侯伟, 徐德. 基于深度学习的表面缺陷检测方法综述[J]. 自动化学报, 2021, 47(5): 1017−1034.[2]郭绍陶, 苑玮琦. 基于双高斯纹理滤波模板和极值点韦伯对比度的圆柱锂电池凹坑缺陷检测[J]. 电子学报, 2022, 50(3): 637−642.[3]高春艳, 秦燊, 李满宏, 等. 改进YOLOv7算法的钢材表面缺陷检测研究[J/OL]. 计算机工程与应用, 1−12[2024-01-22].[4]CHAO S M, TSAI D M, LI W C, et al. A generalized anisotropic diffusion for defect detection in low-contrast surfaces[C]// Proceedings of the 20thInternational Conference on Pattern Recognition, IEEE, 2010: 4408−4411.[5]曾毅, 郭龙源, 罗百通. 基于BP神经网络和均值差分的TFT-LCD MURA缺陷检测方法[J]. 湖南理工学院学报(自然科学版), 2017, 30(1):32−38.[6]任鹏霏, 周传德, 胡帅, 等. HALCON图像处理在纸杯缺陷检测中的应用[J]. 自动化应用, 2019 (6): 98−99+103.[7]贺振东, 王耀南, 毛建旭, 等. 基于反向P-M扩散的钢轨表面缺陷视觉检测[J]. 自动化学报, 2014, 40(8): 1667−1679.[8]汪成龙, 黄余凤, 陈铭泉, 等. 基于Halcon的字符缺陷检测系统[J]. 制造业自动化, 2018, 40(9): 38−41.。
Halcon学习笔记之缺陷检测(二)例程:detect_indent_fft.hdev说明:这个程序展示了如何利用快速傅里叶变换(FFT)对塑料制品的表面进行目标(缺陷)的检测,大致分为三步:首先,我们用高斯滤波器构造一个合适的滤波器(将原图通过高斯滤波器滤波);然后,将原图和构造的滤波器进行快速傅里叶变换;最后,利用形态学算子将缺陷表示在滤波后的图片上(在缺陷上画圈)。
注:代码中绿色部分为个人理解和注释,其余为例程中原有代码*Initialization(初始化)dev_updata_off() //这一句包含如下三个算子://dev_updata_pc(‘off’) 关闭更新程序计数器//dev_updata_var(‘off’) 关闭更新变量窗口//dev_updata_window(‘off’) 关闭更新图像窗口(即通过命令来显示想要在图像窗口显示的图片)dev_close_window() //关闭活动的图像窗口read_image(Image,’plastics/plastics_01’) //载入图片//参数说明:为读入图片命名(Image)// 文件名(’plastics/plastics_01’)get_image_size(Image,Width,height) //获取图片的长宽;//参数说明:之前读入或生成的图片(Image)// 图片的宽(Width)// 图片的高(Height)dev_open_window(0,0,Width,Height,’Black’,WindowHandle) //打开一个新的图像窗口//参数说明:起始坐标(0,0)// 大小(Width,Height)// 背景颜色(’Black’)// 窗口句柄(WindowHandle)set_display_font (WindowHandle,14,’mono’,’ture’,’false’)//设置不依赖操作系统的字体//参数说明:窗口句柄(WindowHandle)// 字体大小(14)// 字体类型(’mono’)// 是否黑体(’ture’)// 是否倾斜(’false’)dev_set_draw(‘Margin’) //定义区域填充模式//参数说明:填充模式(’Margin’或者’Fill’)dev_set_line_width(3) //设置输出区域轮廓线的线宽//可以修改参数来看最后缺陷区域标示的区别dev_set_color(’red’) //设置一种或者多种输出颜色**Optimize the fft speed for the specific image size(根据指定图像大小进行fft速度最优化)optimize_rft_speed(Width,Height,’standard’) //对指定大小的图片的fft速度进行优化//参数说明:图片大小(Width,Height)// 优化模式(’standard’)**Construct a suitable filter by combining two Gaussian filters(结合两个高斯滤波器构造一*个合适的滤波器)Sigma1 := 10.0Sigma2 := 3.0 //定义两个常量gen_gauss_filter(GaussFilter1,Sigma1,Sigma1,0.0,’none’,’rft’,Width,Height)gen_gauss_filter(GaussFilter2,Sigma2,Sigma2,0.0,’none’,’rft’,Width,Height) //在频域生成两个高斯滤波器//参数说明:生成的高斯滤波器(GaussFilter)// 空域中高斯在主方向上的标准差(Sigma)// 空域中高斯在正交于主方向的方向上的标准差(Sigma)// 滤波器主方向的角度(0.0)// 滤波器的规范(’none’)// 直流项在频域的位置(’rft’)// 图片的大小(Width,Height)sub_image(GaussFilter1,GaussFilter2,Filter,1,0) //两图片相减(灰度)//sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : )//g' := (g1- g2) * Mult + Add//以上为函数原型以及运算公式**Process the images iteratively(对图像进行迭代运算)NumImages := 11For Index := 1 to NumImages by 1 //for循环从1到NumImages,步长为1**Read an image and convert it to gray valuesread_image(Image,’plastics/plastics_’+Index$’02’)rgb1_to_gray(Image,Image) //将原图转化为灰度图,第一个参数为原图*Perform the convolution in the frequency domainrft_generic(Image,ImageFFT,’to_freq’,’none’,’complex’,Width)//对计算一幅图片实部进行快速傅里叶变换 //参数说明:输入的图片(Image) // 傅里叶变换后输出的图片(ImageFFT) // 变换方向(’to_freq’或’from_freq’) //变换因子的规范(’none’) // 输出图片的数据类型(’complex’) //图片的宽(Width)convol_fft(ImageFFT,Filter,ImageConvol) //对图片用一个滤波器在频域进行卷积运算 //参数说明:输入的图片(ImageFFT) // 频域滤波器(Filter) //运算后输出的结果 rft_generic(ImageConcol,ImageFiltered,’from_freq’,’n’,’real’,Width) //对滤波后的图片进行傅里叶反变换**Process the filtered imagegray_range_rect(ImageFiltered,ImageResult,10,10)//用一个矩形掩膜计算像素点的灰度范围 //参数说明:输入的图片(ImageFiltered) // 输出的灰度范围图(ImageResult) // 矩形掩膜大小(10,10)min_max_rect(ImageResult,ImageResult,0,Min,Max,Range)//判断区域内灰度值的最大和最小值 //参数说明:待分析图片区域(ImageResult) // 图片(ImageResult)// 被去除的直方图两边像素点所// 占总像素数的百分比(0)// 得到的最小值最大值及灰度值范围(Min,Max,Range)threshold(ImageResult,RegionDynThresh,max([5.55,Max*0.8]),255)//利用全局阈值对图像进行分割 //参数说明:输入的图片(ImageResult) // 分割后得到的区域(RegionDynThresh) // 阈值(max([5.55,Max*0.8]),255)// 公式:MinGray <= g <= MaxGrayconnection(RegionDynThresh,ConnectedRegions) //计算区域内的连通部分 //参数说明:输入的图片(RegionDynThresh) // 得到的连通区域(ConnectedRegions)select_shape (ConnectedRegions,SelectedRegions,’area’,’and’,4,99999)//根据指定的形态特征选择区域//参数说明:输入的图片(ConnectedRegions)// 满足条件的区域(SelectedRegions)// 将要计算的形态特征(’area’)// 独立特征间的连接关系(’and’)// 特征的最小限制(4)// 特征的最大限制(99999)union1(SelectedRegions,RegionUnion) //返回包含所有区域的集合 //参数说明:包含所有区域的待计算区域的图片(tedRegions) // 所有输入区域合(RegionUnion)closeing_circle(RegionUnion,RegionClosing,10)//用一个圆圈来封闭一个区域 //参数说明:将要被封闭的区域(RegionUnion) // 被封闭的区域(RegionClosing)// 圆圈的半径(10) connection(RegionClosing,ConnectedRegions1)select_shape(ConnectedRegions1,SelectedRegions1,’area’,’and’,10,99999)area_center(SelectedRegions1,Area,Row,Column) //计算区域的面积以及中心位置//参数说明:待计算的区域(SelectedRegions1) // 区域的面积(Area) // 区域中心的行(Row) // 区域中心的列(Column)**Display the resultsdev_display(Image) //显示原图 Number := |Area| //将区域面积赋给Number用于后面检查是否存在缺陷 if(Number)gen_circle_contour_xld(ContCircle,Row,Column,gen_tuple_const(Number,30),gen_tuple_const(Number,0), gen_tuple_const(Number,rad(360)),’positive’,1)//构造一个与设定的圆弧或圆相一致的边界//参数说明:生成的边界(ContCircle)// 圆弧或圆的中心坐标(Row,Cloumn)// 圆弧或圆的半径(gen_tuple_const(Number,30))// 圆弧或圆的起始角度(gen_tuple_const(Number,0))// 圆弧或圆的结束角度(gen_tuple_const(Number,rad(360)))// 不明白是什么意思// 相邻两点间的距离(1)ResultMessage := [‘Not OK’,Number + ‘defect(s) found’]Color := [‘red’,’black’]dev_display(ContCircle) elseResultMessage := ‘OK’Color := ‘forest green’endifdisp_message(WindowHandle,ResultMessage,’window’,12,12,Color,’ture’)if(Index#NumImages)disp_continue_message(WindowHandle,’black’,’ture’)stop()endifendfor算法讲解:在实际的表面缺陷检测系统中,针对的检测表面很多是具有一定纹理的比如:布匹、皮革、塑料等,针对这一类表面的检测就不能单纯依靠帧差或者背景差来完成,因为背景的纹理不可能和当前图像的纹理完全相同。