2、相机成像原理:小孔成像模型、相机内参、相机外参、像素坐标系与图像坐标系

大家好,我是你们的老朋友。今天我们来聊聊三维重建里最基础、也最绕不开的一个话题——相机成像原理。

说实话,我刚开始做三维重建那会儿,觉得这东西不就是拍照嘛,有啥好研究的?结果第一次做标定,数据怎么都对不上,折腾了三天才发现是坐标系搞反了。嗯,从那以后,我再也不敢小看这个“小孔成像”了。

2.1 小孔成像模型——相机最朴素的“眼睛”

你想想看,最早的相机长什么样?就是一个黑盒子,前面戳个小孔,后面放块感光板。光线从小孔穿过去,在后面的板上形成一个倒立的像。这就是小孔成像模型。

为什么我们还在用这个模型?说白了,现代相机虽然复杂,但核心原理没变。只不过把小孔换成了透镜,把感光板换成了CMOS传感器。

核心公式:

1/f = 1/u + 1/v

其中 f 是焦距,u 是物距,v 是像距。当物距远大于焦距时,像距约等于焦距。

我在项目中遇到过一个问题:用手机拍一个近处的物体,边缘总是模糊。后来发现,小孔成像模型在近距离时误差很大,必须用更复杂的模型去修正。

2.2 相机内参——相机自己的“身份证”

相机内参,说白了就是描述相机内部光学特性的参数。每个相机都有自己的内参,就像每个人的指纹一样。

主要包括三个东西:

  • 焦距(fx, fy):单位是像素。注意,不是物理焦距,是像素焦距。我刚开始总搞混,后来记住一句话:物理焦距除以像素尺寸,就是像素焦距。
  • 主点(cx, cy):光轴与成像平面的交点。理想情况下在图像中心,但实际总有偏差。
  • 畸变参数:径向畸变和切向畸变。镜头不是完美的,总会有点扭曲。

我的小技巧:标定相机时,多拍几张不同角度的棋盘格照片。我一般拍20-30张,太少的话内参不稳定,太多又没必要。

内参矩阵长这样:

K = [fx  0  cx]
    [ 0  fy  cy]
    [ 0   0   1]

这个矩阵把三维空间中的点映射到二维图像上。你想想看,如果没有这个矩阵,我们根本不知道像素点对应现实世界的哪个方向。

2.3 相机外参——相机在空间中的“位置和姿态”

外参描述的是相机在世界坐标系中的位置和朝向。说白了,就是相机放在哪里、朝哪个方向拍。

外参由两部分组成:

  • 旋转矩阵 R:3x3的矩阵,描述相机的朝向。我习惯用欧拉角来理解,但实际计算时用旋转矩阵更方便。
  • 平移向量 t:3x1的向量,描述相机的位置。

注意:外参是相对于世界坐标系的。如果你把相机移动了,外参就变了。但内参一般不变(除非你变焦了)。

外参矩阵长这样:

[R | t] = [r11 r12 r13 | tx]
          [r21 r22 r23 | ty]
          [r31 r32 r33 | tz]

我曾经犯过一个错误:把旋转矩阵和平移向量的顺序搞反了。结果重建出来的模型,所有物体都歪了45度。嗯,从那以后我每次写代码都会先检查一下矩阵的维度。

2.4 像素坐标系与图像坐标系——两个容易搞混的“坐标系”

这两个坐标系,我刚开始学的时候总觉得差不多。后来发现,差远了。

  • 图像坐标系:以图像中心为原点,单位是物理长度(毫米)。
  • 像素坐标系:以图像左上角为原点,单位是像素。

它们之间的转换关系很简单:

u = x / dx + cx
v = y / dy + cy

其中 (u, v) 是像素坐标,(x, y) 是图像坐标,dx、dy 是每个像素的物理尺寸。

避坑指南:我曾经在写代码时,直接把像素坐标当成图像坐标去算,结果投影出来的点全偏了。记住:OpenCV里默认用的是像素坐标系,而三维重建算法里通常用归一化图像坐标系。

2.5 知识体系总览

为了让大家更直观地理解这些概念之间的关系,我画了一张图:

相机成像原理知识体系 小孔成像模型 相机内参 焦距 fx, fy 主点 cx, cy 相机外参 旋转矩阵 R 平移向量 t 像素坐标系 (u, v) 图像坐标系 (x, y) 转换关系 三维点 → 相机坐标系 → 图像坐标系 → 像素坐标 (外参) (内参)

这张图把整个知识体系串起来了。你从最上面的小孔成像模型出发,往下分成了内参和外参两个分支,最后汇聚到像素坐标系和图像坐标系。说白了,整个三维重建的数学基础,就是这张图。

2.6 实战中的一点感悟

我记得有一次做双目视觉标定,两个相机的内参标出来差别很大。我一开始以为是相机坏了,后来发现是标定板没放平。嗯,标定这件事,细节决定成败。

给大家三个建议:

  1. 标定前先检查相机:看看镜头有没有灰尘,CMOS有没有坏点。我吃过这个亏。
  2. 多拍不同角度:标定板要覆盖整个视野,不要只拍中间。
  3. 验证标定结果:用标定好的参数去投影几个已知点,看看误差有多大。

我的习惯:每次标定完,我都会把内参矩阵打印出来,贴在相机上。这样下次用的时候直接查,不用重新标定。

好了,这一章的内容就到这里。记住:小孔成像模型是基础,内参描述相机本身,外参描述相机位置,像素和图像坐标系是最后一步。把这几个概念理清楚,后面的三维重建就好办了。


公众号:蓝海资料掘金营,微信deep3321