1一1剖面图方向_无纺布折痕检测(1) 基于构造方向滤波器的折痕检测

原图来自Ihalcon论坛

中间有一条对比度不明显的垂直折痕

93a9fe908261f90fafd997a26e9d6ada.png

(图片来源:http://www.ihalcon.com/read-4226.html)

发此帖子的楼主已经给出解决方案,如下:

1. 设计一个滤波器

2. 用convol_image算子来增强特定方向的纹理

3. 再用Gray_Range_Rect做图像变换

4. 最终用线高斯提取目标折痕

我们沿着楼主的解决思路走一遍。

首先介绍下相关理论点:卷积、如何构造方向滤波器。

1 卷积

        提到卷积,想起大学时被《信号与系统分析》支配的恐惧了。对于图像处理的卷积,首先需要构造一个滤波矩阵,即卷积核,并将卷积核翻转180°,然后对于图像的每一个像素点,计算它的邻域像素和翻转后卷积核的对应元素的乘积,再加起来,作为该像素位置的值,即完成了卷积。还有一种滤波方式为协相关,其核矩阵不需要绕中心点翻转180°,平时接触的卷积核大都是关于x轴和y轴对称的,所以卷积和协相关在这种情况下没什么区别。

2d6384f22a1a5a4a6b93ad4d61b1eb60.png

对于整幅图像,采用滑动卷积核的策略,如下图。

de65c5e872d433192057078eaeeceb03.gif

经过滑动卷积后,图像大小会变小,为避免这种问题,需要进行边界填充,主要有以下几种方式。

2956190e68b0e1065cd19eec5dd07528.png

2 方向滤波器

        若需检测水平边缘,需要在竖直方向上进行梯度运算,若需检测垂直边缘,需要在水平方向进行梯度运算。所以在检测垂直线条时,所构造的滤波器能在水平方向构成梯度差分运算,如一维水平滤波器[-1,0,1],若要扩展成3*3矩阵形式,可构成Prewitt的水平梯度卷积核。

8c23788c917f2eed0b4590a8aa761e56.png

            如果所要检测线条比较宽,可以将3*3的卷积核扩展成5*5,7*7等。

610382cd04ae041f65032bf998ae7a32.png

            通常情况,线条边缘灰度值会成渐变规律的,将卷积模板更改如下

ba1ab932886b8fd3aaf62eaa8273c727.png

          使用此模板计算时,会将一些灰度值均匀分布的地方全部置0,如果我们不想要只得到的线条的效果,还需要原来的灰度值保持不变,这就需要将卷积模板所有值,相加等于1。

8a3257f8224384740672dec9783ed3e4.png

        如果需要考虑锚点(中心点)周围所有像素的影响,则需要将其8邻域像素要参与计算。

311334a98b8789db839fce8bd3a09976.png

            此时,计算出的像素灰度值会偏大,所有值相加不等于1,需要在模板前乘以对应权值。

61da4ffce16ca428d9c80ba5cebc993d.png

    至此,我们滤波器构造完毕,在进行试验之前,先了解下Halcon使用构造滤波器的格式,见帮助文档中的如下说明。

f237bceada3d82081c0669ffc60de460.png

    大致意思是,我们可生成一个文本文件,文件内容可按照如下格式描述滤波器,文件扩展名为:.fil。

3738221f763032eea4012076e97fff0b.png

    另一种方法可以以元组Tuple的格式描述滤波器,格式为:[模板高,模板宽,模板权重倒数,模板元素行排列],程序中使用的是此格式。

    当然,从水平滤波器,也可以联想到垂直滤波器,或者一些特定曲线滤波器。

c0cb73762091fbe2664049ecc769458c.png

3 使用Sobel水平滤波器检测折痕

        在使用构造滤波器之前,先使用sobel滤波器进行处理,如果前人总结一些经典的先验知识,秉承着”拿来主义“,使用一些已知的、经典的方法,来解决一些未知的、陌生的问题,这种处理思路是极力推崇的。

        Sobel算子的处理过程,是分别在水平和垂直方向对图像进行卷积,再讲二者结果结合求得没一点的梯度值。下图为Soble算子的水平、垂直滤波器。

f1951cbe088b06c6856c0b8dcdf35758.png

  读入图像,将Sobel水平滤波器转换为Halcon的Tuple形式。

filter1 :=[3,3,1,-1,0,1,-2,0,2,-1,0,1]

Sobel水平滤波器与图像卷积后如下图,可以看见一条比较长的竖直线条。

96fa1157ad5b71c657dfdb22b0d32985.png

Sobel算子已经做了灰度变换,Gray_Range_Rect可以不再使用,也可以使用做灰度增强,Sobel检测程序无用到。

关于lines_gauss的参数是比较难调,尤其是高低阈值,此处使用算子calculate_lines_gauss_parameters基本可以实现自适应参数条件,只需要设置所检测线条最大宽度与对比即可。

MaxLineWidth := 4Contrast := 30calculate_lines_gauss_parameters (MaxLineWidth, [Contrast,0], Sigma, Low, High)lines_gauss (ImageResult, Lines, Sigma, Low, High, 'light', 'true', 'parabolic', 'true')select_contours_xld (Lines, SelectedContours, 'contour_length', 180, 250, -0.5, 0.5)

检测结果如下图

干扰线还是比较多的,使用特征筛选可以排除。

ef0a0f9dca630efee02eaf87d2ef3902.png

4 使用构造方向滤波器检测折痕

将构造滤波器转为halcon的Tuple形式

filter :=[5,5,5,-1,-5,1,5,1,-1,-5,1,5,1,-1,-5,1,5,1,-1,-5,1,5,1,-1,-5,1,5,1]

与原图卷积后

垂直线条明显被加强

59c848f44fa07f491b49470701fbd28d.png

使用Gray_Range_Rect做灰度变换

排除垂直纹理以外的干扰

增强对比度

228ce071a73102bc0baa6c415e10f9ac.png

使用线高斯提取目标

干扰线减少些

b4de6804c7fc6f54b31b33de96fcd6c6.png

特征筛选,检测折痕

89cc391437109650ee84009b6f31098d.png

基于构造滤波器的折痕检测程序

read_image (Image1030179715f15e264af3b, 'C:/Users/SWD-AR02/Desktop/10_3017_9715f15e264af3b.png')*构造滤波器filter :=[5,5,5,-1,-5,1,5,1,-1,-5,1,5,1,-1,-5,1,5,1,-1,-5,1,5,1,-1,-5,1,5,1]*图像卷积convol_image (Image1030179715f15e264af3b, ImageResult, filter, 'mirrored')*灰度变换gray_range_rect (ImageResult, ImageResult1, 6, 6)*线高斯提取目标MaxLineWidth := 8Contrast := 50calculate_lines_gauss_parameters (MaxLineWidth, [Contrast,0], Sigma, Low, High)lines_gauss (ImageResult1, Lines, Sigma, Low, High, 'light', 'true', 'parabolic', 'true')*选取折痕select_contours_xld (Lines, SelectedContours, 'contour_length', 180, 250, -0.5, 0.5)*结果显示gen_region_contour_xld (SelectedContours, Region, 'margin')dilation_rectangle1 (Region, RegionDilation, 11, 1)dev_set_draw ('margin')dev_display (Image1030179715f15e264af3b)dev_display (RegionDilation)

    目前,使用sobel的水平滤波器和构造滤波器都能检测出折痕,但是只是针对此幅图像,对于实际项目当中,构造滤波器可以根据不同情况进行设计,柔性更强、鲁棒性更好,相反地,复杂度也会增加。

    后续,我们在此帖楼主的解决方案的框架下,尝试另外两种方法,敬请期待。

后台回复“折痕”可获取原图以及源代码。



推荐精彩↓↓14d038d5f7c80836c36fd29b1ae43e58.gif

纯干货|  一步一步教你选择相机镜头

实例分析变形模板匹配

【玩套路】边缘检测通用思路

【飞升篇】粘连颗粒的Blob检测

【模板匹配系列】基于形状的模板匹配(2)

【模板匹配系列】基于灰度相关性的模板匹配(1)

长按二维码,关注本公众号!精彩继续。。。。。。

1fb86973210d18ab95512b08e2b0aba3.png

b27d11471cd0961d7eb6f31a9ec955cc.gif

原创声明:星星之火,可以燎原!感谢您的时间,您的喜欢和转发是对我们最大的鼓励。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值