文章目录
前言
参考资料:
1.B站MIT逆向图形学中的机器学习6.S980
本文先介绍了如何将3D物体转换为2D图像,再从2D图像转换为2D像素值
。
最后再讲解如何从2D像素值转换为3D物体
。
一、3D物体 转 2D图像 背景知识介绍
在日常生活中,光线与物体界面的交互,构成了我们眼里的图像。
但是为什么只有眼睛有成像,而像墙壁/桌子等这些平面上不会成像呢?
比如我举着一张纸在半空中,周围环境的物体上的光线也会照到这张纸上,但为什么纸还是一片空白没有图像呢?
原因是因为纸上接收到的光线过于繁杂,纸上的一个点会接收到无数物体反射来的光线,从而什么都显示不出:
于是,针孔摄像机就出现了。假设我们在纸和众多光线之间加一个隔板,隔板中开一个小孔。当中间的的孔足够小时,孔中只能透过一根光线,即纸上一个点就对应一条光线,这样我们就能在纸上看到一颗清晰的倒着的树的成像(之所以是倒着的,是因为光线要到孔的另一边的话,基本只能是斜着进入,除了正对着孔中心的那跟光线才可能正对着孔平行射入):
1.1 3D场景 to 2D图像
而我们的3D场景摄像机也是运用了类似的原理,假设现在有只可爱的小牛牛和一个摄像机,那么成像过程如下所示:
由上图可以看到,Image Plane(成像平面)有着自己的Image坐标系,且x
和y
是反过来的。
这样镜像翻转看终究有点别扭,我们不妨调整一下:
如果只看前面部分的投影牛牛:
这时投影的2维牛牛上每一个点都能对应着3D牛牛的唯一一个点。
为了方便后续公式推导,我们把牛牛去掉,只看正面的坐标系:
已知3D牛牛在3D世界某个点距离摄像机的深度Z和高度Y,以及摄像机的焦距f(focal length),那我们利用相似三角形公式,能很快推出2D牛牛的对应点具体坐标(x,y)
。
注:深度并不是点到摄像机center那根斜线,而是底部的Z长度
至此,我们就得到了3D牛牛世界坐标与图像平面坐标的换算关系:
1.2 矩阵运算表达
由于矩阵运算在多维场景下更方便,我们不妨将上述公式以矩阵形式表达:
我们将原先的2维坐标和3维坐标都以齐次坐标形式进行表示,即在坐标后面再加个1
,故两者的换算关系可以变成下面的矩阵乘法,以方便计算机处理:
这里为什么不是1
而是w
,是为了公式表达的通用性,是1