图形学中的世界、相机、Clip(裁剪)、NDC等坐标系

在计算机视觉中,相机模型通常涉及到的坐标系有世界、相机、归一化平面、像素坐标系等。然而,在图形学里面,在NeRF、3D Gaussian Splatting等三维重建方法,在OpenGL中,会遇到一个NDC(Normalized Device Coordinates,归一化设备坐标)坐标系。这里,将仔细地讲解各个坐标系,以及推导公式。

1、世界坐标系

这个坐标系不做过多的介绍,可前往针孔相机模型推导这里学习。在世界坐标系中,假设一个任意的点为:,这里用齐次坐标进行表达。

2、相机坐标系

这个坐标系也不做过多的介绍, 可前往针孔相机模型推导这里学习。在相机坐标系中,任意一个点为:。从世界坐标系转换到相机坐标系,需要一个外参矩阵,也就是旋转矩阵R和平移矩阵T。用公式表达为:

需要注意的是,在上式中用的不是齐次表达。

3、裁剪和NDC坐标系

这两个坐标系可以一起讲,只相差了一个齐次的除法。例如,在裁剪坐标系下,一个点为,其中为齐次坐标表达的第4维,即齐次尺度因子,作为透视除法的分母,控制近大远小。通常,的大小为深度值,也即

从裁剪坐标系转到NDC坐标系,非常的简单,公式如下:

则NDC坐标系下一个点的齐次表达为

从上述表达可以看到,裁剪坐标系和NDC坐标系其实是一回事,就差了一个透视除法。

3.1 相机到裁剪坐标系推导

接下来,最为重要的是,我怎么将相机坐标系转换到裁剪坐标系。两个坐标系之间的变换,通常是使用一个投影矩阵P,也就是:

核心问题,就在于,如何推导获得这个P矩阵(4*4的矩阵)。在图1中,用AI生成了一个图,详细地表达了上面我推导的公式和关系。

图1:相机坐标系到裁剪坐标系的变换示意图(AI生成)

在裁剪坐标系中,有两个很重要的概念,就是近平面和远平面。相机理论上可以看到从相机前方一直延伸到无穷远的区域,但是图形渲染必须要明确,视椎体中哪些点保留,哪些点丢弃。因此,定义了一个近平面和远平面,只有处于这两个平面之间的区域,才会保留并投影。

定义近平面深度值为,远平面深度值为。将投影到近平面上,根据相似三角形,公式为:

在近平面上,为了将坐标值归一化到-1,1之间,需要除以近平面投影面的宽度和高度

相机的视场角大小fovX和fovY是已知的,则可以根据相机视场角大小推导出的大小,推导的过程如下图所示(AI生成):

在获得之后,对的值做一个归一化,就可得到ndc坐标系中的坐标值,公式如下:

如果,我们令,那么上式表达就可以转为一个矩阵表达P,并用齐次坐标进行表达,整理后如下:

上式中,左边是裁剪坐标系,只需要都除以一个就变成了NDC坐标系。在上式中,投影矩阵P中还存在两个未知数,就是A和B。接下来,推到获取A和B。

除以,就可以得到NDC坐标,因为的,因此公式如下:

当近平面的点代入的时候,;远平面的点代入的时候,,根据这个约束,可得到方程:

通过上面两个方程,就可以直接解出A和B的值,分别为:

到这里,就获得了完成的投影矩阵P,通过该矩阵,可以先将相机坐标系转到裁剪坐标系,再除以一个齐次因子,就转到了NDC坐标系。

相关推荐
OPEN-F18 小时前
ROS2系列教程:Gazebo插件(关节控制/IMU/激光雷达)
c++·python·数码相机·算法·机器人
AomanHao2 天前
【ISP】compression artifact压缩失真情况
图像处理·数码相机·isp·sensor·图像压缩·压缩失真
蜡台2 天前
ux-camera 跨平台相机组件
数码相机·vue·uniapp·camera·nvue·取景框
长江后浪博客2 天前
YOLOv26+500万彩色工业相机实现药品铝塑板颗粒完整度检测:缺粒识别、颜色检测与穹顶漫射光机器视觉方案
数码相机·yolo·机器视觉·yolov26·药品包装检测·铝塑板检测·彩色工业相机
老兵发新帖3 天前
机器人本体:FK/IK
人工智能·数码相机·机器人
格林威3 天前
C# 相机图像阴影校正:使用OpenCvSharp实现工业相机阴影平场校正功能
人工智能·数码相机·opencv·计算机视觉·c#·机器视觉·工业相机
qq_526099134 天前
单口图像采集卡:被低估的那块“桥“
数码相机
中科同志科技先进封装4 天前
真空炉温控模块更换深度解读:工艺流程与优化策略
人工智能·数码相机
格林威4 天前
C#图像夜间识别率提升:使用OpenCvSharp和Halcon融合DeepSORT实现复杂场景下准确识别
开发语言·人工智能·数码相机·机器学习·计算机视觉·c#·视觉检测
敢敢のwings4 天前
LingBot-Depth:把 RGB-D 相机的“缺测”变成可用的空间先验
数码相机