Halcon学习笔记之缺陷检测
作者:网络转载 发布时间:[ 2015/4/16 11:03:31 ] 推荐标签:Halcon 缺陷管理
//参数说明:生成的高斯滤波器(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 := 11
For Index := 1 to NumImages by 1 //for循环从1到NumImages,步长为1
*
*Read an image and convert it to gray values
read_image(Image,’plastics/plastics_’+Index$’02’)
rgb1_to_gray(Image,Image) //将原图转化为灰度图,第一个参数为原图
*Perform the convolution in the frequency domain
rft_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 image
gray_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 <= MaxGray
connection(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 results
dev_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)
else
ResultMessage := ‘OK’
Color := ‘forest green’
endif
disp_message(WindowHandle,ResultMessage,’window’,12,12,Color,’ture’)
if(Index#NumImages)
disp_continue_message(WindowHandle,’black’,’ture’)
stop()
endif
endfor
算法讲解:在实际的表面缺陷检测系统中,针对的检测表面很多是具有一定纹理的比如:布匹、皮革、塑料等,针对这一类表面的检测不能单纯依靠帧差或者背景差来完成,因为背景的纹理不可能和当前图像的纹理完全相同。因此,本例程的算法通过将图像变换到频域进行处理,提取缺陷分量后反变换到时域,获得缺陷的具体位置。
高斯滤波器:在本算法中,在一开始构造了两个高斯滤波器,高斯滤波器是一种线性平滑滤波器,适用于消除高斯噪声。滤波器的实质是对信号进行滤波,滤除不需要的部分,得到想要的部分。一个低通的滤波器可以滤除高频信号,对于图像来说,噪声和边缘往往集中在高频分量,因此低通能够降噪,但是也能造成图像的模糊。
本文关键:本文的关键是使用两个低通滤波器,进行相减后构造了一个带阻滤波器来提取缺陷分量。这需要保证在实际的待检测表面中缺陷所处的频率范围要和背景以及噪声有明显的差异,并且带阻的频率选择要合适。通过带阻滤波后获得的频率成分对背景中的纹理要有明显的抑制,并且突出缺陷成分,进行傅里叶反变换后重构的图像是缺陷图像,经过简单的分割能很容易得到缺陷了。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
软件测试理论之缺陷管理Bug的生命周期的跟踪管理是怎么形成的?目前比较好用的缺陷管理工具都具备什么特点?缺陷等级的标准是如何判定的?有什么好用的缺陷管理工具吗?缺陷管理中缺陷的状态有哪些?如何进行状态管理?软件测试中的缺陷管理步骤和策略如何有效结合缺陷管理工具和缺陷管理流程?ALM(生命周期管理软件)之缺陷管理-缺陷流程处理ALM(生命周期管理软件)之缺陷管理-缺陷导出与修改ALM(生命周期管理软件)之缺陷管理-缺陷模版配置、导入缺陷ALM(生命周期管理软件)之缺陷管理-提交缺陷缺陷管理之Bug修复软件缺陷管理缺陷管理之测试新手缺陷管理项目实战缺陷管理工具:JIRA系统部署推进上线流程软件缺陷管理流程
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南