curvature op• 資料種類:points → descriptor
• 呼叫: import fullseye as fs; fs.ledger.shape_index(points, k=25, normals=None)(要直接呼叫實作,import curvature3d; curvature3d.shape_index(points, k=25, normals=None);從台帳取用則 ops3d.get("shape_index"))
Koenderink 的 shape index s∈-1,1。→ (N,)。
臍點/平面判定相對於曲率尺度(無絕對閾值)。平緩的凸/凹(即使曲率極小) 也保留符號=凹凸,平面僅對相對於整體資料的曲率尺度為 0 的點設 s=0。
normals(帶方向的參考法線, (N,3))未指定時開放曲面的凹/凸符號不確定(以凸的幅值回報)。傳入帶方向的法線後會與全域方向一致,給出正確的符號(凹球=cup → -1)。
計算(每個點,與 principal_curvatures 相同的擬合):
• 平面判定: curvedness sqrt((k1² + k2²) / 2) 小於全部點 curvedness 的中位數 × 1e-3 時 s = 0。中位數為 0(無曲率訊號)時全部點為 0。
• 臍點判定: |k1 - k2| < 1e-2 × (|k1| + |k2|) 時 s = sign(k1 + k2)(嚴格為 ±1)。
• 其他情況: s = (2/π) · arctan((k1 + k2) / (k1 - k2))。
• 閾值不是絕對值而是相對於整體資料的曲率尺度,因此即使形狀相同,被視為平面的點也會隨與其他點的混合情況而改變。以對單一點雲進行分類為前提使用。
• 鄰域少於 5 個點的點 k1 = k2 = 0 → 平面(0)。k 截斷為 N-1。
• normals 須為 (N,3) 且各列有限、非零(ValueError)。未指定時開放曲面的符號不確定(凸側)。
• 不包含彎曲的強度。若也需要強度,把 principal_curvatures 的 2 個值排成 (N,2) 後傳給 curvature_to_shape_index。
• blas_threads_and_memory — 矩陣分解為何慢 —— BLAS 執行緒、快取、記憶體配置
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• curvature_grasp — py -3.11 examples_3d/curvature_grasp.py
• itokawa_curvature — py -3.11 examples_3d/itokawa_curvature.py
descriptor 作為輸入)fuse_to_voxel · shape_distance
curvature)principal_curvatures · mean_curvature · gaussian_curvature · estimate_normals
*Provenance: curvature3d.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.