Halcon 图像分割(粘连物体循环分割)

资源

链接:https://pan.baidu.com/s/14rj-BKH-7wtF-DCIrTm17w
提取码:re93

图片

在这里插入图片描述

代码

* 1.读取并显示图片 *************************************
dev_close_window ()
read_image (Image, './img.bmp')
get_image_size (Image, Width, Height)
dev_open_window_fit_size (0, 0, Width, Height, -1, -1, WindowHandle)
dev_display (Image)

set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)


* 2.初步分割 *************************************
threshold (Image, Region, 0, 100)
* 腐蚀运算
erosion_circle (Region, RegionErosion, 4.5)    
* 开运算
opening_circle (RegionErosion, RegionOpening, 1.5)
* 连通域分析
connection (RegionOpening, ConnectedRegions)

* 3.初步分割筛选 *************************************
* 连通域筛选
select_shape (ConnectedRegions, SelectedRegions, ['area','rectangularity'], 'and', [100,0.5], [700,1])
* 产品区域膨胀 
dilation_circle (SelectedRegions, RegionDilation, 4.5)
* 减去已经筛选的产品
difference (ConnectedRegions, RegionDilation, SelectedRegions1)

* 最终结果变量
gen_empty_obj (ObjectsConcat)
concat_obj (RegionDilation, ObjectsConcat, ObjectsConcat)

* 4.循环分割筛选 *************************************
for Index := 1 to 7 by 1
    * a.粘连产品中间区域 *************************************
    * 粘连产品凸性处理
    shape_trans (SelectedRegions1, RegionTrans, 'convex')
    * 凸性区域 - 粘连区域
    difference (RegionTrans, SelectedRegions1, RegionDifference)
    * 去除小区域
    opening_circle (RegionDifference, RegionOpening1, 3.5)
    * 链接中间区域
    closing_circle (RegionOpening1, RegionClosing, 30.5)
    
    * 粘连产品减去中间区域
    difference (SelectedRegions1, RegionClosing, RegionDifference1)
    * 连通域分析
    connection (RegionDifference1, ConnectedRegions1)
    
    * b.粘连产品 分割后筛选 *************************************
    * 筛选分割后 单个产品
    select_shape (ConnectedRegions1, SelectedRegions2, 'area', 'and', 100, 700)
    * 膨胀 恢复原始区域
    dilation_circle (SelectedRegions2, RegionDilation1, 4.5)
    * 单个产品添加到结果中去
    concat_obj (ObjectsConcat, RegionDilation1, ObjectsConcat)

    * c.去除分割后的产品 再次筛选产品 *************************************
    * 去除分割后的产品
    difference (SelectedRegions1, RegionDilation1, RegionDifference2)
    * 再次筛选分割的产品
    select_shape (RegionDifference2, SelectedRegions3, 'area', 'and', 100, 700)
    * 膨胀
    dilation_circle (SelectedRegions3, RegionDilation2, 4.5)
    * 分割后的产品 添加到结果中去
    concat_obj (ObjectsConcat, RegionDilation2, ObjectsConcat)
    
    * d.仍然粘连的产品 进入下次循环 *************************************
    select_shape (RegionDifference2, SelectedRegions1, 'area', 'and', 700, 99999)
    * 统计仍然粘连的产品
    count_obj (SelectedRegions1, Number)
    * 退出循环
    if(Number == 0) 
        break
    endif
endfor

* 6.筛选与中心交叉点计算 *****************************************
select_shape (ObjectsConcat, SelectedRegions4, 'area', 'and', 200, 99999)
area_center (SelectedRegions4, Area, Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 15, 0.785398)
count_obj (ObjectsConcat, Number1)
* 5.显示结果 *****************************************
dev_display (Image)
* dev_display (ObjectsConcat)
disp_message (WindowHandle, '产品个数:' + Number1 $'.2f', 'window', 10, 10, 'black', 'true')
dev_display (Cross)


结果

在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

廷益--飞鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值