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