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.