3. 投影仪成像模型
投影仪怎么建模?这个问题我刚开始做结构光时也困惑过。
相机我们很熟悉——光线从物体反射进入镜头,在传感器上成像。投影仪呢?它刚好反过来:从DMD或LCD芯片发出光线,经过镜头投射到物体表面。说白了,投影仪就是一个「倒着用的相机」。
3.1 投影仪逆相机模型
这个想法很直接:把投影仪的DMD芯片看作相机的传感器,把投影镜头看作相机的镜头。光线方向相反而已。
数学上怎么表达?
// 相机模型(世界→像素)
λ * [u, v, 1]^T = K * [R|t] * [X, Y, Z, 1]^T
// 投影仪模型(世界→投影仪像素)
λ' * [u_p, v_p, 1]^T = K_p * [R_p|t_p] * [X, Y, Z, 1]^T
你看,公式长得一模一样。区别在于:
- 相机是「接收」光线,投影仪是「发射」光线
- 相机的像素坐标是图像坐标,投影仪的像素坐标是编码图案坐标
- 相机的内参描述传感器和镜头关系,投影仪的内参描述DMD芯片和镜头关系
核心理解:投影仪逆相机模型不是近似,是严格的数学对偶。你给相机标定写的代码,改改参数就能给投影仪用。
3.2 投影仪内参与外参
投影仪的内参矩阵长这样:
K_p = [fx_p 0 cx_p
0 fy_p cy_p
0 0 1 ]
参数含义:
- fx_p, fy_p:投影仪在x和y方向的等效焦距(单位:像素)
- cx_p, cy_p:投影仪主点坐标(DMD芯片中心在像素坐标系中的位置)
外参呢?投影仪外参描述的是投影仪坐标系相对于世界坐标系的旋转和平移:
R_p = 3×3 旋转矩阵
t_p = 3×1 平移向量
我遇到过一个问题:投影仪内参的物理意义和相机完全一样,但实际标定时投影仪的「成像」是虚拟的——我们看不到投影仪拍到的图像。这就引出了投影仪标定的核心难点:如何获取投影仪视角下的「虚拟图像」。
我的经验:投影仪内参的fx和fy通常不相等,因为DMD芯片的像素不是正方形。我见过很多新手直接假设fx=fy,结果重建出来的点云变形严重。
3.3 投影仪畸变模型
投影仪镜头也有畸变,和相机一模一样。常用的畸变模型:
// 径向畸变(Brown模型)
x_distorted = x * (1 + k1*r^2 + k2*r^4 + k3*r^6)
y_distorted = y * (1 + k1*r^2 + k2*r^4 + k3*r^6)
// 切向畸变
x_distorted = x + [2*p1*x*y + p2*(r^2 + 2*x^2)]
y_distorted = y + [p1*(r^2 + 2*y^2) + 2*p2*x*y]
参数:
- k1, k2, k3:径向畸变系数
- p1, p2:切向畸变系数
注意:投影仪的畸变通常比相机更明显。为什么?因为投影镜头为了做大光圈、大视场角,光学设计上做了妥协。我曾经标定过一个DLP投影仪,它的径向畸变k1值达到0.15,而同价位的相机镜头一般只有0.02左右。
畸变校正的流程:
- 标定得到畸变系数
- 对投影仪像素坐标做畸变校正
- 用校正后的坐标计算投影光线
嗯,这里要注意:畸变校正是在投影仪像素域做的,不是在3D空间。顺序搞反了,结果全错。
3.4 投影仪与相机的对偶性
这个对偶性不只是数学上的,物理上也有体现:
| 特性 | 相机 | 投影仪 |
|---|---|---|
| 光线方向 | 物体→传感器 | DMD→物体 |
| 成像元件 | CCD/CMOS | DMD/LCD |
| 像素坐标 | 图像坐标 | 编码图案坐标 |
| 标定目标 | 获取内参+外参 | 获取内参+外参 |
| 畸变模型 | 径向+切向 | 径向+切向 |
你想想看,这个对偶性给我们带来了什么好处?
- 标定算法可以复用——OpenCV的calibrateCamera改改就能用
- 畸变校正代码完全一样
- 三角测量时,相机和投影仪的光线方程形式统一
但有个坑:投影仪不能自己看到标定板。所以我们需要借助相机来「帮」投影仪完成标定。具体怎么做?
常用的方法是:
- 相机先标定好(内参+外参)
- 投影仪投射编码图案到标定板上
- 相机拍摄标定板上的图案
- 通过解码得到投影仪像素和3D点的对应关系
- 用这些对应关系标定投影仪
关键点:投影仪标定的本质,就是建立「投影仪像素坐标 ↔ 3D世界坐标」的映射。相机在这里充当了「中介」的角色。
我个人习惯把投影仪和相机看作一对「双胞胎」——结构相同,参数不同,但需要协同工作。标定时,我通常会同时优化两者的参数,做联合标定。这样精度更高,因为考虑了相机和投影仪之间的相对位姿误差。
最后说一句:投影仪逆相机模型不是完美的。实际中,投影仪的景深比相机浅,边缘亮度衰减更明显。但这些是物理限制,不是模型问题。模型本身是严谨的,放心用。