相机变换矩阵应用:如何区分相机前后方的映射点?
相机后方点的投影位置及区分方法
一、相机后方点的投影位置
先把整个投影流程拆解开:
- 世界齐次坐标
X(4维)通过外参Rt转换为相机空间坐标X_cam = Rt * X,其中X_cam的第三个分量z_cam是相机空间深度值——相机前方的点z_cam > 0,后方的点z_cam < 0。 - 内参
K将相机空间坐标转换为图像齐次坐标Y_h = K * X_cam,此时Y_h的第三个分量就是z_cam。 - 最终像素坐标是齐次坐标归一化后的结果:
(u, v) = (Y_h[0]/Y_h[2], Y_h[1]/Y_h[2])。
当点在相机后方时,z_cam < 0,归一化时除以负数,投影位置会呈现以下特点:
- 若前方某点投影到
(u, v),其关于相机光心对称的后方点会投影到(2*cx - u, 2*cy - v)(cx、cy是内参中的图像中心坐标),也就是图像中心的对称点。 - 这类点的投影可能落在图像可视区域内,也可能在区域外,完全取决于点在相机后方的3D位置。
二、区分同一像素的前后方点
核心是检查相机空间深度值的符号,具体步骤:
- 对世界点
X,先计算相机空间坐标X_cam = Rt * X,提取第三个分量z_cam。 - 若
z_cam > 0,说明点在相机前方,是有效可见点;若z_cam < 0,说明点在相机后方,属于无效点。
即使两个点投影到同一像素,它们的z_cam符号必然相反——因为投影到同一像素意味着x_cam/z_cam和y_cam/z_cam的值相同,后方点的x_cam、y_cam、z_cam是前方点对应分量的负数倍,因此通过z_cam的符号就能直接区分。
内容的提问来源于stack exchange,提问作者beedrill
相关产品推荐
相关产品推荐

