1.elliptic_axis_xld(XLD : : : Ra, Rb, Phi)
算子elliptic_axis_xld计算与输入轮廓或多边形具有相同方向和相同长宽比的椭圆的半径和方向。
确定了长半径Ra和短半径Rb的长度以及主轴相对于水平方向(Phi)的方向。
角度用弧度表示。
假设轮廓线或多边形是闭合的。
如果不是这样,area_center_xld将人工关闭轮廓或多边形。
如果矩M20、M02和M11被归一化并传递到区域( 参考moments_xld),
则半径Ra和Rb,Phi计算为:
需要注意的是,elliptic_axis_xld只在轮廓线或多边形在平面中包含一个区域时才返回有用的结果。
特别是,轮廓线或多边形本身不能相交。
这在传递开放轮廓或多边形时尤为重要,
因为它们是自动关闭的,这会产生自交。
要测试轮廓线或多边形是否相交,可以使用test_self_intersection_xld。
如果轮廓线或多边形与自身相交,
则可用elliptic_axis_points_xld计算椭圆参数的有用值。
2.elliptic_axis_points_xld(XLD : : : Ra, Rb, Phi)
elliptic_axis_points_xld计算椭圆半径ra,rb,方向Phi(弧度单位),
此椭圆与XLD有相同的方向Phi及长宽比。
如果轮廓线或多边形是闭合的(端点=起点),
则不考虑轮廓线或多边形的端点,
以避免其接收到的权重是其他点的两倍。
半径Ra和Rb,Phi计算参考如上公式。
3.local_max_contours_xld(Contours, Image : LocalMaxContours : MinPercent, MinDiff, Distance : )
local_max_contours_xld从Contours中选择XLD轮廓,这些轮廓在方向上具有一个局部最大灰度值。
为了进行选择,轮廓点的MinPercent必须具有与轮廓方向的最大局部垂直度。
轮廓线的方向是通过轮廓线的五个相邻点拟合一条回归线来确定的。
为了确定轮廓线点是否存在局部最大值,
在轮廓线两侧计算距离点宽且垂直于轮廓线的灰度值轮廓。
如果轮廓点处的灰度值大于轮廓线两侧至少一点处的灰度值,
则将轮廓点标记为局部最大值。
结果保存于LocalMaxContours 。
参数Contours,Image为输入要被检测的轮廓和对应的灰度图。
LocalMaxContours为输出的结果轮廓
MinPercent最高分的最低百分比。
MinDiff最大灰度值必须大于轮廓中灰度值的最小值。
Distance用于检查maxima的配置文件的最大宽度。
4.test_self_intersection_xld(XLD : : CloseXLD : DoesIntersect)
test_self_intersection_xld测试输入轮廓或XLD中的多边形是否相交或接触。
如果相应的输入轮廓或多边形与自身相交或接触,
则输出数组DoesIntersect包含1,否则为0。
5.test_xld_point(XLD : : Row, Column : IsInside)
test_xld_point测试测试点(Row, Column)是否被轮廓线或多边形XLD包围,
并在IsInside中返回结果。
如果输入点被轮廓线或多边形包围,则返回值为1,否则为0。
在单个测试点和多个轮廓或多边形的情况下,结果元组IsInside的(i-1)-th元素表示该点是被第i个轮廓或多边形所包围。
在多个测试点和单个轮廓或多边形的情况下,得到的元组IsInside的第i个元素表示第i个点是否被轮廓或多边形包围。
在多个测试点和多个轮廓或多边形的情况下,得到的元组IsInside的(i-1)-th元素表示此点是否被对应轮廓包围。
在这种情况下,输入点的数量必须等于轮廓或多边形的数量。
假设轮廓线或多边形是闭合的。
如果不是这种情况,test_xld_point将人工关闭轮廓。
然而,强烈建议在XLD中只传递有意义的闭合轮廓或多边形。
例程
read_image (Image, 'printer_chip/printer_chip_01')
threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
gen_contour_region_xld (SelectedRegions, Contours, 'border')
*
elliptic_axis_xld (Contours, Ra, Rb, Phi)
elliptic_axis_points_xld (Contours, Ra1, Rb1, Phi1)
test_self_intersection_xld (Contours, 'true', DoesIntersect)
test_xld_point (Contours, DoesIntersect, DoesIntersect, IsInside)
gen_contour_region_xld (ConnectedRegions, Contours1, 'border')
local_max_contours_xld (Contours1, Image, LocalMaxContours, 60, 5, 6)
|