成像系统基础:相机成像原理、镜头与传感器
大家好,我是老张。做机器视觉这些年,我见过太多项目栽在成像系统上。说白了,相机没选对,后面算法再牛也白搭。今天咱们就把成像系统这块硬骨头啃下来。
1. 小孔成像:一切视觉的起点
你想想看,最早的相机其实就是个黑盒子,前面戳个小孔。光线穿过小孔,在后面的墙上投出倒像。这就是小孔成像,所有相机的基础。
我刚开始做视觉时,总觉得这原理太简单,没啥好学的。直到有一次,客户要求检测0.01mm的划痕,我折腾了三天,最后发现是成像模型没搞对。嗯,从那以后我再也不敢小看小孔成像了。
小孔成像有几个关键参数:
- 物距:物体到小孔的距离
- 像距:小孔到成像面的距离
- 放大率:像高/物高 = 像距/物距
实际相机用的是透镜,不是小孔。但透镜模型可以等效成小孔模型,这就是我们常说的针孔相机模型。几乎所有视觉算法的坐标变换,都基于这个模型。
核心公式:1/f = 1/u + 1/v
其中f是焦距,u是物距,v是像距。记住这个,后面标定、测量全用得上。
2. 镜头与焦距:选对镜头,项目就成功了一半
镜头这东西,我建议你把它当成眼睛的晶状体。焦距决定了你能看多远、看多宽。
我个人习惯把镜头分成三类:
| 焦距范围 | 特点 | 典型应用 |
|---|---|---|
| 短焦(<12mm) | 视角大,畸变大 | 大范围监控、全景检测 |
| 中焦(12-50mm) | 畸变小,成像自然 | 通用工业检测、定位 |
| 长焦(>50mm) | 视角窄,放大倍率高 | 精密测量、远距离检测 |
我在项目中遇到过最坑的事:选了短焦镜头做精密测量,结果边缘畸变导致测量误差超过0.5mm。后来换成长焦,问题直接解决。所以,做测量,优先选中长焦。
我的经验:选镜头时,留出20%的余量。比如你需要100mm的视野,选焦距时按80mm算。这样边缘画质更好,畸变更小。
3. 光圈与景深:鱼和熊掌的博弈
光圈,就是镜头里那个能开能合的叶片组。光圈越大(F值越小),进光越多,但景深越浅。
为什么会这样?说白了,光圈大了,光线角度更散,只有焦平面上的点才能清晰成像。前后稍微偏一点,就糊了。
我做3D测量时,经常需要大景深。这时候我会把光圈收到F8-F11。虽然进光少了,但整个测量范围内的物体都清晰。代价是什么?需要补光,或者提高曝光时间。
注意:光圈收到F16以上,会出现衍射现象,反而降低成像质量。别以为光圈越小越好,F8-F11通常是最佳区间。
景深计算公式(近似):
DOF ≈ 2 * F * δ * u² / f²
其中F是光圈F值,δ是容许弥散圆直径,u是物距,f是焦距。
嗯,公式看着复杂,但你记住一条:物距越远、焦距越短、光圈越小,景深越大。
4. 传感器:CCD vs CMOS,到底选哪个?
传感器是相机的"视网膜"。CCD和CMOS之争,打了二十年。现在的情况是:
- CCD:噪声低,动态范围大,但速度慢、功耗高
- CMOS:速度快、功耗低、集成度高,但噪声略大
我个人的选择标准很简单:
- 做静态高精度测量,比如PCB检测,选CCD
- 做高速动态检测,比如流水线产品,选CMOS
不过现在高端CMOS已经追上来了。像索尼的IMX系列,噪声控制做得非常好。我最近几个项目全用的CMOS,效果不输CCD。
5. 分辨率:像素不是越多越好
很多人觉得分辨率越高越好。其实不然。分辨率要和你的测量精度匹配。
举个例子:你要检测0.1mm的缺陷。按经验,至少需要3-5个像素覆盖这个缺陷。所以单个像素对应的物理尺寸(即像素当量)应该是0.02-0.03mm。
像素当量计算公式:
像素当量 = 视野宽度 / 水平像素数
比如视野100mm,相机2000万像素(5472×3648),像素当量就是100/5472 ≈ 0.018mm。这个精度足够检测0.1mm的缺陷了。
避坑指南:我曾经为了追求高分辨率,选了1亿像素的工业相机。结果数据量太大,处理速度跟不上,整个产线被拖慢。后来换成2000万像素,精度够用,速度也上来了。
分辨率不是越高越好,够用就行。多出来的像素,只会增加你的计算负担和存储成本。
知识体系总览
下面这张图,是我自己整理的成像系统知识框架。你看一遍,心里就有谱了。
好了,成像系统的基础就这些。记住一句话:成像质量决定了视觉系统的上限。后面讲算法、讲标定,全都建立在今天的基础上。把这些搞透了,后面的路就好走了。
公众号:蓝海资料掘金营,微信deep3321