区 域 的 运 算 和 特 征 分 析 区域的运算和特征分析 区域的运算和特征分析
1.区域的运算
区域作差:将一个区域减去另一个区域,便得到区域的差值
算子: difference ()
区域合并(求和)︰将一个区域与另一个区域求和,便可以将两个区域合并为一个区域。
算子:union1()、union2()
区域集合:将两个或者两个以上的区域放入一个集合中,这个集合就成为区域的集合。别注意的是,在集合中,每一个区域都是孤立的,并没有进行合并,要与区域的和进行分。每一个区域称为一个obj。
算子: concat_obj()
区域的选择:从集合中进行区域的选择。
算子: select_obi()
区域的填充:对区域中的孔洞进行封闭,称为空洞的填充。
算子:fill_up()
、fill_up_shape()
区域骨架求取:骨架可以理解为图像的中轴,骨架求取就是求取区域中轴的过程。
算子: skeleton ()
gen_rectangle1 (Rectangle, 123, 196, 186, 356)
gen_rectangle1 (Rectangle1, 123+20, 196+20, 186-20, 356-20)
difference (Rectangle, Rectangle1, RegionDifference)
union2 (RegionDifference, Rectangle1, RegionUnion)
concat_obj (Rectangle, Rectangle1, ObjectsConcat)
select_obj (ObjectsConcat, ObjectSelected, 1)
fill_up (RegionDifference, RegionFillUp)
fill_up_shape (RegionDifference, RegionFillUp1, 'area', 1, 300000)
skeleton (RegionFillUp1, Skeleton)
union1 (ObjectsConcat, RegionUnion1)
2.区域特征分析
- 为什么要学习区域特征:根据前边的讲解,我们已经学会区域的提取,但是如果我们只想从区域中选择其中的一个区域,那该如何选择呢?这就需要用到区域的特征,要根据每一个区域的特征,进行选择出我们需要的区域。
- 常用的区域特征:区域的面积、区域的最小外接矩形的长宽以及角度、区域的角度、区域的凸性、区域的圆度、区域的最小外接圆大小等。
- 区域的面积:区域的像素点的数量总和称为区域的面积。
算子:area_center()
- 区域的最小外接矩形:区域的最小外接矩形,外接矩形的长宽的一半称为长宽半轴,对应的矩形长轴的方向称为区域的方向。
smallest_rectangle2()最小外接矩形2
smallest_rectangle1()最小外接矩形1
区域的角度:区域的角度就是外接矩形的角度。
区域的凸性:每个区域都存在一个最小的凸性区域,这个区域中任意中两点连线都在该区域内,这样的区域就称为区域的凸性区域。其中原区域与凸性区域的比值,称为区域的凸性,其范围是0-1.
shape_trans() 将区域转换为凸性区域(凸包)
convexity() 获取区域的凸性值
区域的圆度:区域的圆度,是指区域边界是否接近圆形的程度,范围是介于0-1.
circularity()
区域的外接圆:能够将区域完全包含的圆区域,称为区域的最小外接圆。
实例
smallest_circle() 获取区域的最小外接圆
region_features() 可以获得区域的任意特征
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw ('margin')
* dev_set_draw ('margin')
* dev_display (Region)
draw_region (Region, WindowHandle)
* 最小外接矩形2
smallest_rectangle2 (Region, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
* 最小外接矩形1
smallest_rectangle1 (Region, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle1, Row1, Column1, Row2, Column2)
* 凸集转换
shape_trans (Region, RegionTrans, 'convex')
convexity (RegionTrans, Convexity)
* 获取区域的圆度
circularity (RegionTrans, Circularity)
gen_circle (Circle, Row, Column, 100.5)
convexity (Circle, Convexity1)
* 获取外接圆
smallest_circle (Region, Row3, Column3, Radius)
gen_circle (Circle1, Row3, Column3, Radius)
region_features (Circle1, 'area', Value)
* 集合
concat_obj (Region, Rectangle, ObjectsConcat)
count_obj (ObjectsConcat, Number)
select_shape (Circle1, SelectedRegions, 'area', 'and', 150, 99999)