机器视觉——(二)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点的结果如下:

机器视觉——(二)halcon区域分割与特征提取_第1张图片

你可能感兴趣的:(机器视觉,计算机视觉)