moments_xld(XLD : : : M11, M20, M02)
moments_xld计算由轮廓线或多边形XLD包围的区域的矩(M20、M02和M11)。
有关这些特性的定义,请参见moments_region_2。
利用格林定理,仅利用轮廓线或多边形上的点,
即,没有为计算特征而显式生成区域。
假设轮廓线或多边形是闭合的。
如果不是这样,moments_xld将人工关闭轮廓或多边形。
需要注意的是,moments_xld只在轮廓线或多边形在平面中包围一个区域时返回有用的结果。
特别是,轮廓线或多边形本身不能相交。
这在传递开放轮廓或多边形时尤为重要,因为它们是自动关闭的,这会产生自交。
要测试轮廓线或多边形是否相交,
可以使用test_self_intersection_xld。
如果轮廓线或多边形与自身相交,
则可以使用弯矩s_points_xld计算弯矩的有用值。
1.moments_points_xld(XLD : : : M11, M20, M02)
moments_points_xld计算由轮廓线或多边形XLD(即,不考虑轮廓或多边形中点的顺序)。
因此,力矩由以下公式给定
为质心,n为点的个数.
如果轮廓线或多边形是闭合的(端点=起点),则不考虑轮廓线或多边形的端点,
以避免其接收到的权重是其他点的两倍。
2.moments_any_xld(XLD : : Mode, PointOrder, Area, CenterRow, CenterCol, P, Q : M)
moments_any_xld计算由轮廓线或多边形XLD包围的区域的任意矩M。
利用格林定理,仅利用等值线或多边形上的点,
即,没有为计算特征而显式生成区域。
假设轮廓线或多边形是闭合的。
如果不是这样,moments_any_xld将人工关闭轮廓或多边形。
计算得到的矩根据所需模态Mode归一化:
unnormalized 没有归一化
unnormalized_central 通过质心移动区域
normalized
面积A =封闭图像区域的Area归一化
central
面积A的归一化=封闭图像区域的Area和区域的质心位移
对于矩的归一化,我们使用了三个特定的矩:
封闭图像区域的Area和坐标中心CenterRow, CenterCol这个值可以用area_center_xld计算)。
除了moments_any_xld需要输入轮廓/多边形的点顺序信息(PointOrder)之外,
请再次参阅area_center_xld。
类似的函数moments_any_points_xld(XLD : : Mode, Area, CenterRow, CenterCol, P, Q : M)
moments_any_points_xld计算轮廓线或多边形XLD(即,不考虑轮廓或多边形中点的顺序)。
例程
dev_close_window ()
dev_open_window (0, 0, 768, 576, 'black', WindowID)
read_image (Rim, 'rim')
threshold (Rim, Dark, 0, 128)
connection (Dark, DarkRegions)
select_shape (DarkRegions, Circles, ['circularity','area'], 'and', [0.85,50], [1.0,99999])
dilation_circle (Circles, ROIOuter, 8.5)
erosion_circle (Circles, ROIInner, 8.5)
difference (ROIOuter, ROIInner, ROI)
union1 (ROI, ROIEdges)
reduce_domain (Rim, ROIEdges, RimReduced)
edges_sub_pix (RimReduced, Edges, 'canny', 4, 20, 40)
select_shape_xld (Edges, SelectedXLD, 'area', 'and', 150, 99999)
moments_xld (SelectedXLD, M11, M20, M02)
moments_points_xld (SelectedXLD, M111, M201, M021)
moments_any_xld (SelectedXLD, 'unnormalized', 'positive', M111, M111, M111, 1, 1, M)
moments_any_points_xld (SelectedXLD, 'unnormalized', M, M, M, 1, 1, M1)
|