obb — 3D bounds op

• 資料種類:points → primitive

• 呼叫: import fullseye as fs; fs.ledger.obb(points) -> 'dict'(要直接呼叫實作,import pcseg; pcseg.obb(points) -> 'dict';從台帳取用則 ops3d.get("obb"))

用法

用 PCA 求有向包圍盒。

回傳 {center, axes (3,3 columns = box axes), extents (3, half-widths), corners (8,3)}。這是物體被分割出來後,機械臂用來推斷其大小與抓握寬度的緊貼包圍盒。

步驟:對減去質心 c 的點雲做 SVD(full_matrices=False)得到主軸 axes(行 = 奇異值降序,第 1 行為分布最廣的方向),把點映射到主軸座標,由各軸的 min/max 求出半寬 extents 與盒子中心 center(一般與質心不同)。corners 為 center + (±extents) @ axes.T 的 8 個點,符號組合的順序為 meshgrid([-1,1],[-1,1],[-1,1])。

• points:(N,3) 以外拋出 ValueError,少於 2 個點也拋出 ValueError。

• PCA 主軸不保證是「最小體積的盒子」(只是沿著點的分布)。主軸的符號由 SVD 的任意性決定,點的分布接近各向同性(奇異值退化)時軸的方向會不穩定。

• extents 是半寬,因此邊長為 2 * extents。單位為座標單位。

背景知識指南(該運算子背後的物理與規範)

• blender_interop — 與 Blender 搭配使用 —— 在 Blender 中建形、用 fullseye 量測(座標軸、單位、真值資料的陷阱)

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。

• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。

可執行的範例(實際呼叫該運算子並已驗證的樣例)

• hull_bounds — py -3.11 examples_3d/hull_bounds.py

型別可銜接的下一個運算子(可接受 primitive 作為輸入)

fuse_to_voxel · angle_between_lines · angle_between_planes · angle_line_plane · distance_point_plane · distance_point_line · distance_line_line · distance_segment_segment

同類別(bounds)

convex_hull · aabb · min_enclosing_sphere


*Provenance: pcseg.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

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