跳到主要内容

阶段二:投影与往返一致性

这个阶段验证单相机内部的几何闭环:从 z-depth 得到相机坐标点,再投影回像素坐标,检查是否回到原来的像素和深度。

任务 4:实现相机点投影

实现:

def project_camera_points(points_c, K):
...

输入:

Pc=(X,Y,Z)P_c=(X,Y,Z)

投影公式:

u=fxXZ+cxu=f_x\frac{X}{Z}+c_x v=fyYZ+cyv=f_y\frac{Y}{Z}+c_y

函数建议同时返回:

  • 像素坐标 (u,v)(u,v)
  • Z>0Z>0 mask
  • 图像边界 mask

单相机 round-trip

测试流程:

DzPc(u,v,Z)D_z \rightarrow P_c \rightarrow (u',v',Z')

应满足:

uuu' \approx u vvv' \approx v ZDzZ' \approx D_z

自动化断言

建议写自动化断言:

assert max_pixel_error < 1e-5
assert max_depth_error < 1e-5

这里的 max_pixel_error 可以定义为:

maxi(ui,vi)(ui,vi)\max_i \left\| (u_i',v_i')-(u_i,v_i) \right\|_\infty

max_depth_error 可以定义为:

maxiZiDz,i\max_i |Z_i' - D_{z,i}|
警告

这只是单元测试,不是完整几何验证。它只能说明单相机的 back-project / project 公式和代码约定一致,不能说明多视角坐标变换、遮挡、可见性都正确。

待补内容

  • project_camera_points() 实现
  • round-trip 单元测试
  • pixel error / depth error 输出
  • Z0Z \le 0 点的处理策略
  • 越界点 mask 的实现