基于HALCON内胶破损检测的研究

1 基于HALCON内胶破损检测的研究

1.1检测方法的介绍
通过之前的学习已经基本了解了用halcon进行机器视觉项目的一般流程(采集→预处理→形态学,特征处理→特征显示)和常用思路(二值化→形态学→特征选择)。现在来针对具体的对象进行处理,尝试不同的方法直到达到要求为止。
方法一 :
大概的思路是先阈值分割,然后特征提取。这也是图像分割的一个最基本的思路,但是在对样本进行初步分析之后,就发现这种方法是不可行的,其原因是缺陷区域和背景区域灰度变化不大,所以难以将其通过阈值分割的方法直接提取出来,具体效果如图下所示(左侧为灰度变换后图像,右侧为阈值分割图像)。

       ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190312131046154.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcyNjE4,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20190312131108678.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjcyNjE4,size_16,color_FFFFFF,t_70)
                图1                              图2       

很显然简单的阈值分割的方法并不能将缺陷区域分离出来,现在来转换思路换一种方法。
方法二 :
大致思路是先使用两个低通滤波器,进行相减后构造了一个带阻滤波器来提取缺陷分量。这就需要保证在实际的待检测表面中缺陷所处的频率范围要和背景以及噪声有明显的差异,并且带阻的频率选择要合适。通过带阻滤波后获得的频率成分对背景中的纹理要有明显的抑制,并且突出缺陷成分,进行傅里叶反变换后重构的图像就是缺陷图像,经过分割(先全局阈值分割→开运算→区分连通域→通过面积和最小外接矩形长宽来提取缺陷区域并用红圈标记)就能得到缺陷了。算法程序和结果分析如下所示。
程序:
`

read_image(Image,'C:/Users/sun/Desktop/01.18-2/CameraMV-SUA1000C#0001-0011-Snapshot-20190118161059-7749569203.BMP')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_draw ('fill')
dev_set_line_width (3)
dev_set_color ('red')
optimize_rft_speed (Width, Height, 'standard')
Sigma1 := 10.0
Sigma2 := 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)
sub_image (GaussFilter1, GaussFilter2, Filter, 1, 0)
NumImages := 11
for Index := 1 to NumImages by 1
read_image(Image,'C:/Users/sun/Desktop/01.18-2/CameraMV-SUA1000C#0001-0011-Snapshot-20190118161219-7934753108.BMP')
emphasize (Image, ImageEmphasize, 7, 7, 1)
rgb1_to_gray (ImageEmphasize, GrayImage)
rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width)
convol_fft (ImageFFT, Filter, ImageConvol)
rft_generic (ImageConvol, ImageFiltered, 'from_freq', 'n', 'real', Width)
gray_range_rect (ImageFiltered, ImageResult, 10, 10)
min_max_gray (ImageResult, ImageResult, 0, Min, Max, Range)
threshold (ImageResult, Regions, 6, 40)
opening_circle (Regions, RegionOpening, 5)
connection (RegionOpening, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions2, ['area','rect2_len1','rect2_len2'], 'and', [1400,0,0], [5000,50,50])
area_center (SelectedRegions2, Area, Row, Column)
dev_display (Image)
Number := |Area|
    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)
        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, 'true')
    if (Index != NumImages)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
Endfor

下面是程序执行的几组结果(左侧是快速傅里叶变换分割图,右侧是程序运行结果图
):

采用方法二得到的结果要显著好于方法一,但是也面领着许多的问题,最终对二十张图片用该方法进行检测有十三张检测无误,检测准确率大概为70%,下面针对整个过程中存在的问题做一个分析。
1.2目前检测方法的问题和可能的改进方法
通过快速傅立叶变换对图像进行分割,分割的效果虽然是要远远好于直接阈值分割的效果。但是因为缺陷的大小形状和分布的位置都是不同的,所以在特征选择时就要通过多个特征来进行选取。例如:本例中是通过面积和最少外接矩形的长和宽,来作为特征进行选取,相关参数要十分恰当,才能达到足够强的适应效果,但是在对图像进行分割时,存在许多问题会增大分割的难度。
1.缺陷区域往往很难与旁边的区域分割开,特别是当缺陷区域靠近边框位置时,即使是对图像进行了开运算。还是会有存在一些这样的问题。
2.缺陷区域面积过小,也会对图像分割,造成较大的困难。
3.在图像的拍摄时,内胶区域是不平整的,凹凸不平,会将光源反射出来,形成一块一块的亮区,这些亮区,会对缺陷区域的分割造成较大的干扰。
所以在,图像分割时所选取的参数至关重要,那么如何进行改进呢?我又想了一种另外的思路,就是在对图像进行快速傅立叶变换之前,先将内胶区域分离出来,也就是图像中的蓝色区域。将蓝色区域进行分离,在针对靠近边缘的一些缺陷时,就可以有效的防止其和黑色边框连连在一起,造成检测的不准,从而尽可能的提高检测精度,在面对复杂情况时,也能够达到一定的使用价值。
2 本项目学习心得
虽然在做这个项目之前,也进行了很多的准备工作,也有别人的一些现成方法,但是真正的上手起来还是会遇到各种各样的问题,其中最大的问题就是,很难找到一套行之有效的方法来满足所有样本的检测要求,只能尽可能的提高自己的检测精度,来达到使用价值。例如在本例中,对20张图片进行检测,最后检测精度约为70%,当更大样本时其精度还有待进一步的考证。在实际的问题中,问题总是各种各样的,因为缺陷的各种可能情况是不可能和人想的一样是固定大小、区域的,所以将它们分离出来,需要下一番功夫,这就需要找到合适的算法。在本周通过理论的学习和实践的操作,进一步的体验到了做项目中的,可能遇到的各种问题,也感受到了做项目的不易和研究的困难,但是只要是坚持下去,不断的去寻找方法克服困难最终所得到的收获也绝非是课本上所能学到的,同时也对自己的专业能力会有一个提升,这就是做项目实操给自己带来的一些不一样的体验。俗话说“世上无难事,只怕有心人”,做事就怕认真二字,对待任何事情,只要保持认真的态度,自律的精神,和对未知事物的探索欲望,就不怕学无所成。

猜你喜欢

转载自blog.csdn.net/qq_43272618/article/details/88418747
今日推荐