Halcon傅里叶快速变换+图像差分实现缺陷检测

本文介绍了一种利用Halcon库实现的毫米波雷达透气膜粘贴质量检测方法,通过傅里叶快速变换和图像差分技术,检测透气膜的粘贴位置、平整度和破损情况。
摘要由CSDN通过智能技术生成

1.项目背景

        毫米波雷达透气膜因品质管控要求,需检测粘贴是否到位,透气膜是否褶皱破损,是否粘贴;

 2.halcon实现代码

*****************************************************************************
*****************************************************************************
*********************傅里叶快速变换+图像差分实现缺陷检测***********************
*****************************************************************************
*****************************************************************************
read_image (Image, 'C:/Users/Administrator/Desktop/同心但褶皱突起(NG)-1.bmp')
get_image_size (Image, Width, Height)
dev_open_window_fit_size (0, 0, Width, Height, 640, 480, WindowHandle)
set_display_font (WindowHandle, 30, 'sans', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
*缩放因子
ScaleFactor := 0.4
*创建空对象
gen_empty_obj (EmptyObject)
*计算Line_gauss函数需要的参数,sigma,low,high
calculate_lines_gauss_parameters (5, [90,20], Sigma, Low, High)
*读取所有图像
list_image_files ('C:/Users/Administrator/Desktop/傅里叶变换+差分', 'default', [], ImageFiles)
for Index := 0 to |ImageFiles| by 1
    read_image (Image, ImageFiles[Index])
    *获取三通道图像
    decompose3 (Image, R, G, B)
    *二值化
    threshold (B, Regions, 196, 255)
    *打断连通域
    connection (Regions, ConnectedRegions)
    *选择透气膜区域
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 10000, 20000)
    test_equal_obj (EmptyObject, SelectedRegions, IsEqual)
    *判断提取的区域为空,则表示没有粘贴透气膜
    if (IsEqual)
        dev_display (Image)
        dev_disp_text ('无透气膜', 'image', 50, 100, 'red', [], [])
        return ()     
    *否则粘贴了透气膜,检测是否存在褶皱
    else
        *形态学处理-腐蚀
        erosion_circle (SelectedRegions, RegionErosion1, 3.5)
        *获取最小外接圆
        smallest_circle (RegionErosion1, Row, Column, Radius)
        *创建圆
        gen_circle (Circle, Row, Column, Radius)
        *裁剪图像
        reduce_domain (R, Circle, ImageReduced2)
        *快速傅里叶变换
        rft_generic (ImageReduced2, ImageFFT, 'to_freq', 'none', 'complex', Width)
        *创建合适的高斯滤波器
        gen_gauss_filter (ImageGauss, 500, 500, 0, 'n', 'rft', Width, Height)
        *在频域中使用滤波器卷积图像
        convol_fft (ImageFFT, ImageGauss, ImageConvol)
        *傅里叶逆变换
        rft_generic (ImageConvol, ImageFFT1, 'from_freq', 'none', 'byte', Width)
        *在空间域差分
        sub_image (ImageReduced2, ImageFFT1, ImageSub, 1.5, 50)
        *按给到因子缩放图像
        zoom_image_factor (ImageSub, ImageZoomed, ScaleFactor, ScaleFactor, 'constant')
        *获取图像的区域
        get_domain (ImageZoomed, Domain)
        *腐蚀
        erosion_rectangle1 (Domain, RegionErosion, 7, 7)
        *裁剪
        reduce_domain (ImageZoomed, RegionErosion, ImageReduced)
        *检测线条及其宽度
        lines_gauss (ImageReduced, Lines, Sigma, Low, High, 'dark', 'true', 'gaussian', 'true')
        *检测是否存在线条
        test_equal_obj (EmptyObject, Lines, IsEqual1)
        *显示
        if (IsEqual1==0)
            *进行仿射变换
            hom_mat2d_identity (HomMat2DIdentity)
            hom_mat2d_scale_local (HomMat2DIdentity, 1/ScaleFactor, 1/ScaleFactor, HomMat2DScale)
            affine_trans_contour_xld (Lines, ContoursAffineTrans, HomMat2DScale)
            dev_display (Image)
            dev_display (ContoursAffineTrans)    
            dev_disp_text ('透气膜异常', 'image', 50, 100, 'red', [], [])
        else
            dev_display (Image)   
            dev_disp_text ('透气膜正常', 'image', 50, 100, 'green', [], [])
        endif      
    endif
    stop ()
endfor

3.运行效果

4.源代码与文件

https://download.csdn.net/download/weixin_44170250/88913036

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HeliosXxzh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值