机器视觉——(二)halcon区域分割与特征提取

区域分割与提取

区域分割通常是根据阈值分割出想要的区域。以下例子是从由模板匹配到的区域中继续分割出Mark点区域。
步骤如下:

  1. 读取图片并进行滤波处理。常用算子:mean_image、median_image等。
  2. 进行阈值分割,初步提取Mark点区域。常用算子:threshold等阈值分割算子。
  3. 形态学优化。常用算子:closing类算子、opening类算子、erosion类算子、dilation类算子。
  4. 区域提取。常用算子:connection、select_obj等操作区域的算子。

自定义算子:optimize_region描述如下:
根据阈值分割出ROI区域,并使用结构元参数生成结构元,进行先腐蚀后膨胀的形态学运算。
gray_image:输入的灰度图像
Regions_dilation:输出的优化图像
minT:最小阈值
maxT:最大阈值
以下3个属性参照gen_circle算子含义
r_row:结构元的row
r_column: 结构元的column
r_radius:结构元的radius
iterations:形态学优化的迭代次数

optimize_region实现如下:

*根据阈值分割图像,得到ROI区域
threshold (gray_image, Regions, minT, maxT)
********形态学操作,消除不想要的特征**********
*生成结构圆
gen_circle(circle,r_row,r_column,r_radius)
dev_clear_window()
erosion1(Regions,circle,Regions_erosion,iterations)
dilation1(Regions_erosion,circle,Regions_dilation,iterations)

自定义算子:area_num_length_width 描述如下:
计算连通区域个数,面积,长度,宽度。
Regions_dilation:优化后的特征图
ConnectedRegions:连通计算后的结果图
Length:保存各个区域长度的数组
Width:保存各个区域宽度的数组
num:连通区域个数
Area:连通区域的面积

area_num_length_width 实现如下:

 *保存各个区域长和宽的数组
Length :=[]
Width :=[]
connection (Regions_dilation, ConnectedRegions)
*统计连通区域个数
count_obj (ConnectedRegions, num)
*获取连通区域的面积和中心点
area_center(ConnectedRegions, Area, Row, Column)
*获取每个区域的最小外接矩形
smallest_rectangle1 (ConnectedRegions, Row_left, Column_left, Row_right, Column_right)
*根据最小外接矩形计算每个区域的长和宽长和宽
for index := 0 to |Area|-1 by 1
    Length[index] :=Row_right[index]-Row_left[index]
    Width[index] :=Column_right[index]-Column_left[index]
endfor

提取出的Mark点的结果如下:
原图像
提取出的Mark点及相关信息

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值