halcon 缺陷检测 灰尘检测02

请添加图片描述

图片资源

链接:https://pan.baidu.com/s/1Sh6e4VZybIVdNm3T9rgSrQ
提取码:inr2

处理流程

1、二值化连通域获取产品 初步位置
2、均值局部二值化 获取外框连通域
3、膨胀收缩 获取内部矩形区域
4、获取X轴线、获取Y轴线
5、检测大小灰尘处理
6、过滤边缘与杂质

完整代码


*****1、加载显示图片 ******************
dev_close_window ()
read_image (Image, './particle02.jpg')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)

*****2、二值化连通域获取产品 初步位置 ******************
* 二值化 黑色区域
threshold (Image, Region, 0, 110)
fill_up (Region, RegionFillUp)
* 连通域分析
connection (RegionFillUp, ConnectedRegions)
* 连通域筛选 长宽筛选
select_shape (ConnectedRegions, SelectedRegions, 'rect2_len1', 'and', 200, 99999)
select_shape (SelectedRegions, SelectedRegions, 'rect2_len2', 'and', 200, 99999)

* 检查是否找到外框
count_obj (SelectedRegions, Number)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
if(Number # 1)
    dev_disp_text ('未找到产品', 'window', 12, 12, 'black', 'box_color', '#fce9d4dd')
    stop ()
endif

*****3、均值局部二值化 获取外框连通域 ******************
* 圆形收缩
erosion_circle (SelectedRegions, RegionErosion, 18)
* 定位到需要处理的区域
reduce_domain (Image, RegionErosion, ImageReduced)
* 均值处理
mean_image (ImageReduced, ImageMean, 60, 60)
* 动态阈值寻找边缘
dyn_threshold (ImageReduced, ImageMean, RegionDynThresh, 5, 'light')

* 连通域分析
connection (RegionDynThresh, ConnectedRegionsDyn)
* 面积筛选
select_shape (ConnectedRegionsDyn, selectedRegionsDyn, 'area', 'and', 15000, 999999)

* 检查是否找内框
count_obj (selectedRegionsDyn, NumberDyn)

if(NumberDyn # 1)
    dev_disp_text ('未找到产品', 'window', 12, 12, 'black', 'box_color', '#fce9d4dd')
    stop ()
endif
dev_display (Image)
dev_display (selectedRegionsDyn)

*****4、膨胀收缩 获取内部矩形区域 ******************
* 膨胀处理
dilation_rectangle1 (selectedRegionsDyn, RegionDilationDyn, 60, 60)
* 连通域联合
union1 (RegionDilationDyn, RegionUnionDyn)

* 连通域分析
connection (RegionUnionDyn, ConnectedRegionsDyn)
* 矩形腐蚀
erosion_rectangle1 (ConnectedRegionsDyn, RegionErosionDyn, 60, 60)
* 获取凸包区域
shape_trans (RegionErosionDyn, RegionTrans, 'convex')
* 减法获取内框矩形  (RegionTrans外部凸包区域,RegionErosionDyn内部矩形框)
difference (RegionTrans, RegionErosionDyn, RegionDifferenceT)
* 开运算去除多余部分 RegionOpeningT(内框连通域区域)
opening_rectangle1 (RegionDifferenceT, RegionOpeningT, 60, 60)

* 连通域分析
connection (RegionOpeningT, ConnectedRegionsT)
* 面积筛选
select_shape (ConnectedRegionsT, SelectedRegionsT, 'area', 'and', 15000, 9999009)

count_obj (SelectedRegionsT, NumberT)
if(NumberT # 1)
    dev_disp_text ('未找到产品', 'window', 12, 12, 'black', 'box_color', '#fce9d4dd')
    stop ()
endif
dev_display (Image)
dev_display (SelectedRegionsT)

*****4、获取X轴线 ******************
* 获取凸包区域
shape_trans (SelectedRegionsT, RegionTransT, 'convex')
* 内接矩形
boundary (RegionTransT, RegionBorderT, 'inner')
* 矩形腐蚀
erosion_rectangle1 (SelectedRegionsT, RegionErosionTest, 8, 8)
* 移动区域 row 方向移动10个像素
move_region (RegionErosionTest, RegionMoved, 10, 0)
* 交集处理 (下移动矩形(腐蚀缩小的) 与 内接矩形框(只有外框)的交集 )
* 下半线
intersection (RegionMoved, RegionBorderT, RegionIntersectionX)
* 骨骼处理 (直线的骨骼)
skeleton (RegionIntersectionX, SkeletonX)
* 绘制骨骼
gen_contours_skeleton_xld (SkeletonX, ContoursX, 1, 'filter')
* 直线平滑处理
smooth_contours_xld (ContoursX, SmoothedContoursX, 151)
* 轮廓分割成直线
segment_contours_xld (SmoothedContoursX, ContoursSplitX, 'lines', 5, 4, 2)
* 线性回归去除 干扰点
regress_contours_xld (ContoursSplitX, RegressContoursX, 'no', 1)
* 合并直线
union_straight_contours_xld (RegressContoursX, UnionContoursX, 500, 0.5, 50, 'noparallel', 'maximum')
* 拟合直线
fit_line_contour_xld (UnionContoursX, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
* 绘制直线
gen_region_line (RegionLinesX, RowBegin, ColBegin, RowEnd, ColEnd)

* 判断X直线是否存在
count_obj (UnionContoursX, NumberX)
if(NumberX # 1)
    dev_disp_text ('未找到下边缘', 'window', 12, 12, 'black', 'box_color', '#fce9d4dd')
    stop ()
endif
if(ColBegin > ColEnd)
    gen_arrow_contour_xld (ArrowX, RowEnd, ColEnd, RowBegin, ColBegin, 50, 50)
else
    gen_arrow_contour_xld (ArrowX, RowBegin, ColBegin, RowEnd, ColEnd, 50, 50)
endif


*****5、获取Y轴线(与x轴一样) ******************
move_region (RegionErosionTest, RegionMovedY, 0, -10)
intersection (RegionMovedY, RegionBorderT, RegionIntersectionY)
skeleton (RegionIntersectionY, SkeletonY)

gen_contours_skeleton_xld (SkeletonY, ContoursY, 1, 'filter')
smooth_contours_xld (ContoursY, SmoothedContoursY, 151)
segment_contours_xld (SmoothedContoursY, ContoursSplitY, 'lines', 5, 4, 2)
regress_contours_xld (ContoursSplitY, RegressContoursY, 'no', 1)
union_straight_contours_xld (RegressContoursY, UnionContoursY, 500, 0.5, 50, 'noparallel', 'maximum')
fit_line_contour_xld (UnionContoursY, 'tukey', -1, 0, 5, 2, RowBegin1, ColBegin1, RowEnd1, ColEnd1, Nr1, Nc1, Dist1)
gen_region_line (RegionLinesY, RowBegin1, ColBegin1, RowEnd1, ColEnd1)

count_obj (UnionContoursY, NumberY)
if(NumberY # 1)
    dev_disp_text ('未找到左边缘', 'window', 12, 12, 'black', 'box_color', '#fce9d4dd')
    stop ()

endif
if(ColBegin1 < ColEnd1)
    gen_arrow_contour_xld (ArrowY, RowEnd1, ColEnd1, RowBegin1, ColBegin1, 50, 50)
else
    gen_arrow_contour_xld (ArrowY, RowBegin1, ColBegin1, RowEnd1, ColEnd1, 50, 50)
endif

*****6、检测大小灰尘处理 ******************
* 矩形腐蚀(边缘不处理)
erosion_rectangle1 (SelectedRegionsT, RegionErosionRoi, 12, 12)
* 聚焦内部区域
reduce_domain (Image, RegionErosionRoi, ImageReducedT)
* 二值化 处理大灰尘
threshold (ImageReducedT, RegionTp, 128, 255)

* 动态阈值处理 小灰尘
mean_image (ImageReducedT, ImageMean, 7, 7)
dyn_threshold (ImageReducedT, ImageMean, RegionDynThreshSmall, 5, 'light')
* 合并 大小灰尘
union2 (RegionTp, RegionDynThreshSmall, RegionUnionAll)

* 连通域打散分析
connection (RegionUnionAll, ConnectedRegions1)
* 闭运算
closing_circle (ConnectedRegions1, RegionClosing, 3.5)
* 连通域过滤 (去除面积小于3)
select_shape (RegionClosing, SelectedRegions3, 'area', 'and', 3, 9999999)

*****7、过滤边缘与杂质 ******************
* 过滤边框处理
erosion_circle (RegionErosionRoi, RegionErosionRoi, 1.5)
* 交集 (内框区域,大小灰尘区域 = 内部大小灰尘区域)
intersection (RegionErosionRoi, SelectedRegions3, SelectedRegions3)

* 连通域分析
connection (SelectedRegions3, ConnectedRegions2)
* 统计灰尘个数
count_obj (ConnectedRegions2, NumberP)

dev_clear_window ()
dev_display (Image)
* 杂质过滤
* 空的确认灰尘列表
gen_empty_obj (ParticalRegion)
* 循环读取灰尘
for Index := 1 to NumberP by 1
    * 选择一个灰尘
    select_obj (ConnectedRegions2, ObjectSelected, Index)
    * 圆形膨胀
    dilation_circle (ObjectSelected, RegionDilationS, 3.5)
    * 减法获取灰尘周围区域(膨胀后区域 - 灰尘区域 = 灰尘周围区域)
    difference (RegionDilationS, ObjectSelected, RegionDifferenceS)
    * 计算灰尘周围灰度
    intensity (RegionDifferenceS, Image, MeanS, DeviationS)
    * 计算灰尘内部灰度
    intensity (ObjectSelected, Image, MeanSP, DeviationSP)
    * 周围灰度 - 内部灰度 = 内外灰度差
    DeltaGray := MeanSP - MeanS
    * 中心点与面积
    area_center (ObjectSelected, Area, Row, Column)
    * 绘制十字
    gen_cross_contour_xld (Cross, Row, Column, 30, 0.785398)
    * 如果灰度差大于8 说明是灰尘
    if(DeltaGray > 8)
        * 保存至灰尘列表
        concat_obj (ParticalRegion, ObjectSelected, ParticalRegion)
    endif
endfor

请添加图片描述

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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、付费专栏及课程。

余额充值