Bayer CFA 基础:从物理到算法的第一块拼图
做图像处理的人,几乎天天跟 Bayer 打交道。但说实话,我刚入行那会儿,觉得 Bayer 不就是个彩色滤镜嘛,有啥好研究的?直到第一次做去马赛克算法,看到输出图像上那些诡异的彩色锯齿,才意识到——嗯,这东西远比想象中复杂。
这一章,咱们就把 Bayer CFA 的底裤扒干净。从物理实现到采样率,一个都不放过。
色彩滤波阵列的物理实现
先问个问题:为什么单颗 CMOS 传感器拍不出彩色?
答案很简单——硅本身对颜色不敏感。它只感知光子数量,也就是亮度。那彩色从哪来?
你想想看,在每一个像素前面放一个微型滤色片,只允许特定波长的光通过。这就是色彩滤波阵列(CFA)的核心思想。
关键事实:每个像素只能捕获一种颜色分量。红色像素只记录红光强度,绿色像素只记录绿光强度,蓝色像素只记录蓝光强度。其他颜色信息?丢了。
我在项目中遇到过一种情况:用黑白传感器加旋转滤色轮拍静态场景,效果确实好,但一动起来就完蛋。所以消费级产品几乎全用 Bayer CFA——一次曝光,一张图,成本低,速度快。
Bayer 模式的四种排列
Bayer 模式的核心规律是:绿色像素占一半,红蓝各占四分之一。为什么?因为人眼对绿色最敏感。说白了,这是用硬件资源向视觉系统妥协。
四种常见排列方式如下:
| 模式名称 | 2×2 单元排列 | 常见应用 |
|---|---|---|
| RGGB | 第一行 R G,第二行 G B | Sony、OmniVision 多数传感器 |
| BGGR | 第一行 B G,第二行 G R | 部分安森美传感器 |
| GRBG | 第一行 G R,第二行 B G | 部分三星传感器 |
| GBRG | 第一行 G B,第二行 R G | 部分老款 Kodak 传感器 |
我建议你记住一个规律:绿色像素永远在对角线位置。不管哪种排列,2×2 块里两个绿色像素一定在对角。这个特性对后续的去马赛克算法至关重要。
个人经验:写代码时别硬编码 Bayer 模式。我吃过这个亏——换了一颗传感器,整条 ISP 流水线都得改。后来我统一用枚举类型,运行时根据 sensor ID 自动选择排列方式。
采样率与分辨率的关系
这里有个常见的误解:2000 万像素的传感器,真的能输出 2000 万像素的彩色图像吗?
答案是:不能。至少不是全彩色的。
咱们算笔账:
- 红色像素:只有总像素数的 1/4
- 蓝色像素:只有总像素数的 1/4
- 绿色像素:占总像素数的 1/2
这意味着什么?红色通道的采样率只有全分辨率的 1/4。蓝色也一样。绿色好一点,但也只有 1/2。
我举个例子你就明白了。假设传感器是 4000×3000(1200 万像素):
- 红色有效采样点:2000×1500 = 300 万
- 蓝色有效采样点:2000×1500 = 300 万
- 绿色有效采样点:4000×1500 = 600 万
你看,红色和蓝色通道的实际分辨率,只有标称值的四分之一。去马赛克算法要做的,就是从这 300 万个红色点,猜出剩下的 900 万个红色值。
避坑指南:我曾经天真地以为,传感器分辨率越高,去马赛克后的图像就越锐利。结果发现,如果 Bayer 排列和去马赛克算法不匹配,高分辨率反而会放大伪彩色和锯齿。分辨率是双刃剑。
Bayer CFA 的频谱特性
为什么去马赛克会产生伪彩色?这得从频域角度理解。
Bayer CFA 本质上是一种空间子采样。每个颜色通道的采样模式不同,导致它们在频域中混叠的位置也不同。红色和蓝色通道的混叠更严重,因为它们采样率更低。
我习惯用一张图来理解这个过程:
实际项目中的选择建议
说了这么多理论,来点实际的。如果你正在选型传感器,我建议你按这个思路来:
- 先确认 Bayer 模式——拿到 sensor datasheet 第一件事,查 CFA pattern。别信默认值。
- 评估绿色通道质量——绿色占一半像素,它的信噪比直接决定最终图像亮度细节。
- 注意红蓝通道的混叠——如果场景中有大量红色或蓝色高频纹理(比如红色织物),去马赛克算法必须做抗混叠处理。
- 考虑 ISP 流水线兼容性——我见过有人用 RGGB 传感器,但 ISP 硬写死了 BGGR,结果整张图偏色。这种低级错误,犯一次就够了。
一个小技巧:拿到新传感器后,拍一张均匀白板,然后检查 raw 数据中每个像素的值。如果 R、G、B 的分布符合 1:2:1 的比例,说明 Bayer 模式识别正确。这个方法我用了十年,从没失手过。
本章小结
Bayer CFA 是整个 ISP 流水线的起点。它决定了你能捕获多少颜色信息,也决定了后续去马赛克和边缘增强的难度。
记住三个数字:1/2(绿色)、1/4(红色)、1/4(蓝色)。这三个比例,是所有 Bayer 算法的根基。