30.4、Blob--特征提取
1、select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : ) 对象为region 1
2、select_shape_xld(XLD : SelectedXLD : Features, Operation, Min, Max : ) 对象为xld 1
3、select_shape_std(Regions : SelectedRegions : Shape, Percent : ) 对象为region 4
6、fill_up(Region : RegionFillUp : : ) 对象为region 8
7、fill_up_shape(Region : RegionFillUp : Feature, Min, Max : ) 对象为region 8
8、connect_and_holes(Regions : : : NumConnected, NumHoles) 对象为region 9
特征描述了区域的"特征属性"。区域特征(形状特征)描述区域的的几何特征,这些特征不受"相关的"灰度值影响。灰度值特征使用了给定图像的灰度值,通常这个图像来自分割出来的区域。特征提取应用在:
(1)、分割出来区域后,选择满足条件的区域
(2)、区域分类,比如OCR
(3)、测量
(4)、质量检测
特征提取,建议结合特征直方图。笔记《5、图像分割(阈值)》
1、select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : ) 对象为region
功能:根据形状特征选择区域
Regions:输入区域数组
SelectedRegions:输出筛选后的结果
Features:选择的特征,可以选择多个
Operation:每个特征的链接方式(or、and)
例子:
*关闭更新
dev_update_window ('off')
*读取region
read_region (Region, 'c:/region.reg')
*计算中心
area_center (Region, Area, Row, Column)
dev_display (Region)
for Index := 1 to 2 by 1
select_obj (Region, Region1,Index)
*计算圆度
circularity (Region1, Circularity1)
*计算矩形度
rectangularity (Region1, Rectangularity1)
*显示信息
disp_message (3600, '矩形度'+Rectangularity1, 'window', Row[Index-1]-30, Column[Index-1]-20, 'yellow', 'false')
disp_message (3600, '圆形度'+Circularity1, 'window', Row[Index-1]-10, Column[Index-1]-20, 'yellow', 'false')
endfor
*矩形度中选中了矩形,圆度中筛选了圆。用或or把这两个关系链接,所以两个都选中。假如用与and来链接它们关系,两个都不被选中
select_shape (Region, SelectedRegions, ['circularity','rectangularity'], 'or', [0.80776,0.89606], [0.91279,0.97618])
注:这个算子的特征集合:看附录《附录1:region特征全集(select_shape)》
2、select_shape_xld(XLD : SelectedXLD : Features, Operation, Min, Max : ) 对象为xld
功能:根据形状特征选择轮廓xld contour或多边形xld polygon
例:
draw_xld (ContOut, 3600, 'true', 'true', 'true', 'true')
draw_xld (ContOut1, 3600, 'true', 'true', 'true', 'true')
concat_obj (ContOut, ContOut1, ObjectsConcat)
*选择面积为7000-8000的xld contours
select_shape_xld (ObjectsConcat, SelectedXLD, 'area', 'and', 7000, 8000)
*把xld contours转换为xld polygon
gen_polygons_xld (ObjectsConcat, Polygons, 'ramer', 2)
*选择面积为7000-8000的xld polygon
select_shape_xld (Polygons, Selectedpoly, 'area', 'and', 7000, 8000)
注:这个算子的特征集合:看附录《附录2:xld特征全集(select_shape_xld)》
3、select_shape_std(Regions : SelectedRegions : Shape, Percent : ) 对象为region
功能:根据指定的形状选择区域
Shape:指定形状特征('max_area', 'rectangle1', 'rectangle2')
*创建region区域
gen_circle (ROI_0, 105.5, 41.5, 18.4391)
gen_ellipse (TMP_Region, 96.5, 114.5, rad(40.7321), 47.5079, 8)
union2 (ROI_0, TMP_Region, ROI_0)
gen_rectangle1 (TMP_Region, 85.5, 175.5, 125.5, 255.5)
union2 (ROI_0, TMP_Region, ROI_0)
gen_rectangle2 (TMP_Region, 102.5, 334.5, rad(16.1134), 46.8402, 17.8466)
union2 (ROI_0, TMP_Region, ROI_0)
connection (ROI_0, ConnectedRegions)
*筛选出矩形度在95%以上的
select_shape_std (ConnectedRegions, SelectedRegions, 'rectangle1', 95)
4、特征检测工具:
功能:用于特定区域的形状和灰度值检测。
例子(检测region的特征,自动计算出特征的大小):
例子2::检测图像(下图是用region指定图像的某部分)的相关信息如最小灰度值,最大灰度值,平均灰度值,各种异性,熵值等。
5、几个常用特征的原理:
(1)、最小外接圆
(2)、最小外接齐轴矩形
(3)、最小外接仿射矩形
(4)、凸度:Convexity = 转换后面积和转换前面积的比例
(5)、长度
(6)、紧密度
注:这个算子的特征集合:看附录《附录1:region特征全集(select_shape)》
6、fill_up(Region : RegionFillUp : : ) 对象为region
功能:填充区域的所有孔洞
7、fill_up_shape(Region : RegionFillUp : Feature, Min, Max : ) 对象为region
功能:根据指定形状特征填充区域孔洞
Feature:输入特征,只有'area', 'compactness', 'convexity', 'anisometry', 'phi', 'ra', 'rb', 'inner_circle', 'outer_circle'
例子:
*生成region
gen_rectangle1 (ROI_0, 52.5, 116.5, 216.5, 566.5)
gen_circle (TMP_Region, 131.5, 194.5, 63.8122)
difference (ROI_0, TMP_Region, ROI_0)
gen_ellipse (TMP_Region, 135.5, 342.5, rad(-33.2317), 34.6699, 8)
difference (ROI_0, TMP_Region, ROI_0)
gen_circle (TMP_Region, 121.5, 427.5, 22.6274)
difference (ROI_0, TMP_Region, ROI_0)
*填充全部孔洞
fill_up (ROI_0, RegionFillUp)
*填充指定特征的孔洞---填充面积为1~1111孔洞
fill_up_shape (ROI_0, RegionFillUp1, 'area', 1, 1111)
8、connect_and_holes(Regions : : : NumConnected, NumHoles) 对象为region
功能:计算可连通个数和孔洞数量
*生成区域
gen_rectangle1 (ROI_0, 69.5, 81.5, 172.5, 253.5)
gen_circle (TMP_Region, 112.5, 397.5, 40.8167)
union2 (ROI_0, TMP_Region, ROI_0)
gen_rectangle2 (TMP_Region, 105.5, 532.5, rad(-29.5115), 60.9016, 56.4189)
union2 (ROI_0, TMP_Region, ROI_0)
gen_ellipse (TMP_Region, 121.5, 138.5, rad(-38.2902), 24.2074, 8)
difference (ROI_0, TMP_Region, ROI_0)
gen_ellipse (TMP_Region, 107.5, 378.5, rad(-48.0128), 13.4536, 8)
difference (ROI_0, TMP_Region, ROI_0)
*计算可连通个数已经孔洞个数
connect_and_holes (ROI_0, NumConnected, NumHoles)