利用halcon分离分别为大的,小的,亮的,暗的的物体

这里以示例程序里的particle.hdev为例:
利用halcon分离分别为大的,小的,亮的,暗的的物体_第1张图片
如图所示:要提取图中较暗部分的小颗粒。目标object小且暗,为了提取会想到用emphasize增强,但是其中的干扰物体为大的亮的物体,增强作用可能不大。
示例程序中的算法思路为:
1.去除干扰的大而亮的物体
(1)将大而亮的物体提取出来:全局阈值
threshold (Image, Large, 110, 255)
(2)将大而亮的物体从整幅图中去除:补集
complement (LargeDilation, NotLarge)
2.将小而暗的物体提取:局部阈值
dyn_threshold (ParticlesRed, Mean, SmallRaw, 3, ‘light’)
利用halcon分离分别为大的,小的,亮的,暗的的物体_第2张图片
3.单独显示每个物体
get_mbutton (WindowID, Row, Column, Button)
select_region_point (SmallConnection, SmallSingle, Row, Column)

想法1:进行增强处理
这里验证下我们第一想到的思路,进行增强然后再全局阈值。
1.增强
emphasize
2.全局阈值
threshold
3.进行筛选
select_shape
利用halcon分离分别为大的,小的,亮的,暗的的物体_第3张图片
跟示例程序中的算法相比,能将大多数的目标物体提取出来,但是提取效果不如示例程序中理想。
我们又换了一种方式,在示例程序中第2步中用到增强,再进行全局阈值,效果依旧是不那么理想,没有全局阈值提取的目标物体那么全。这里体现了局部阈值算法dyn_threshold在提取分散物体的优越性。

想法2:直接进行全局阈值
再验证一下不用补集直接局部阈值的情况。
1.局部阈值
dyn_threshold (Image, ImageMean, SmallRaw1, 3, ‘light’)
2.筛选
select_shape(SmallConnection1, SelectedRegions, ‘area’, ‘and’, 0, 350)
整体效果相对于猜想1要好些,但是会有一些目标物体没有提取到,不如示例程序中去除大而暗的干扰再进行局部阈值来得效果好。
利用halcon分离分别为大的,小的,亮的,暗的的物体_第4张图片

小结:对于亮暗物体可以用不同的阈值来提取。如果过暗可以进行增强,但是如果较暗且小还分布广可以考虑局部阈值。在进行对目标物体的提取之前,尽可能把干扰项去除(如本案例中的大且亮物体),对于目标物体的提取将会更准确。

你可能感兴趣的:(算子用法)