1. 针孔相机模型:从物理成像到数学表达
想象一下小时候玩过的"小孔成像"实验——在纸箱上戳个小洞,对面墙上就能出现倒立的影像。现代相机的核心原理与此完全相同,只是用镜头替代了针孔,用CMOS传感器替代了墙面。这个看似简单的模型,却是整个计算机视觉的基石。
在实际工程中,我们常用右手坐标系定义相机空间:Z轴指向镜头前方,X轴向右,Y轴向下。假设空间点P坐标为(X,Y,Z),经过焦距为f的镜头后,在成像平面形成倒立像P'。根据相似三角形原理,可以得到X'=fX/Z和Y'=fY/Z这两个关键公式。不过要注意,原始模型得到的是倒像,而现代相机都会通过软件自动翻转图像,所以我们在推导时可以省略负号,直接把成像平面对称到镜头前方,这样计算更直观。
我第一次做相机标定时,就曾困惑为什么公式里没有负号。后来拆解工业相机才发现,厂商在固件里已经做了图像翻转处理。这个细节提醒我们:理论模型需要根据实际硬件特性进行调整。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 像素坐标系:从物理尺寸到数字图像
成像平面上的坐标还是物理尺寸(毫米),而我们需要的是像素坐标。这就引出了两个关键转换:
- 尺度变换:CMOS传感器每个像素的物理尺寸不同。比如Sony IMX477传感器像素尺寸是1.55μm×1.55μm,意味着每毫米约有645个像素。我们用α和β表示u/v方向的像素密度(pixel/mm)
- 原点偏移:像素坐标系通常以图像左上角为原点,而成像平面以光轴交点为原点,需要平移(cx,cy)
合并这两个变换,得到:
code复制u = αf(X/Z) + cx = fx(X/Z) + cx
v = βf(Y/Z) + cy = fy(Y/Z) + cy
其中fx=αf,fy=βf。这个转换引出了相机内参矩阵K:
code复制K = [[fx, 0, cx],
[0, fy, cy],
[0, 0, 1]]
在无人机视觉项目中,我发现内参的cx/cy并不总是图像中心。某次使用广角镜头时,cx比理论中心偏右15像素,这是因为镜头光学中心与传感器几何中心存在偏差。这个偏差虽然不大,但对立体视觉匹配的精度影响显著。
3. 内参标定实战:从理论到应用
获取准确的内参需要标定过程。推荐使用OpenCV的calibrateCamera函数,配合棋盘格标定
