7. 如何根据特征过滤区域和轮廓
作者:互联网
halcon 中过滤特征的算子总共有 3 种,分别为:
- select_shape()
- select_shape_std()
- select_shape_proto()
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() 中的面积特征来找到我们需要的区域
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% 以上的区域
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之间的区域
标签:区域,dev,shape,过滤,轮廓,ConnectedRegions,select 来源: https://blog.csdn.net/MrYaoLing/article/details/88381366