图像处理 : 特征提取

Posted QtHalcon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像处理 : 特征提取相关的知识,希望对你有一定的参考价值。

​    图像的特征描述了图像的某种属性,当通过分割、形态学处理得到一些区域后,这些区域就构成了一个集合。 常用的特征类型有边缘、角、区域和脊背。

    如何从这些集合中选择出需要的区域,这就需要使用特征作为判断和选择的依据。例如,使用区域的面积作为特征,可以快速提取出面积差异明显的对象;使用灰度值作为特征,可以提取出灰度差异大的图像等。

一、形状特征

    在场景中选择物体的特征是图像测量或者识别的重要基础。区域的形状特征是非常常用的特征,在模式匹配中,常使用形状特征作为匹配的依据。下面就介绍几种常用的与区域形状特征相关的算子。

1.1区域的面积和中心点

    有时候我们通过区域的面积大小,来判定产品的特征。也可以通过提取后的区域获取相应的中心点。常用算子是area_center。

    下面是一个示例:

read_image (Image, 'C:/Users/Administrator/Desktop/testt.png')
rgb1_to_gray(Image,GrayImage)
dev_set_color ('green')
threshold (GrayImage, Region, 0, 20)
connection (Region, ConnectedRegions)
count_obj (ConnectedRegions, Num)
area_center (ConnectedRegions, Area, Row, Column)
dev_set_color ('red')
gen_cross_contour_xld (Cross, Row, Column, 60, 0)

1.2 根据特征值选择区域

    把区域提取到后,再根据区域的特征,来选择区域,如选出矩形或圆形。常用算子是select_shape,该算子的原型如下:

select_shape(Regions : SelectedRegions : Features, 
             Operation, Min, Max : )

    参数1和参数2分别表示输入和输出的区域。

    参数3提供了一个包括多种特征参数的列表,基本包括了区域的常用特征,使用者只需要选择需要的特征,并设置筛选条件,就能得到需要的区域。

  • area :输入区域的面积。

  • row:输入区域中心点的行坐标。

  • column :输入区域中心点的列坐标。

  • width:输入区域的宽度。

  • height:输入区域的高度。

  • circularity :输入区域的圆度。

  • compactness :输入区域的紧密度。

  • convexity:输入区域的凸包性。

  • rectangularity :输入区域的矩形度。

  • outer_radius :输入区域的最小外接圆的半径。

  • inner_radius :输入区域的最大内接圆的半径。

  • inner_width :输入区域的与坐标轴平行的最大内接矩形的宽度。

  • inner_height :输入区域的与坐标轴平行的最大内接矩形的宽度。

  • connect_num:输入区域中非连通区域的数量。

  • holes_num:输入区域包含的孔洞数量。

  • max_diameter :输入区域的最大直径。

    使用这个参数可以快速筛选出有用的特征区域,如通过面积大小来进行筛选。如下面例子:

read_image (Image, 'C:/Users/Administrator/Desktop/test3.png')
rgb1_to_gray(Image,GrayImage)
dev_set_color ('green')
threshold (GrayImage, Region, 0, 20)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 8000, 15000)
area_center (SelectedRegions, Area1, Row1, Column1)
dev_set_color ('green')
gen_cross_contour_xld (Cross1, Row1, Column1, 60, 0)

1.3 通过区域得到特定类型的区域

    在实际应用中,我们得到的区域不是完整的特征,如不是一个完整的圆形,这时就要通过区域来创建一个近似的圆形。

    以下介绍几个常用算子:

    (1) inner _circle

    该算子原型如下:

inner_circle(Regions : : : Row, Column, Radius)

    参数1表示输入的区域,参数2和3为输出参数,表示最大内接圆的圆心坐标。

    以下是一个实例:

read_image (Image, 'C:/Users/Administrator/Desktop/test3.png')
rgb1_to_gray(Image,GrayImage)
dev_set_color ('green')
threshold (GrayImage, Region, 0, 20)
inner_circle (ConnectedRegions, Row2, Column2, Radius)
gen_circle_contour_xld (ContCircle, Row2, Column2, Radius, 0, 6.28318, 'positive', 1)
gen_cross_contour_xld (Cross2, Row2, Column2, 30, 0)

     (2) Smallest_rectangle2

    该算子用于求最小外接矩形。该算子的原型如下:

smallest_rectangle2(Regions : : : Row,Column,Phi, Length1,Length2)
  • Regions表示输入的区域。

  • Row、Column为输出参数,表示最小外接矩形的几何中心坐标。

  • Phi为输出参数,表示最小外接矩形的角度方向。

  • Lengthl、Length2分别表示矩形的两个方向的内径(边长的一半)。

    以下是一个使用实例:

read_image (Image, 'C:/Users/Administrator/Desktop/test4.png')
rgb1_to_gray(Image,GrayImage)
dev_set_color ('red')
threshold (GrayImage, Region, 0, 20)
connection (Region, ConnectedRegions)
area_center (ConnectedRegions, Area, Row, Column)
smallest_rectangle2 (ConnectedRegions, Row1, Column1, Phi, Length1, Length2)
gen_rectangle2_contour_xld (Rectangle, Row1, Column1, Phi, Length1, Length2)
gen_cross_contour_xld (Cross, Row1, Column1, 60, Phi)

