Halcon Blob分析

斑点分析的思路:在图像中,相关对象的像素可以通过其灰度值来识别。例如下图的组织颗粒。这些颗粒是凉的,而液体是暗的,通过选择明亮像素(阈值),可以很容易地检测到颗粒。在需要应用中,这种简单的暗像素和亮像素的条件不再使用,但是通过额外的预处理或像素选择分组替代方法来实现相同的结果。
在这里插入图片描述
Blob分析的优势在于Halcon在这种情况下提供灵活性。此外,该方法通常具有很高的稳定性。从Blob分析中已知的方法也可以与许多其他视觉算法相结合。例如,可作为预处理提取感兴趣区域。

一 基本概念

Blob分析主要分三步:
在这里插入图片描述

1 获取图像

首先,获取图像。

2 分割图像

获取图像后,获取背景像素,这也称为分割。这个过程通常被称为blob。在Halcon中,数据类型称为区域。

3 提取图像

计算面积(即像素数)重心或方向等特征。

4 示例

下面例子中的程序,实现了上述步骤。获取图像,阈值120,然后算子连接所有明亮像素的集合分离为所谓的连通域。这里的效果,现有多个区域,而不是由阈值返回单个区域。

read_image(Image,'particle')
threshold(Image,BrightPixels,120,255)
connection(BrightPixels,Particles)
area_center(Particles,Area, Row, Column)

在这里插入图片描述

二 扩展概念

在许多情况下,Blobs的分割比上面的程序中的例子更具优势。导致这种情况的原因是:噪点或不均匀的光照。此外,后期处理,需要将特征转换为实物中凸显或可视化。

1 使用感兴趣区域

使用感兴趣区域可以加快Blob分析的速度。搜索Blob的区域有限,搜索速度越快,鲁棒性越好。

2 ROI与图像对齐

在实际使用中,感兴趣区域必须相对于对象保持一定的位置,或者图像本身就需要定位。通过旋转或剪裁等。

3 图像校正

类似,图像需要定位。例如:消除镜头畸变或将图像转换为参考点等。

4 图像预处理(滤波)

图像预处理是比较重要的一步。可以用算子mean_image或gauss_filter来消除噪点。当然可以用算子binomial_filter代替gauss_filter。算子median_image用于抑制小噪点或杂线。各种算子用于平滑边缘,填充等用于消除相机镜头的畸变造成的噪点。

5 提取分割参数

动态阈值,可以动态提取每张图片。若具有多个峰值的灰度值直方图,每个对象对应一个峰值。在这里,可以使用算子替代,根据实际图像的背景综合考虑,并根据实际情况调整灰度值的阈值。

6 图像分割

图像分割有很多方法,最简单的方法是阈值分割,其中指定属于背景的一个或多个灰度值范围。常用算子dyn_threshold,该算子的第二个参数作为图像的引用参数,使用局部阈值而不是全局阈值。局部阈值源自参考图像中。也可以通过算子mean_image动态确定。

7 区域处理

Blob区域被分割,通常需要进行处理。例如:通过抑制小区域,在给定方法的区域或靠近其他区域。可以使用形态学算子opening_circle和opeing_rectangle1用于抑制噪点,而形态学算子closing_circle和closing_rectangle1用于填充空白。可以使用select_shape,select_shape_std和select_shape_proto来选择具有特定属性的Blob。

8 特征提取

图像预处理,提取斑点特征。需要根据具体情况完善程序。

9 处理结果转化

像面积或重心这样的特征通常必须转换为世界坐标。

10 可视化处理

显示图像、blob(区域)和特征。

三 程序实例

使用Halcon进行blob分析

dev_close_window()
dev_update_window('off')

* step1 获取图像
read_image(Image,'D:/Halcon_Study/10707.jpg')
get_image_size(Image,Width, Height)
dev_open_window_fit_image(Image,0,0,Width,Height,WindowHandle)
set_display_font(WindowHandle,16,'mono','true', 'false')
dev_set_draw('margin')
dev_set_line_width(2)
dev_display(Image)
disp_continue_message(WindowHandle,'black', 'true')
stop()

* step2 图像分割
* 使用局部阈值
mean_image(Image,ImageMean,18,18)
dyn_threshold(Image,ImageMean,RegionDynThresh,5, 'light')

* 提取连通域
connection(RegionDynThresh,ConnectedRegions)
dev_display(ConnectedRegions)
disp_continue_message(WindowHandle,'black', 'true')
stop()

* step3 区域处理
shape_trans(ConnectedRegions,ConvexRegions,'convex')
select_shape(ConvexRegions,LargeRegions,'area','and',100,20000)
select_gray(LargeRegions,Image,Crystals,'entropy','and',1,10.6)
dev_display(Image)
dev_display(Crystals)

在这里插入图片描述

在这里插入图片描述
琐碎时间阅读基础知识,详情关注微信公众号“知识代码AI”。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值