gen_parallels_xld(Polygons : Parallels : Len, Dist, Alpha, Merge : )
gen_parallels_xld检查在多边形Polygons 中传递的XLD多边形的并行性。
得到的结果保存于Parallels 。
如果参数Merge被设置为“true”,相邻的并行多边形将以单个并行关系返回。
否则,每对平行线段返回一个并行关系。
只考虑长度超过Len的多边形的线段。
两个多边形线段是否平行取决于允许的最大角度差Alpha(弧度单位)。
此外,两段在角平分线上的投影必须重叠。
最后,将角平分线上的重叠部分重新投影到两段上。
如果重投影的最大距离小于Dist,则段存储到Parallels 。
对比mod_parallels_xld,为每对并行计算一个质量因子作为一个副作用。
它基于归一化角差和重叠的归一化长度,公式:
ba为多边形段的角度差,overlap为重叠长度,len1,len2为多边形段长度,
q生成的品质因素,质量因子是并行度的度量,值越大越平行。
最后,将单个多边形中包含的所有平行多边形段的质量因子相加,
并对其重叠区域的长度进行加权。
注意,您可以使用info_parallels_xld查询质量因子的范围。
例程
*读取一张图
read_image (Image, 'metal-parts/metal-parts-01')
*阈值分割
threshold (Image, Region, 100, 255)
*提取区域边缘
boundary (Region, RegionBorder, 'inner')
*开运算,扩大区域
dilation_circle (RegionBorder, RegionDilation, 1.5)
*提取区域对应图像
reduce_domain (Image, RegionDilation, ImageReduced)
*提取图像XLD轮廓
edges_sub_pix (ImageReduced, Edges, 'lanser2', 0.5, 40, 90)
*轮廓分割成线和圆
segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 6, 4, 4)
*生成多边形xld
gen_polygons_xld (ContoursSplit, Polygons, 'ramer', 2)
*提取平行线
gen_parallels_xld (Polygons, Parallels, 30, 30, 0.15, 'false')
*单步执行查看图形对象
count_obj (Parallels, Number)
for i:= 1 to Number by 1
select_obj (Parallels, ObjectSelected, i)
endfor
|