图像传感器与色彩滤波阵列(CFA):CMOS vs CCD传感器、CFA模式详解
做AI去马赛克,你首先得搞清楚一个问题:马赛克是怎么来的?
说白了,我们手里的数码照片,在传感器那一层其实是一张“黑白灰”的亮度图。想得到彩色?就得靠一层微小的滤色片——也就是色彩滤波阵列(CFA)。
这一章,我们就从传感器讲起。我个人习惯把传感器比作相机的“视网膜”,而CFA就是视网膜上的“视锥细胞”。理解了这个底层逻辑,后面再讲去马赛克算法,你才能知道它在“补”什么。
2.1 CMOS vs CCD:两种主流传感器
先聊传感器本身。目前市面上99%的消费级相机和手机,用的都是CMOS。CCD基本只存在于老款相机或某些工业、科研设备里。
我刚开始做图像处理时,用的还是CCD相机。那时候CMOS的噪声大得离谱,没人敢用。现在反过来了,CMOS把CCD打得几乎绝迹。
| 对比维度 | CCD(电荷耦合器件) | CMOS(互补金属氧化物半导体) |
|---|---|---|
| 读出方式 | 逐行转移,统一输出 | 每个像素独立寻址读出 |
| 功耗 | 高(需要多组电压驱动) | 低(单电压,集成度高) |
| 噪声 | 低(读出电路统一) | 相对高(像素级放大器差异) |
| 速度 | 慢(串行读出) | 快(并行读出,支持高帧率) |
| 成本 | 高(工艺特殊) | 低(标准半导体工艺) |
| 动态范围 | 通常更宽 | 通过技术追赶,已接近 |
我的经验:做AI去马赛克时,CMOS传感器的行噪声和固定模式噪声(FPN)是最大的坑。CCD的噪声虽然低,但一旦出现坏点,就是永久性的。CMOS的坏点可以通过算法校正,CCD的坏点……嗯,只能换传感器。
2.2 为什么需要CFA?
传感器本身只能感知光的强度,分不清颜色。那怎么办?
一个朴素的想法:给每个像素前面贴一张滤色片,只让特定颜色的光通过。这就是CFA的由来。
你想想看,如果每个像素只记录一种颜色,那最终图像就是一张“马赛克”。我们需要通过插值算法,把缺失的另外两种颜色猜出来——这就是去马赛克(Demosaicing)。
2.3 Bayer模式:最经典的CFA
Bayer模式是1976年由柯达的Bryce Bayer发明的。直到今天,它依然是使用最广泛的CFA模式。
它的核心规律:绿色像素占一半,红蓝各占四分之一。
为什么绿色多?因为人眼对绿色最敏感。说白了,就是模仿人眼的视锥细胞分布。
典型的2x2 Bayer单元:
R G
G B
或者另一种排列:
G R
B G
这两种排列在业界都有使用。我个人习惯把第一种叫“RGGB”,第二种叫“GRBG”。实际处理时,你只需要知道左上角是什么颜色,就能推算出整个模式。
关键指标:Bayer模式的奈奎斯特频率限制了去马赛克的分辨率。绿色通道的采样率是红色/蓝色的两倍,所以绿色细节保留最好,红蓝容易出现伪彩色。这也是AI去马赛克要重点解决的问题。
2.4 X-Trans模式:富士的“反摩尔纹”方案
Bayer模式有个老毛病:摩尔纹。尤其是在拍摄西装、百叶窗这类高频纹理时,会出现彩色的干涉条纹。
富士的X-Trans方案,说白了就是打乱了CFA的周期性排列。它用6x6的大单元,让红色和蓝色像素的分布不再那么规则。
X-Trans 6x6单元(简化示意):
G R G G B G
B G R G G G
G G B G R G
G B G R G G
R G G G B G
G G R G G B
这种排列让摩尔纹的强度大幅降低。但代价是什么?去马赛克算法更复杂了。传统的线性插值在X-Trans上效果很差,必须用更高级的算法,甚至AI。
避坑指南:我曾经在项目中直接拿Bayer的去马赛克模型去处理X-Trans数据,结果出来的图像全是伪彩色。后来才发现,X-Trans的CFA模式需要重新训练模型,不能直接迁移。切记,CFA模式变了,你的网络输入通道的“空间分布”就变了。
2.5 Quad Bayer模式:手机传感器的“四合一”
手机传感器这两年流行起了Quad Bayer。说白了,就是把4个同色像素拼成一个2x2的块。
比如一个2x2的红色块,4个像素都滤红色光。这样做的目的:提高弱光灵敏度。
Quad Bayer 4x4单元:
R R G G
R R G G
G G B B
G G B B
在暗光下,把4个同色像素合并成1个,等效像素面积变大,信噪比提升。在亮光下,再拆分成全分辨率输出。
但这里有个坑:Quad Bayer的“原生分辨率”其实是标称的1/4。很多手机标榜1亿像素,实际上在暗光下只能输出2500万像素。如果你做AI去马赛克,必须知道当前是“合并模式”还是“全分辨率模式”,否则算法会乱套。
| CFA模式 | 单元大小 | 绿色占比 | 主要优势 | 主要劣势 |
|---|---|---|---|---|
| Bayer | 2x2 | 50% | 简单、成熟、兼容性好 | 摩尔纹、伪彩色 |
| X-Trans | 6x6 | 约50% | 抗摩尔纹强 | 算法复杂、计算量大 |
| Quad Bayer | 4x4 | 50% | 弱光性能好、支持HDR | 分辨率折损、模式切换复杂 |
2.6 传感器噪声模型
做AI去马赛克,你躲不开噪声。因为噪声会直接影响插值的准确性。
我总结一下传感器的主要噪声源:
- 光子散粒噪声(Shot Noise):光的量子特性决定的,服从泊松分布。暗光下尤其明显。
- 读出噪声(Read Noise):电路在读出电荷时引入的噪声。CMOS的读出噪声通常比CCD高。
- 固定模式噪声(FPN):每个像素的放大器和暗电流不一致导致的。表现为固定的竖条纹或网格。
- 暗电流噪声(Dark Current):即使没有光,传感器也会产生热电子。温度越高越严重。
我的建议:训练AI去马赛克模型时,一定要在训练数据中加入噪声增强。我习惯用高斯噪声模拟读出噪声,用泊松噪声模拟散粒噪声。这样模型在实际拍摄场景中才不会崩。
2.7 本章知识结构图
下面这张图,帮你把本章的核心逻辑串起来:
2.8 小结
这一章我们聊了三个核心问题:
- 传感器:CMOS和CCD的差异,以及它们对噪声的影响。
- CFA模式:Bayer、X-Trans、Quad Bayer的排列规律和适用场景。
- 噪声模型:四种主要噪声源,以及它们如何干扰去马赛克。