前言
在瓶子,灌装产业中,通常需要瓶子的瓶身进行检测,防止其出现划痕,破洞等情况。但是通常瓶身出现的缺陷都非常小,往往只是一些细小的划痕,这种情况就非常容易被误判为OK情况。
所以采用滤波差值法,可以有效的对瓶身细小的缺陷进行检测。
其核心在于,通过一个大卷积核的滤波程序将缺陷过滤,然后与低滤波的图像进行相减,得以突出缺陷所在位置。为什么不与原图相减?原因在于,低滤波的作用是在尽可能的保存缺陷所在位置的前提下,减少其他图像噪点的影响。所以使用低卷积核滤波时,可以根据实际情况将低卷积核的滤波调大。
1.halcon程序
read_image (Image, 'D:/2024Work/work/4.13瓶子异物检测/异物/10.bmp')
gen_rectangle1 (ROI_0, 152.494, 150.798, 906.861, 710)
reduce_domain (Image, ROI_0, ImageReduced)
binary_threshold (ImageReduced, Region1, 'max_separability', 'dark', UsedThreshold1)
shape_trans (Region1, RegionTrans, 'convex')
threshold (ImageReduced, Regions, 0, 243)
reduce_domain (ImageReduced, Regions, ImageReduced2)
smallest_rectangle2 (Regions, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2-10)
reduce_domain (ImageReduced, Rectangle, ImageReduced1)
*******************************************************************
mean_image (ImageReduced1, ImageMean, 1, 1)
mean_image (ImageReduced1, ImageMean1, 13, 13)
sub_image (ImageMean, ImageMean1, ImageSub, 20, 80)
threshold (ImageSub, Regions, 0, 60)
opening_circle (Regions, RegionOpening, 1)
closing_circle (RegionOpening, RegionClosing, 1)
connection (RegionClosing, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 200, 2000)
dev_display (Image)
dev_display (SelectedRegions)
2.halcon程序解析
2.1定位产品位置
首先需要确定瓶子的所在位置。但是滤波差值法受到边缘的影响较大,所以在确定瓶身位置时,需要尽可能的剔除瓶身上的边缘
read_image (Image, 'D:/2024Work/work/4.13瓶子异物检测/异物/10.bmp')
gen_rectangle1 (ROI_0, 152.494, 150.798, 906.861, 710)
reduce_domain (Image, ROI_0, ImageReduced)
binary_threshold (ImageReduced, Region1, 'max_separability', 'dark', UsedThreshold1)
shape_trans (Region1, RegionTrans, 'convex')
threshold (ImageReduced, Regions, 0, 243)
reduce_domain (ImageReduced, Regions, ImageReduced2)
smallest_rectangle2 (Regions, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2-10)
reduce_domain (ImageReduced, Rectangle, ImageReduced1)
2.2滤波求差值
通常情况下滤波求差值可以使用均值,中值,高斯滤波都可以达到类似的效果,但是根据不同产品的不同,实际的差异可能比较大,通常在表面噪点少的情况,可以使用均值滤波
mean_image (ImageReduced1, ImageMean, 1, 1)
mean_image (ImageReduced1, ImageMean1, 13, 13)
sub_image (ImageMean, ImageMean1, ImageSub, 20, 80)
2.3形态学后处理
threshold (ImageSub, Regions, 0, 60)
opening_circle (Regions, RegionOpening, 1)
closing_circle (RegionOpening, RegionClosing, 1)
connection (RegionClosing, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 200, 2000)
dev_display (Image)
dev_display (SelectedRegions)
总结
滤波差值法的核心在于如何对滤波器的选择和测试参数。其中,在有大量噪点的缺陷检测项目和有大量边缘的项目中不适合使用。例如皮质表面脏污检测等。滤波差值法受到边缘和噪点的影响非常大,可以在实际使用中多加尝试即可。