raycast op• 資料種類:mesh × keypoints → table
• 呼叫: import fullseye as fs; fs.ledger.cad_pixel_to_surface(mesh, pixels, K=None, R=None, t=None, cull_backfaces=True, image_size=None, strict=False)(要直接呼叫實作,import cadmap; cadmap.cad_pixel_to_surface(mesh, pixels, K=None, R=None, t=None, cull_backfaces=True, image_size=None, strict=False);從台帳取用則 opscadmap.get("cad_pixel_to_surface"))
像素 (N,2) → CAD 面上的 (face_id, 重心座標, 3-D 點)(閉合式)。
為每個像素產生視線(camera.py 慣例: 中心在整數座標,u = 行, v = 列),以 Möller-Trumbore 與所有三角形求交,取最靠前的命中。未命中的像素回傳 face_id = -1,絕不會捨入到最近的面(為了避免在檢測中把「瑕疵落在背景上」變成「面 17 的瑕疵」)。cull_backfaces=True(預設)時,法線不朝向相機的面不算命中。
回傳值是 dict:
• face_id (N,) int64 — 命中三角形的列索引。miss 時為 -1。
• bary (N,3) — 重心座標 (w0, w1, w2),依 F[face_id] 的 3 個頂點的順序。point = w0*V[i0] + w1*V[i1] + w2*V[i2] 嚴格成立。miss 時為 NaN。在邊、頂點上有 1 個分量為 0(容差 1e-9)。
• point (N,3) — 世界座標的交點。miss 時為 NaN。
• depth (N,) — 相機座標的 Z(不是視線距離)。miss 時為 NaN。
• normal (N,3) — 命中面的單位法線(世界座標,依繞向)。miss 時為 NaN(與 bary/point/depth 相同的慣例)。
• hit (N,) bool。
• camera 實際使用的 K/R/t/width/height。即使退回預設值,看這裡也能知道。
• winding_fixed bool — 是否偵測到向內繞的封閉網格(mesh)並在本次呼叫中修正了繞向。一律包含(即使是 False 也包含)。
cull_backfaces=True(預設)且 mesh 封閉、帶正負號體積為負時, 預設會修正繞向並回傳 winding_fixed=True。設為 strict=True 則不修正而以 ValueError 拒絕。cull_backfaces=False 時不做背面判定, 因此繞向不影響結果,也不做檢查,winding_fixed 一律為 False(normal 以輸入繞向的正負號回傳)。詳見 _orient_for_culling。
省略 K/R/t 時,產生把 mesh 收進影像的預設相機(R = I,相機在質心的 -Z 側)。省略 image_size 時,由給定像素的外接框決定影像尺寸 —— 這是為了讓預設相機看向像素所在的位置, 明確給出 K 時,它只影響 in_image 判定。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• 演算法的正典(作者、年份)與用途見上面的族使用指南。
• defect_to_cad — py -3.11 examples/defect_to_cad.py
table 作為輸入)—
raycast)—
*Provenance: cadmap.py — CADMAP 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.