1. 相机成像基础与ISP概述
各位同学,欢迎来到《相机图像信号处理全流程技术指南》的第一章。
做ISP这行,说白了就是跟光打交道。你得先理解光怎么进来,传感器怎么把它变成电信号,然后我们才能谈怎么处理它。我见过不少新人一上来就猛啃去噪、锐化算法,结果连Bayer阵列是干嘛的都没搞明白——嗯,这样很容易走弯路。
这一章,我们先打好地基。从人眼看到相机,从镜头到传感器,最后给你一张ISP Pipeline的全景图。看完你就知道,整个图像处理链条到底有多长。
1.1 人眼视觉特性——我们到底在骗谁?
相机拍出来的照片,最终是给人看的。所以你得先了解人眼是怎么看世界的。
人眼其实不是一个完美的成像系统。它有几个明显的“缺陷”,而ISP恰恰是利用这些缺陷来“作弊”的。
- 亮度感知是非线性的:人眼对暗部细节极其敏感,对亮部则比较迟钝。这就是为什么我们常用Gamma曲线来编码图像——把更多的比特分配给暗部。
- 色彩分辨率远低于亮度分辨率:人眼对亮度的变化很敏感,但对颜色的变化就马虎多了。你想想看,Bayer阵列为什么是RGGB?因为人眼对绿色最敏感,所以绿色像素多一倍。
- 对比度敏感度函数(CSF):人眼对不同空间频率的敏感度不一样。对中频最敏感,低频和高频都差一些。ISP里的去噪和锐化,很大程度上就是在迎合这个特性。
1.2 相机成像原理——光是怎么变成照片的?
一台相机,核心就四个字:控制进光。镜头、光圈、快门、ISO,这四兄弟配合好了,才能得到一张曝光合适的原始图像。
1.2.1 镜头与光圈
镜头负责把外界的光线汇聚到传感器上。光圈是镜头里一个可调节的孔,控制进光量的大小。
- 光圈值(F-number):F值越小,光圈越大,进光越多,景深越浅(背景虚化)。
- 我的踩坑记录:我曾经为了追求大光圈的虚化效果,把F值开到1.4,结果边缘画质崩得一塌糊涂。镜头都有最佳光圈范围,一般在F5.6到F8之间,别盲目开最大。
1.2.2 快门
快门控制传感器感光的时间长短。快门速度越快,运动物体拍得越清晰,但进光量也越少。
- 安全快门:手持拍摄时,快门速度一般不要低于焦距的倒数。比如用50mm镜头,快门别低于1/50秒。
- 卷帘快门效应:CMOS传感器是逐行曝光的,拍快速运动的物体时,画面会扭曲——这就是果冻效应。做ISP时,有时候需要做果冻效应矫正。
1.2.3 ISO(感光度)
ISO本质上是传感器信号的放大增益。ISO越高,信号被放得越大,画面越亮,但噪声也越明显。
| ISO值 | 进光需求 | 噪声水平 | 典型场景 |
|---|---|---|---|
| 100-200 | 充足 | 极低 | 晴天户外 |
| 400-800 | 一般 | 轻微 | 阴天/室内 |
| 1600-3200 | 不足 | 明显 | 夜景/暗光 |
| 6400+ | 极低 | 严重 | 极限暗光 |
1.3 传感器类型——CCD vs CMOS
传感器是相机的“视网膜”。目前主流就两种:CCD和CMOS。
- CCD(电荷耦合器件):每个像素的电荷需要逐行转移到输出放大器。优点是噪声低、画质均匀;缺点是功耗高、速度慢、成本高。现在基本只用在高端工业相机和天文领域。
- CMOS(互补金属氧化物半导体):每个像素自带放大器,可以随机读取。优点是速度快、功耗低、成本低;缺点是像素间一致性差,有固定模式噪声(FPN)。
现在手机和消费级相机,清一色CMOS。为什么?因为CMOS可以集成ADC、逻辑控制甚至ISP在同一个芯片上——这就是我们常说的SoC传感器。
1.4 Bayer阵列与CFA——颜色是怎么来的?
传感器本身是“色盲”的——它只能感知光的强度,分不清颜色。那彩色照片怎么来的?靠的是滤色阵列(CFA)。
最经典的CFA就是Bayer阵列。它在每个像素上覆盖一个滤光片,只允许红、绿或蓝光通过。排列方式是:
R G R G ...
G B G B ...
R G R G ...
G B G B ...
你看,绿色像素占了50%,红色和蓝色各占25%。这就是因为人眼对绿色最敏感。
但问题来了:每个像素只记录了一种颜色,那其他两种颜色怎么办?这就需要去马赛克(Demosaic)算法来插值补全。这是ISP Pipeline里最关键也最复杂的模块之一。
1.5 ISP Pipeline全景图——一条龙服务
好了,现在光进来了,传感器也把数据交出来了。接下来就是ISP的舞台。
ISP Pipeline,说白了就是一条流水线。原始RAW数据从传感器出来,经过一系列处理模块,最终变成一张你看到的JPG或YUV图像。
下面这张图,是我自己整理的ISP Pipeline标准流程。你把它记在脑子里,后面每一章都会对应到其中的一个模块。
这张图里,我特意用颜色区分了处理域:
- 蓝色(RAW域):黑电平校正、去马赛克。这时候数据还是原始的,每个像素只有一个颜色值。
- 红色(RGB域):白平衡、色彩校正。这时候每个像素都有完整的R/G/B信息了。
- 绿色/紫色(YUV域):Gamma校正、去噪、锐化、色调映射。亮度和色彩分开处理,效率更高。
- 橙色(输出):编码成最终格式。
好了,第一章就到这里。你脑子里现在应该有一张清晰的图:从人眼特性到相机硬件,再到传感器和Bayer阵列,最后是ISP Pipeline的全景。后面每一章,我们都会深入Pipeline里的一个模块,把原理、算法和工程实现掰开揉碎了讲。