从零开始的三维重建(二)—— 相机标定(上)

在第一部分中我们讲了有关矩阵变换的知识,具体内容可以参考以下链接:从零开始的三维重建(一)—— 矩阵变换。既然我们好不容易学会了,那肯定要多加使用对吧。那么对于三维重建来说,最早也是最多使用这些知识的地方就是相机标定。如果说矩阵变换是三维重建中的数学基础,那么相机标定就是三维重建实际操作中的应用基础。我们在解决单视图重建、MVS、SFM、SLAM等问题时相机标定是必要的一步。简单来说,相机标定就是要把我们在正常三维世界下的坐标转换成为相机坐标,从而进行进一步的计算,没有这一步我们就无法获得物体在三维世界中的信息。当然如果是我们想进行三维重建的话,正常来说应该是做逆运算,从相机坐标还原到世界坐标。因为原理都是一样的,为了方便理解和讲解,我们就先从正常的相机标定开始说起。关于这部分内容在这里也给大家推荐一门课,来自我本科母校老师的网课,我个人觉得讲的还是很不错的:2022B站最好最全的【三维重建】课程!!!北邮教授竟然把三维重建讲的如此通俗易懂,学不会UPZHIJIE 退网下架!!!-人工智能/计算机视觉/三维重建

摄像机模型

假设我们想要将一个三维世界的物体记录到相纸上,我们面对的问题是这样的。真实世界
我们很明显会发现同一个胶卷点位出现了不同物体点位,这肯定是不行的,我们需要让一个点位只出现一个物体的点位。
因此人们就发明了很多相机模型。
首先是针孔摄像机,如下图。
针孔摄像机
我们只留一个很小的针孔让光通过,过滤掉其它不通过这个针孔的光源,从图中我们可以看出胶片上一个点位就只能出现一个物体点位,这就成功实现了摄像。针孔摄像机是最简单的相机模型,但它包含了摄像机最重要的数学原理。我们假设针孔(也就是摄像机中心)到像平面的距离是f(也就是焦距)。我们可以计算得到如下公式。
针孔相机模型计算
在摄像机坐标系下,对于三维坐标下物点P(x,y),我们可以得到唯一对应的像点P‘(x’,y’),坐标关系如上图,因为是一个简单的相似三角形,所以我们就不再过多解释了。现在我们通过针孔摄像机模型,成功将物体记录在胶卷上了,但除此之外,摄像机还存在光圈的问题。如下图所示,光圈越大的时候物体会越亮,但成像也就越模糊,光圈越小的时候成像越清楚,但物体越暗,这其实也很好理解,光圈决定了物体反射光通过针孔的通量,但同时针孔越大就像我们一开始所说的,不同物体点会映射到同一胶卷点位上,产生模糊。
光圈
那考虑一个问题,现在如果我们想让成像清晰的同时物体还很亮,应该如何处理?很明显只用针孔摄像机已经不够用了,这时候人们的做法就是增加一个透镜,让同一点位射出的多条光线能聚焦到胶片的同一点位上,这其实就是比较仿真的摄像机了。具体的物理模型我们可以参考下图。
透镜摄像机
我们可以注意到,虽然通过的光线增加了,但根据通过摄像机原点的光线依旧符合针孔摄像机的数学模型我们可以发现,我们在计算针孔摄像机时得到的数学公式在加了透镜之后依然可以使用,不会对我们的公式造成任何影响(如上图)。之后这也将作为我们做相机标定时的重要数学依据。
除了一些有关摄像机数学方面的问题以外,我们再讨论几个摄像机会出现的问题。首先是失焦问题,如下图。
失焦
如果我们的透镜折射能力不足,就会出现失焦的问题,很明显图中从一个点射出的光线没能在胶片上汇聚到一个点上。这种情况我们称为失焦。这就引出了一个新的概念:景深。怎么简单解释一下景深呢,用一张图看一下吧。
景深
我们不需要知道这么复杂,我们只需要看左上角的那个ΔL就可以了。那个就是景深。简单来说景深就是能看清一个物体的最长前后距。我们可以想象一下,因为透镜有时聚焦能力不够所以会造成成像模糊,那么在正好能聚焦位置的前后都应该各有一模糊点能让人刚刚好看清,这两个点间的距离就是焦深,那么对应的如果胶片位置不变,那么在相机位置前后应该各有一个位置使得到达胶片的物点恰好能看清,这两个点间的距离就是景深。当然具体计算我们还不需要掌握,这就有点超出三维重建的范围了。
还有一个是关于透镜径向畸变的问题,用下图说明是最直接的。径向畸变
径向畸变常见于鱼眼相机,有枕形畸变和桶形畸变两种。如图,虚线为真实图像轮廓,实线为实际图像轮廓,我们可以看到,对于枕形畸变,像点会更加向外偏移,而对于桶形畸变,像点会更加向内靠拢。导致这种畸变的主要原因是光在远离透镜中心的地方比靠近的地方更加弯曲。在后续实际三维重建中我们也会遇到类似的问题,因此也要针对有畸变的相机进行图像重建,具体做法我们会后续再谈。

