moment_invariants — 3D moment_invariant op

• 数据种类:points → descriptor

• 调用: import fullseye as fs; fs.ledger.moment_invariants(points) -> 'np.ndarray'(要直接调用实现,import moments3d; moments3d.moment_invariants(points) -> 'np.ndarray';从台账取用则 ops3d.get("moment_invariants"))

用法

对平移+旋转+缩放不变的形状特征向量(Sadjadi–Hall 风格 + 高阶径向分布)。

★输入是 (N,3) 的点云。想从 2-D 区域(图像)得到同类量时, 请不要用本 op,而是使用 HALCON 风格的 moments_region_2nd_invar / moments_region_central_invar / moments_region_3rd_invar(Hu 矩)。名称相似容易混淆,传入 (H,W) 时会以 "points must be a point cloud of shape (N,3)" 失败(2026-09-09,编写 poc_rotation_invariance_audit 时实际踩到)。

处方:

1. 质心中心化(去除平移)。

2. 除以 RMS 半径 R = sqrt(mean‖p-c‖²) 进行尺度归一化(R→1)。这样归一化后的中心 2 阶矩与均匀尺度 s 无关。

3. 列出归一化协方差 C̃ 的主不变量(特征多项式的系数):

λ̂1 >= λ̂2 >= λ̂3 … C̃ 的特征值(= 归一化的主 2 阶矩,

Σλ̂ = 1,旋转不变)

J2 = λ̂1λ̂2 + λ̂1λ̂3 + λ̂2λ̂3 (Sadjadi–Hall 第 2 不变量 = 2×2 主子式之和)

J3 = λ̂1λ̂2λ̂3 (第 3 不变量 = det C̃)

4. 归一化 4 阶径向矩 m4 = mean(‖p̂-c‖⁴)(= mean(r⁴)/mean(r²)²)。r = 到质心的距离,因此旋转+平移不变,已做 RMS 归一化因此尺度不变。

返回的向量为 [λ̂1, λ̂2, λ̂3, J2, J3, m4] (长度 6)。第 1 不变量 J1 = Σλ̂ 经归一化后恒为 1,对识别无贡献,因此省略。J2,J3 是特征值的对称式(冗余),但为了与 Sadjadi–Hall 代数不变量签名兼容而一并列出。

识别能力的细分(honest):

• λ̂1,λ̂2,λ̂3(以及对称式 J2,J3)来源于仅 2 阶矩(协方差特征值), 独立自由度只有主轴长宽比 2 个。仅凭这些,对于 2 阶各向同性的形状(solid cube 与 solid sphere 都是 λ̂≈(1/3,1/3,1/3)) 无法加以区分。

• m4 是径向分布的 4 阶矩,捕捉在 2 阶会被抹平的高阶形状差异。均匀 solid sphere 为 m4=75/63≈1.190,均匀 solid cube 为 m4=19/15≈1.267,两者不同,因此可以分离。

球大致为 (1/3, 1/3, 1/3, 1/3, 1/27, 1.190), 细长的棒趋近于 (≈1, ≈0, ≈0, ≈0, ≈0, 大)。

Returns

np.ndarray, shape (6,)

平移、旋转、尺度不变的特征向量。

补充:

• 输入为 (N,3),N >= 2。形状不正确、非有限、所有点重合(中心化后的扩展为 0)时 ValueError。退化判定是尺度相对的(rms <= 1e-12 × max|centered|),因此不会拒绝仅仅坐标极小的点云。

• 返回值为 float64 (6,)。λ̂ 已在 0 处裁剪(clip),Σλ̂ = 1。

• 不变的只有平移、旋转、均匀尺度。对镜像(翻转)也不变(特征值和径向分布在翻转下不变),因此无法区分镜像体。非均匀尺度和点密度的偏差(采样的疏密)会改变值。

• 对点密度敏感的用途,请在前级用 voxel_grid_downsample 均衡密度。比较使用 shape_distance(台账 op,相同长度的描述子向量之间的距离)。

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

可运行的示例(实际调用该算子并已验证的样例)

• moment_invariants — py -3.11 examples_3d/moment_invariants.py

类型可衔接的下一个算子(可接受 descriptor 作为输入)

fuse_to_voxel · shape_distance

同类别(moment_invariant)

principal_moments · central_moments · inertia_tensor


*Provenance: moments3d.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.