halcon 缺陷检测 药片检测(有无)

请添加图片描述

图片资源

链接:https://pan.baidu.com/s/1jHURp4MQ4ex-dfeURZ6OhQ
提取码:d0hg

处理流程

1、模板图片角度计算与校正 保存校正后的角度与中心点
2、计算药片处理区域
3、循环处理图片,重新获取角度与中心点,做仿射变换
4、药片区域连通域获取(局部二值,闭运算,开运算)
5、药片分类
6、统计个数与显示结果

完整代码

***** 1、加载图片与显示设置**************
dev_close_window ()
dev_update_off ()
read_image (ImageOrig, './img/blister_reference.png')
dev_open_window_fit_image (ImageOrig, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'sans', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)

***** 2、仿射变换 将图片转正**************
* 抽取图片通道1
access_channel (ImageOrig, Image1, 1)
* 二值化
threshold (Image1, Region, 90, 255)
* 获取整体凸包区域
shape_trans (Region, Blister, 'convex')
* 获取区域的角度(弧度)
orientation_region (Blister, Phi)
* 获取区域的中心点
area_center (Blister, Area1, Row, Column)
* 计算仿射变换矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
* 将原始图片转正
affine_trans_image (ImageOrig, Image2, HomMat2D, 'constant', 'false')

***** 3、计算矩形框(15个 药品的位置矩形框)**************
gen_empty_obj (Chambers)
for I := 0 to 4 by 1
    Row := 88 + I * 70
    for J := 0 to 2 by 1
        Column := 163 + J * 150
        gen_rectangle2 (Rectangle, Row, Column, 0, 64, 30)
        concat_obj (Chambers, Rectangle, Chambers)
    endfor
endfor

***** 4、计算模板矩形框旋转后的绝对角度 (旋转目标角度,旋转中心点)**************
* 旋转外框
affine_trans_region (Blister, Blister, HomMat2D, 'nearest_neighbor')
* 计算非药品区域
difference (Blister, Chambers, Pattern)
* 合并药品矩形区域
union1 (Chambers, ChambersUnion)
* 计算旋转后 外框角度
orientation_region (Blister, PhiRef)
PhiRef := rad(180) + PhiRef
* 获取旋转后外框的中心点
area_center (Blister, Area2, RowRef, ColumnRef)

