cad_pixel_to_surface — CADMAP 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.