two_view op• 数据种类:image2d × image2d → points
• 调用: import fullseye as fs; fs.ledger.triangulate(pts1, pts2, P1, P2)(要直接调用实现,import twoview; twoview.triangulate(pts1, pts2, P1, P2);从台账取用则 ops3d.get("triangulate"))
DLT 三角化:两视图的对应点 + 投影矩阵 → 3D 点。→ (N,3)。
无穷远点以 NaN 返回(不返回 ±inf)。齐次坐标的第 4 分量为 0 = 2 条视线平行,该对应不确定任何有限的 3-D 点。以前直接相除得到 ±inf,但那样下游的 cheirality 判定 depth > 0 会 把 inf 当作“相机前方”计数(inf > 0 为 True)。recover_pose 从 4 个 (R, t) 候选中选前方点最多的,因此无穷远点若有投票权,候选选择就会悄悄被扭曲。若为 NaN,比较结果为 False,就不会被计数(2026-09-02,chain_fuzz 触达时发现)。
几乎平行但严格来说并不平行的对应,会作为很大的有限值返回。这无法用 NaN 捕获,需要调用方检查距离是否合理。
Raises ValueError:点不是 (N,2)/非有限/对应数不一致。
补充:
• P1、P2 是 (3,4) 的投影矩阵(K[R|t])。对应点是与该 P 相同像素坐标系的 (N,2)。以 cam1 为基准时 P1 = K1[I|0]。
• 对每个点的 4×4 系数矩阵做 SVD 的 Python 循环(与点数成正比)。返回值为 float64 (N,3)。
• 不检查深度的正负(cheirality)。需要前后判定时查看结果的 z 与 R X + t 的 z(recover_pose 在内部进行)。
• 解的单位与 P 的平移 t 相同。若是来自 recover_pose 的 P,则为 |t|=1 的尺度。
• 确定性。不是 (N,2)、非有限、点数不一致为 ValueError。
• depth_sensors — 深度传感器知识 —— 测距原理、实机数值、缺测的表现
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• sfm_recon — py -3.11 examples_3d/sfm_recon.py
points 作为输入)points_to_voxel · gaussians_to_voxel · estimate_point_normals · to_points · match_points_ncc · match_pca · moment_axes · icp_point2point_3d
two_view)fundamental_8point · essential_8point · recover_pose · sampson_distance
*Provenance: twoview.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.