**** 循环分析图片 ********************************************************************
Count := 6
for Index := 1 to Count by 1
    * 读取图片
    read_image (Image, 'blister/blister_' + Index$'02')
    * 二值化连通域分析 连通域筛选
    threshold (Image, Region, 90, 255)
    connection (Region, ConnectedRegions)
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 9999999)
    **** b、旋转处理图片 *****************************
    * 获取外框凸包区域
    shape_trans (SelectedRegions, RegionTrans, 'convex')
    * 外框凸包角度
    orientation_region (RegionTrans, Phi)
    * 外框中心点
    area_center (RegionTrans, Area3, Row, Column)
    vector_angle_to_rigid (Row, Column, Phi, RowRef, ColumnRef, PhiRef, HomMat2D)
    affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
    * 
    **** c、药片区域获取 *****************************
    * 缩小处理区域
    reduce_domain (ImageAffineTrans, ChambersUnion, ImageReduced)
    * RGB图片抽取
    decompose3 (ImageReduced, ImageR, ImageG, ImageB)
    * 局部二值化 7*7 局部区域,0.2 刻度 2:绝对阈值
    var_threshold (ImageB, Region, 7, 7, 0.2, 2, 'dark')
    dev_display (Region)
    * 连通域分析
    connection (Region, ConnectedRegions0)
    * 闭运算矩形(链接药片内部)
    closing_rectangle1 (ConnectedRegions0, ConnectedRegions, 3, 3)
    * 填充内部区域
    fill_up (ConnectedRegions, RegionFillUp)
    dev_clear_window ()
    dev_display (RegionFillUp)
    * 筛选连通域 (筛选掉小区域)
    select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 1000, 99999)
    dev_clear_window ()
    dev_display (SelectedRegions)
    * 开运算(断开多余部分)
    opening_circle (SelectedRegions, RegionOpening, 4.5)
    dev_clear_window ()
    dev_display (RegionOpening)
    * 连通域分析
    connection (RegionOpening, ConnectedRegions)
    * 再次筛选 连通域 (筛选掉小区域)
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)
    * 凸包连通域为 药片连通域
    shape_trans (SelectedRegions, Pills, 'convex')
    dev_clear_window ()
    dev_display (ImageAffineTrans)
    dev_display (Pills)
    
    **** d、药片分类(检测) *****************************
    * 统计连通域个数
    count_obj (Chambers, Number) 
    * 创建错误药片对象,丢失药片对象
    gen_empty_obj (WrongPill)
    gen_empty_obj (MissingPill)
    for I := 1 to Number by 1
        * 选择外框区域
        select_obj (Chambers, Chamber, I)
        * 单个外框与药片连通域图片  交接
        intersection (Chamber, Pills, Pill)
        * 获取面积与中心点
        area_center (Pill, Area, Row1, Column1)
        if (Area > 0)
            * 蓝色图片中,药片区域 灰度最小最大值,0 高于0的百分比
            min_max_gray (Pill, ImageB, 0, Min, Max, Range)
            * 面积小于 3800 说明药片不存在  min < 60说明有暗区 药片出现错误
            if (Area < 3800 or Min < 60)
                * 统计错误药片
                concat_obj (WrongPill, Pill, WrongPill)
            endif
        else
            * 统计丢失药片
            concat_obj (MissingPill, Chamber, MissingPill)
        endif
    endfor
    
    **** E、统计OK,错误,丢失个数 *****************************
    dev_clear_window ()
    dev_display (ImageAffineTrans)
    dev_set_color ('forest green')
    count_obj (Pills, NumberP)
    count_obj (WrongPill, NumberWP)
    count_obj (MissingPill, NumberMP)
    dev_display (Pills)
    * 有丢失 或有错误 的产品
    if (NumberMP > 0 or NumberWP > 0)
        * NG
        disp_message (WindowHandle, 'Not OK', 'window', 12, 12 + 600, 'red', 'true')
    else
        * OK
        disp_message (WindowHandle, 'OK', 'window', 12, 12 + 600, 'forest green', 'true')
    endif
    **** F、显示个数 *****************************
    Message := '# 药片OK数量: ' + (NumberP - NumberWP)
    Message[1] := '# 药片错误  :  ' + NumberWP
    Message[2] := '# 药片丢失::  ' + NumberMP
    * 
    Colors := gen_tuple_const(3,'black')
    if (NumberWP > 0)
        Colors[1] := 'red'
    endif
    if (NumberMP > 0)
        Colors[2] := 'red'
    endif
    disp_message (WindowHandle, Message, 'window', 12, 12, Colors, 'true')
    dev_set_color ('red')
    dev_display (WrongPill)
    dev_display (MissingPill)
    
    * 继续下一张图片
    if (Index < Count)
        disp_continue_message (WindowHandle, 'black', 'true')
    endif
    stop ()
endfor

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Halcon是一种常用的图像处理软件,可以用于各种缺陷检测任务。在Halcon中,可以使用不同的算法和技术来进行缺陷检测。根据引用\[1\]中提供的实例,Halcon可以用于背景网格产品刮伤缺陷检测、不均匀表面刮伤检测、产品表面三角缺陷检测、产品毛刺检测、产品上凹坑检测、产品周围缺口检测、电路板短路、断路检测、找出所有网格顶点的位置、化妆品标签褶皱检测、皮革纹理表面缺陷检测、手机摄像头图像表面的轻微缺陷检测、网状产品表面破损检测、铣刀刀口破损缺陷检测检测印刷数字是否完整等任务。 根据引用\[2\]中的描述,缺陷检测是一项具有挑战性的任务,需要保证稳定性和精度。传统的算法检测缺陷通常需要进行复杂的调试和参数调整,而且容易出现检测不稳定和误测的情况。机器学习和深度学习成为缺陷检测领域的重要技术难点。机器学习方法通常使用类似MLP的神经网络对缺陷特征进行训练和分类。深度学习方法则需要大量的缺陷样本进行训练,并且需要手动标注缺陷位置,训练周期较长。迁移学习法是一种新兴的方法,可以利用已经训练好的网络模型进行缺陷检测。 在日常工程应用中,Halcon通常使用形状匹配进行定位,但当待匹配物体有较大变形时,形状匹配的结果可能不准确,特别是在塑料产品成形时变形或纺织产品因褶皱而变形的情况下。这时需要采用其他方法来获得精确的定位结果。 综上所述,Halcon可以应用于各种缺陷检测任务,并且可以根据具体情况选择合适的算法和技术来实现精确的检测结果。 #### 引用[.reference_title] - *1* [【愚公系列】2023年04月 Halcon机器视觉-15种常用缺陷检测实例](https://blog.csdn.net/aa2528877987/article/details/129943049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [基于halcon缺陷检测常用方法与示例总结](https://blog.csdn.net/weixin_50016546/article/details/124981131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

廷益--飞鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值