project op• 資料種類:mesh × points → table
• 呼叫: import fullseye as fs; fs.ledger.cad_surface_to_pixel(mesh, points, K=None, R=None, t=None, image_size=None, cull_backfaces=True, depth_tol=1e-06, strict=False)(要直接呼叫實作,import cadmap; cadmap.cad_surface_to_pixel(mesh, points, K=None, R=None, t=None, image_size=None, cull_backfaces=True, depth_tol=1e-06, strict=False);從台帳取用則 opscadmap.get("cad_surface_to_pixel"))
3-D 點 (N,3) → 像素 + 可見性(遮蔽・背面・出畫分別回傳)。
以 camera.project_points 投影後,再向同一像素重新發射光線, 確認前方沒有別的面。不這樣做的話,會把被遮擋點的像素座標當作「在那裡看得見」一樣回傳。回傳值是 dict:
• uv (N,2) — 像素 (u=行, v=列)。即使是 depth <= 0 的點也會回傳投影值,但會設定 in_front = False。
• depth (N,) — 相機座標 Z。
• in_front (N,) bool — depth > 0。
• in_image (N,) bool — 在畫框內(0 <= u <= width-1 且 0 <= v <= height-1)。
• occluded (N,) bool — 在同一視線上,該點前方有面。
• occluder_face (N,) int64 — 遮擋的面。沒有則為 -1。
• visible (N,) bool — in_front & in_image & ~occluded。
• camera 實際使用的相機。
• winding_fixed bool — 是否偵測到向內繞的封閉網格(mesh)並修正。
depth_tol 是為了不誤判為「被自身的面遮擋」的相對容差, 當 z_hit < depth * (1 - depth_tol) - depth_tol 時判定為遮擋。位於封閉 mesh 背面的點會被前方的牆遮擋而成為 occluded = True —— 這是規格,而不是遺漏。
遮擋判定取決於繞向(若前方的牆作為背面被剔除, 連背面的點也會變成 visible)。因此在 cull_backfaces=True 時會偵測向內繞的封閉網格(mesh),預設修正繞向並回傳 winding_fixed=True。strict=True 時拋出 ValueError, cull_backfaces=False 時根本不做檢查(詳見 _orient_for_culling)。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• 演算法的正典(作者、年份)與用途見上面的族使用指南。
• defect_to_cad — py -3.11 examples/defect_to_cad.py
table 作為輸入)—
project)—
*Provenance: cadmap.py — CADMAP 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.