第二章:投影系统与相机模型
各位同学好,我是老张。今天咱们聊聊结构光系统里最基础、也最绕不开的部分——投影仪和相机的数学模型。
说实话,我刚开始做3D测量那会儿,觉得标定就是个麻烦事。后来踩过几次坑才明白:模型建得对不对,直接决定了你的重建精度。你想想看,投影仪和相机本质上都是成像设备,它们遵循的物理规律其实是一样的。
2.1 针孔模型——最朴素的成像原理
先说说针孔模型。说白了,就是一个小孔让光线通过,在后面的平面上成像。这个模型虽然简单,但它是所有现代相机模型的基础。
数学上,一个三维点 \(P = (X, Y, Z)\) 投影到图像平面上的点 \(p = (u, v)\),可以写成:
u = f * X / Z + u0
v = f * Y / Z + v0
这里 \(f\) 是焦距,\((u0, v0)\) 是主点坐标。嗯,这里要注意:实际镜头会有畸变,但针孔模型假设没有畸变,是个理想情况。
核心要点:针孔模型是线性模型,但真实世界是非线性的。我们后面会用畸变模型来补偿这个差异。
我在项目中遇到过一个问题:用针孔模型标定后,重建出来的点云在边缘区域总是有偏差。后来发现是畸变参数没加进去。所以啊,别偷懒,该加的模型参数一个都不能少。
2.2 投影仪——反向的相机
投影仪和相机有什么区别?从数学模型上看,投影仪其实就是个反向的相机。相机是把三维世界投影到二维图像上,投影仪是把二维图案投射到三维物体上。
但实际操作中,投影仪没法直接"看到"物体。所以我们得把它当成一个虚拟相机来处理。怎么做呢?
- 投影仪的像素坐标 \((u_p, v_p)\) 对应着某个三维空间点
- 这个三维点又被相机拍到,得到相机像素坐标 \((u_c, v_c)\)
- 两者之间通过极线几何关联起来
我个人习惯把投影仪和相机看作一对"双目系统"。只不过其中一个眼睛是主动发光的,另一个是被动接收的。
小技巧:标定投影仪时,可以用棋盘格标定板。投影仪投射棋盘格图案,相机同时拍摄。这样就能同时得到投影仪和相机的内外参。
2.3 内外参标定——给设备定个位
标定分两部分:内参和外参。
内参是设备自身的参数,包括焦距、主点、畸变系数。这些参数一旦标定好,只要不拆镜头,基本不会变。
外参是设备之间的相对位置关系,包括旋转矩阵 \(R\) 和平移向量 \(t\)。每次重新安装设备,外参都得重新标。
标定流程大概是这样的:
- 准备一个高精度棋盘格标定板
- 从不同角度拍摄10-20张图像
- 提取角点坐标
- 用张正友标定法求解内参
- 固定内参,求解外参
我曾经犯过一个低级错误:标定板打印出来没贴平,结果标定出来的参数全是错的。后来我学乖了,标定板一定要贴在刚性平面上,最好用玻璃板压着。
避坑指南:标定图像不要都在同一个角度拍。要覆盖整个视场,特别是边缘区域。我曾经只拍了中心区域的图像,结果边缘重建误差大得离谱。
2.4 极线几何基础——匹配的数学桥梁
极线几何解决的是"匹配"问题。在结构光系统中,我们需要知道投影仪的某个像素对应相机的哪个像素。
核心概念就三个:
- 极线:相机图像上的一条直线,投影仪上的一个点只能出现在这条线上
- 本质矩阵 \(E\):描述了两个相机之间的几何关系,只与旋转和平移有关
- 基础矩阵 \(F\):本质矩阵加上内参信息,直接关联像素坐标
数学关系是这样的:
p_c^T * F * p_p = 0
其中 \(p_c\) 和 \(p_p\) 分别是相机和投影仪上的对应点。这个公式告诉我们:匹配点一定满足极线约束。
你想想看,有了这个约束,搜索范围就从整幅图像缩小到一条线上了。效率提升可不是一星半点。
实际应用:在结构光解码时,我们先用极线约束缩小匹配范围,再用相位信息精确定位。两步走,又快又准。
2.5 本章知识体系
下面这张图是我自己画的,把本章的核心逻辑串起来了。你看一遍应该就能明白整个流程。
这张图里,三个模块是环环相扣的。相机模型和投影仪模型各自独立标定,然后通过极线几何建立联系。没有这一步,后面的三维重建就是空中楼阁。
2.6 实际标定中的注意事项
最后分享几个我这些年积累的经验:
| 项目 | 建议 | 原因 |
|---|---|---|
| 标定板尺寸 | 覆盖视场的60%以上 | 太小了外参不准,太大了边缘畸变难标 |
| 拍摄张数 | 15-20张 | 太少解不稳定,太多浪费时间 |
| 角度变化 | 俯仰角±30°,偏航角±30° | 覆盖不同视角,提高标定鲁棒性 |
| 光照条件 | 均匀照明,避免反光 | 反光会导致角点提取偏差 |
嗯,差不多就这些。标定这事儿,说难不难,说简单也不简单。关键是多动手、多验证。我刚开始做的时候,标定一次要花一整天,现在熟练了,半小时搞定。
记住一句话:标定精度决定了你的系统上限。后面所有的工作,都是在这个基础上展开的。