其他分享
首页 > 其他分享> > 7. 如何根据特征过滤区域和轮廓

7. 如何根据特征过滤区域和轮廓

作者:互联网

 

halcon 中过滤特征的算子总共有 3 种,分别为:

 

1. select_shape()  根据区域的一些的特征(面积、圆度等)进行过滤,得到我们需要的区域。

2. select_shape_std ()  将给定区域的形状与默认形状进行比较。 如果该区域具有相似的形状,则输出为相似的形状。

3. select_shape_proto()  过滤出彼此具有一定关系的区域,即过滤出来的区域彼此之间具有一定的关系。

 

1. select_shape()


dev_open_window (0, 0, 512, 512, 'black', WindowHandle)


read_image (Image, 'fabrik')

threshold (Image, Region, 128, 255)

* 不同的颜色代表不同的区域
connection (Region, ConnectedRegions)

* 根据区域的一些的特征(面积、圆度等)进行过滤,得到我们需要的区域
* 根据面积范围[8000, 9000]对上述不同颜色的区域进行过滤
* 参数3: 特征类型,即用什么样的特征进行过滤
* 参数4: 比如我们同时希望对区域采用面积和最大直径进行过滤,即参数3为['area','max_diameter'],则参数4采用'and';若希望
* 使用两者中的一个进行,则采用‘or’; 此处由于只有一个特征,所以参数4的‘and’在此处作用不大
dev_display (Image)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 8000, 9000)

dev_display (Image)
dev_display (SelectedRegions)

图1.1 所示为采用 select_shape() 中的面积特征来找到我们需要的区域 

图1.1 使用select_shape()中的面积特征来得到需要的区域

 

2. select_shape_std()

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

read_image (Image, 'fabrik')

threshold (Image, Region, 128, 255)

* 不同的颜色代表不同的区域
connection (Region, ConnectedRegions)


*算子select_shape_std将给定区域的形状与默认形状进行比较。 如果该区域具有相似的形状,则输出为相似的形状.
* 遍历上述分割的联通域,寻找相似度在 90% 以上的矩形
* 参数1:输入参数;参数2:输出参数,即过滤出来的区域
select_shape_std (ConnectedRegions, SelectedRegions1, 'rectangle1', 90)

dev_display (Image)
dev_display (SelectedRegions1)

图1.2 所示为在 connection() 算子分割后的区域 上寻找相似度在 90% 以上的区域

图1.2 使用 select_shape_std() 中的矩形特征在联通域中寻找相似度在90%以上的区域

 

3. select_shape_proto()

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

read_image (Image, 'fabrik')

threshold (Image, Region, 128, 255)

* 不同的颜色代表不同的区域
connection (Region, ConnectedRegions)

* 根据区域的一些的特征(面积、圆度等)进行过滤,得到我们需要的区域
* 根据面积范围[8000, 9000]对上述不同颜色的区域进行过滤
* 参数3: 特征类型,即用什么样的特征进行过滤
* 参数4: 比如我们同时希望对区域采用面积和最大直径进行过滤,即参数3为['area','max_diameter'],则参数4采用'and';若希望
* 使用两者中的一个进行,则采用‘or’; 此处由于只有一个特征,所以参数4的‘and’在此处作用不大
dev_display (Image)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 8000, 9000)

dev_display (Image)
dev_display (SelectedRegions)
 
*  算子select_shape_proto 过滤出彼此具有一定关系的区域。即过滤出来的区域彼此之间具有一定的关系
* 在上述分割的联通域ConnectedRegions中找出与SelectedRegions具有一定关系区域,这个关系是以distance_center为基础的
* 过滤出 SelectedRegions 的中心到 ConnectedRegions 中每个区域中心距离 在0-200之间的区域
select_shape_proto (ConnectedRegions, SelectedRegions, SelectedRegions2, 'distance_center', 0, 200)

dev_display (Image)
dev_display (SelectedRegions2)

下图中左图为进行 connection() 算子之后形成的不同的联通域图;右图为采用 select_shape() 算子过滤后的图像 。即在ConnectedRegions 区域中寻找与 SelectedRegions 区域存在‘distance_center’ 关系的区域。

 图 1.3 所示为过滤出 SelectedRegions 的中心到 ConnectedRegions 中每个区域中心距离 在0-200之间的区域

图1.3 过滤出 SelectedRegions 的中心到 ConnectedRegions 中每个区域中心距离 在0-200之间的区域
图1.4 select_shape_proto() 得到的效果图

 

标签:区域,dev,shape,过滤,轮廓,ConnectedRegions,select
来源: https://blog.csdn.net/MrYaoLing/article/details/88381366