当前位置: 代码迷 >> 综合 >> 【Halcon机器视觉】ch9 特征提取
  详细解决方案

【Halcon机器视觉】ch9 特征提取

热度:39   发布时间:2024-02-20 13:38:25.0

通过分割形态学得到一些图像区域之后,就可以使用特提取想要的区域,通常特征的类型有面积最大的区域、灰度差异大的图、区域面积中心

区域形状特征的算子

  • 区域面积及和中心点坐标信息:area_center()
  • 封闭区域孔洞的面积:area_holes()
  • 根据特征值选择区域:select_shape() 可以根据不同特征选取区域
  • 根据特征值创建区域:inner_circle()
  • 求最小外接矩形:smallest_rectangle2() 矩形与物体方向平行。smallest_retangle1()矩形和坐标轴平行
  • 基于灰度值的特征:gray_features() 获取图像最大最小灰度值
  • 区域最大、最小灰度值:min_max_gray()
  • 灰度区域的面积和中心:are_center_gray() 求的是重心
  • 根据灰度值选择区域:select_gray()

例程1 区域面积和中心点

在这里插入图片描述

*清空显示
dev_close_window()
*读取一张照片
read_image(Image, 'quan1')
*获取图像尺寸
get_image_size(Image, Width, Height)
*显示
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
*转为灰度图像
rgb1_to_gray(Image, GrayImage)
*划分AOI区域 并提取  等价于==gen_rectangle1()+reduce_domain()
rectangle1_domain(GrayImage, ImageReduced, 100, 150, Height-60, Width-100)
*自适应阈值分割 提取暗的部分
binary_threshold(ImageReduced, Region, 'max_separability', 'dark', UsedThreshold)
*显示暗部
dev_clear_window()
dev_display(Region)
*将联通区域分开
connection(Region, ConnectedRegions)
*获取图像面积和中心坐标
area_center(ConnectedRegions, Area, Row, Column)
*获取不连通区域数量
count_obj(ConnectedRegions, Number)
for i:=1 to Number by 1*设置显示对象颜色dev_set_color('red')select_obj(ConnectedRegions, ObjectSelected, i)*设定文字输出的起始坐标点set_tposition(WindowHandle, Row[i-1]+60, Column[i-1])*设定输出文字颜色dev_set_color('blue')*设定字体set_font(WindowHandle,'-System-24-*-0-0-0-1-GB2312_CHARSET-')*输出文字内容write_string(WindowHandle, Area[i-1])
endfor

例程2 统计孔洞面积

*清空显示
dev_close_window()
*读取一张照片
read_image(Image, 'quan1')
*获取图像尺寸
get_image_size(Image, Width, Height)
*显示
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
*转为灰度图像
rgb1_to_gray(Image, GrayImage)*自适应阈值分割 提取暗的部分
binary_threshold(GrayImage, Region, 'max_separability', 'dark', UsedThreshold)
*显示暗部
dev_clear_window()
dev_display(Region)
*计算所有空洞面积和
area_holes(Region, Area1)
*将面积以字符串信息显示在窗口中
disp_message(WindowHandle, 'Size of all holes= ' +Area1+' pixel', 'window', 12, 12, 'black', 'true')

在这里插入图片描述

例程3 选取面积较大几个区域

*清空显示
dev_close_window()
*读取一张照片
read_image(Image, 'quan1')
*获取图像尺寸
get_image_size(Image, Width, Height)
*显示
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
*转为灰度图像
rgb1_to_gray(Image, GrayImage)
*划分AOI区域 并提取  等价于==gen_rectangle1()+reduce_domain()
rectangle1_domain(GrayImage, ImageReduced, 100, 150, Height-60, Width-100)
*自适应阈值分割 提取暗的部分
binary_threshold(ImageReduced, Region, 'max_separability', 'dark', UsedThreshold)
*显示暗部dev_clear_window()
dev_display(Region)
*计算所有空洞面积和
*area_holes(Region, Area1)
*将面积以字符串信息显示在窗口中
*disp_message(WindowHandle, 'Size of all holes= ' +Area1+' pixel', 'window', 12, 12, 'black', 'true')*将联通区域分开
connection(Region, ConnectedRegions)
*获取图像面积和中心坐标
area_center(ConnectedRegions, Area, Row, Column)
*获取不连通区域数量
count_obj(ConnectedRegions, Number)select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 4405, 99999)
dev_clear_window()
dev_display(SelectedRegions)

面积大于等于4405的区域被选出来
在这里插入图片描述

select_shape(SelectedRegions, SelectedRegions1, 'width', 'and', 80, 99999)
dev_clear_window()
dev_display(SelectedRegions1)

宽度大于等于80的被选出来
在这里插入图片描述

例程4 求最小外接矩形

在这里插入图片描述


*清空显示
dev_close_window()
*读取一张照片
read_image(Image, 'luosi1')
*获取图像尺寸
get_image_size(Image, Width, Height)
*显示
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
*转为灰度图像
rgb1_to_gray(Image, GrayImage)
*自适应阈值分割 提取暗的部分
binary_threshold(GrayImage, Region, 'max_separability', 'dark', UsedThreshold)
connection(Region, ConnectedRegions)
select_obj(ConnectedRegions, ObjectSelected, 1)
smallest_rectangle2(ObjectSelected, Row, Column, Phi, Length1, Length2)
gen_rectangle2_contour_xld(Rectangle, Row, Column, Phi, Length1, Length2)
dev_set_window(WindowHandle)
dev_set_draw('margin')
dev_set_line_width(3)
dev_display(Image)
dev_display(Rectangle)

基于图像纹理的特征

形状特征秒速了图像种局部区域的几何属性,在模式匹配中,常常用形状特征作为匹配的依据,因为形状特征具有旋转不变性,并且不易受到颜色和光照影响,抗噪声干扰也强。

  • 纹理特征:包括图像能量、相关性、局部均匀性、对比度等
  • Halcon采用灰度共生矩阵来描述上述特征。
  • 灰度共生举证:反应成对灰度像素点的一种共生关系。
    • 能量,相关性,局部均匀性,反差,
  • 能量: 表示灰度共生矩阵中元素的平方和,能量值越大,表示灰度变化比较稳定,反映均匀性
  • 相似性:表示纹理在行或列方向的相似程度,相关性越大,相似性越高
  • 局部均匀性:反映图像局部纹理的变化量,越大,局部变化越小
  • 反差(对比度):表示矩阵值的差异程度,间接表示图像灰度变化幅度,反差越大,纹理深浅越明显,图像越清晰