摄像机几何标定

在了解完具体的摄像机模型之后,我们来进行相机标定。这个过程中主要以矩阵运算为主,具体的运算方法上节内容已经说过了,而且这节的矩阵运算量很大,需要辨识的矩阵很多,所以这节内容我会直接写出结果,而不考虑中间的计算过程。
首先假设我们有物点P(x,y,z),我们想要把它映射到胶卷上总共需要经过两部分的参数变换,我们定义为相机内参相机外参。相机外参的工作就是把物点通过旋转平移等等的变换,将处于世界坐标下的物体转换到相机坐标中,然后再经过相机内参的处理将相机坐标原点从左下角平移到正中心,完成标定。具体我们来一部分一部分说明。

相机内参

相机内参
如上图所示,对于一个三维空间中的物点P(x,y,z),根据之前我们说过的摄像机模型中我们说的投影知识,我们可以得到如图所示的坐标关系,其中f跟之前一样表示焦距,而fk和fl的作用是把真实世界中米的坐标单位转换为像素平面以pixel为单位,k和l分别代表着胶片横纵坐标单位转换的参数。在真实计算中因为fk和fl都是常数,为了简化计算我们分别定义为α和β。当然我们会发现图中的坐标变换和我们之前说的坐标变换,有一点不一样,横坐标加了cx,而纵坐标加了cy,这是因为我们需要把坐标原点从左下角移到正中心,因此进行了二维空间中的平移操作。
我们把投影矩阵M写成矩阵形式如下,当然我们要保证我们的矩阵是齐次的(原因上一节内容说过了):
M = [ α 0 c x 0 0 β c y 0 0 0 1 0 ] M= \begin{bmatrix} α & 0 & c_{x}& 0 \\ 0 & β & c_{y} & 0 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix} M= α000β0cxcy1000
这样我们就可以计算得到像点P’=MP(P’是一个三维坐标,对z进行归一化,即对xyz坐标都除以Z以后,舍去等于1的z坐标,得到的就是P’在二维平面上的坐标)。通常像素平面坐标系之间都是相互垂直的,像平面可以实现良好的映射,但有的时候像素平面不是垂直的,如果我们假设像素平面y轴和x轴之间存在夹角θ,对于该并不垂直的坐标系,我们假设像点在该平面下的横纵坐标分别为x’和y’,我们希望尽管摄像机像素平面存在一定缺陷,但生成的像点依旧是原本像点所处的位置,如下图所示。
像素平面不垂直的映射
因此我们可以列出几何公式为:
y = y ′ s i n θ x = x ′ + y ′ c o s θ y = y'sinθ\\ x = x' + y'cosθ y=ysinθx=x+ycosθ
解得:
y ′ = y / s i n θ x ′ = x − y c o t θ y' = y/sinθ\\ x' = x - ycotθ y=y/sinθx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值