图像处理 : 特征提取
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滤波器提取纹理特征 提取指静脉纹理特征 指静脉切割代码