[Halcon]粘连物体分割

对有粘黏物体的分割

【1】适用情形:距离变换 + 分水岭算法适用于一些粘连并不严重或粘连区域远比物体本身小的情况(粘连严重或重叠部分过多则不适用);

【2】Halcon中距离变换+分水岭算法使用相对简单,效果更稳定。

OpenCV中的距离变换特别要注意二值化图像中物体部分中间不要有孔洞,如果有需要填充后再做距离变换,否则会影响距离变换的效果。分水岭算法需要自己做预处理,设置markers告诉分水岭算法哪里是前景物体,哪里是未知区域,哪里是背景,使用相对麻烦,有时候还可能出现难以分割的情况,这种情况下,就直接换形态学 + 连通域方法处理即可:
1 : 读入图像
在这里插入图片描述
2 : 阈值处理
在这里插入图片描述
3 : 距离变换
在这里插入图片描述
4 : 求交集
在这里插入图片描述
5 : 计数
在这里插入图片描述

dev_clear_window()
dev_get_window (WindowHandle)
*读取图片
read_image (Image, 'pellets')
get_image_size (Image, Width, Height)
*自动阈值分割
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 110, 255)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 40, 50000)

*欧式距离函数的距离变换
distance_transform (SelectedRegions, DistanceImage, 'octagonal', 'true', Width, Height)
*int4转byte
convert_image_type (DistanceImage, ImageConverted, 'byte')
*图像取反
invert_image (ImageConverted, ImageInvert)

*图像比例增强 按最大比例增强对比度
scale_image_max (ImageInvert, ImageScaleMax)

*分水岭算法
watersheds_threshold (ImageScaleMax, Basins, 30)
select_shape (Basins, SelectedBasins, 'area', 'and', 2000, 50000)
gen_contour_region_xld (SelectedBasins, Contours, 'border')

*取出两个区域中重叠的部分
intersection (SelectedBasins, SelectedRegions, RegionIntersection)

dev_display(Image)
dev_display(RegionIntersection)
dev_display(Image)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_display (RegionIntersection)
dev_set_color ('red')
dev_set_line_width (2)
area_center (RegionIntersection, Area, Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 15, 0.785398)
count_obj (RegionIntersection, Number)
*设置字体颜色
dev_set_color ('green')
*设置文字大小
set_display_font (WindowHandle, 30, 'mono', 'true', 'false')
*设置文字位置
set_tposition (WindowHandle, 15, 220)
write_string(WindowHandle, 'count=' + Number)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值