二、灰度特征

    除了基于形状的特征以外,比较常用的还有基于灰度值的特征,即利用灰度信息得到特征。

2.1 区域的灰度特征值

    gray_features算子用于计算指定区域的灰度特征值。其输入是一组区域,每个区域的特征都存储在一组 value数组中。算子原型如下:

gray_features(Regions, Image : : Features : Value)
  • Regions:表示要检查的一组区域。

  • Image:表示灰度值图像。

  • Features:表示输入的特征的名字。

  • Value:表示输出的特征的值。

    Features的类型如下:

  • area:灰度区域面积。

  • row:中心点的行坐标。

  • colum:中心点的列坐标。

  • ra:椭圆的长轴。

  • rb:精圆的短轴。

  • phi:等效椭圆的角度。

  • min:灰度的最小值。

  • max:灰度的最大值。

  • mean:灰度的均值。

  • deviation:灰度值的偏差。

  • plane_deviation:近似平面的偏差。

    以下是一个根据通过区域获取区域中灰度平均值:

 

read_image (Image, 'C:/Users/Administrator/Desktop/test5.png')
rgb1_to_gray(Image,GrayImage)
dev_open_window (0, 0, 520, 520, 'black', WindowID)
threshold (GrayImage, Region, 0, 200)
connection (Region, ConnectedRegions)
gray_features (ConnectedRegions, GrayImage, 'mean', Value)
count_obj (ConnectedRegions, Num)
area_center (ConnectedRegions, Area, Row, Column)
*打印各区域的灰度值
for i := 1 to Num by 1
    dev_set_color ('red')
  set_tposition (WindowID, Row[i - 1], Column[i - 1])
  dev_set_color ('red')
  write_string (WindowID, Value[i-1])
endfor

2.2 区域的最大、最小灰度值

    使用min_max_gray算子计算区域的最大与最小灰度值,更具灵活性。min_max_gray算子的原理是基于灰度直方图,取波峰和谷底之间的区域,区域两端各向内收缩一定的百分比,然后在这段范围内计算出最小灰度值和最大灰度值。该算子的原型如下:

min_max_gray ( Regions,Image : : Percent : Min,Max,Range )
  • Regions:表示图像上待检查的一组区域。

  • Image:表示输入的灰度值图像。

  • Percent:表示低于最大绝对灰度值的百分比。

  • Min:表示最小的灰度值。

  • Max:表示最大的灰度值。

  • Range:表示最大和最小值之间的区间。

 

2.3 灰度的平均值和偏差

    intensity算子用于计算单张图像上多个区域的灰度值的平均值和偏差。该算子的原型如下:

intensity (Regions, Image : :: Mean,Deviation )
  • Regions:表示图像上待检查的一组区域。

  • Image:表示输入的灰度值图像。

  • Mean:表示输出的单个区域的灰度平均值。

  • Deviation:表示输出的单个区域的灰度偏差。

 

2.4 灰度区域的面积和中心

    与根据形状特征求面积的方法类似,灰度值图像也可以使用算子直接求出区域的面积和重心。这里用area_center_gray 算子计算一幅灰度值图像的面积和中心。

    area_center_gray算子与 area _center算子类似,都可以求区域的中心。但不同的是,在用 area_center_gray算子求灰度图像的面积时,图像的灰度值可以理解为图像的“高度”,其面积可以理解为“体积”。在求中心时,每个像素的灰度值可以理解为点的“质量”,计算得到的中心是图像区域的重心。而 area_centcr算子计算的中心是几何中心。算子的原型如下;

area_center_gray(Region,Image: : : Area,Row,Colum)

其各参数的含义如下。

  • Regions:表示要检查的区域。

  • Image:表示灰度值图像。

  • Area:表示区域的总灰度值。

  • Row:表示灰度值重心的行坐标。

  • Column:表示灰度值重心的列坐标。

 

2.5 根据灰度特征值选择区域

    与的select_shape算子类似,灰度值图像也可以快捷地根据特征值选择符合设定条件的区域。select_gray算子用于实现这一功能,该算子能接受一组区域作为输入,然后根据选定的特征计算其是否满足特定的条件。当所有区域的特征都计算结束后,图像将在原来的灰度图上输出符合设定条件的区域。该算子的原型如下:

select_gray ( Regions,Image : SelectedRegions : Features,
              0peration,Min,Max:)
  • Regions:表示图像上待检查的一组区域。
  • Image:表示输入的单通道图像。

  • SelectedRegions:表示特征的局部关联性。

  • Features:表示选择的特征。

  • Operation:表示低于最大绝对灰度值的百分比。

  • Min:表示最小的灰度值,默认为128。

  • Max:表示最大的灰度值,默认为255.

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于图像处理 : 特征提取的主要内容,如果未能解决你的问题,请参考以下文章

图像处理基于形状提取和模式匹配组合的面部特征点提取方法(Matlab代码实现)

图像处理代码合集:特征提取-图像分割-分类-匹配-降噪

python实现gabor滤波器提取纹理特征 提取指静脉纹理特征 指静脉切割代码

急求灰度图像LBP特征提取matlab源代码

SIFT图像特征提取 python3.6 + opencv3.3代码

python—sift特征提取