OpenISP 模块拆解 · 第7讲:去马赛克 (CFA)
OpenISP 模块拆解 · 第7讲去马赛克 (CFA)模块作用CFA 插值也叫 demosaic是把单通道 Bayer RAW 转成三通道 RGB 的关键模块。每个传感器像素只采集 R/G/B 之一CFA 要为每个位置估计缺失的两个颜色通道。openISP 实现源码类名为CFA(img, mode, bayer_pattern, clip)。实际实现的模式是malvar支持四种 Bayer pattern。输入H x W Bayer RAW输出H x W x 3 RGBBayer pattern以rggb为例R Gr Gb B代码每次处理一个 2x2 Bayer block并根据当前位置是r/gr/gb/b调用不同插值公式。Malvar 插值思想Malvar-He-Cutler 类算法不是简单双线性平均。它会根据中心点和周围像素构造线性滤波公式把局部梯度信息纳入缺失通道估计。直觉平坦区域接近平滑插值。边缘区域利用梯度校正减少跨边缘混色。高频区域比简单双线性更能抑制伪彩。代码流程对 RAW 做 2 像素 reflect padding。转成int32避免中间乘加溢出。按 2x2 block 遍历。根据bayer_pattern判断每个位置颜色。调用malvar()得到[r, g, b]。写入cfa_img并裁剪。参数说明参数含义mode插值模式openISP 实现malvarbayer_patternBayer 排列必须与 RAW 一致clipRGB 输出上限源码按 RAW clip常见问题Bayer pattern 错误会导致严重偏色例如把rggb当bggr红蓝会互换。CFA 前的坏点、混叠、色噪也会在 CFA 后被扩散成可见伪彩。面试问答Q1: Demosaic 为什么是 ISP 中很重要的模块它决定了 RAW 到 RGB 的基本质量。插值不好会造成伪彩、锯齿、拉链边、细节模糊这些问题后续很难完全修复。Q2: 双线性插值和 Malvar 插值有什么区别双线性主要用邻域平均简单但容易模糊和伪彩。Malvar 使用更大的滤波模板和梯度校正能更好地兼顾细节和颜色准确性。Q3: Bayer pattern 配错会怎样颜色通道位置错乱通常表现为严重偏色、红蓝互换、边缘彩色纹理异常。因为从最基础采样位置开始就解释错了。Q4: CFA 前为什么要做 DPC/AAF/CNF这些模块分别减少坏点、高频混叠和色噪。若不提前处理CFA 会把局部异常扩散到 RGB 图像中。Q5: 如何评价 demosaic 算法好坏可以看解析力、伪彩、拉链边、噪声放大、计算复杂度。测试图通常包括斜线、细网格、彩色边缘和真实纹理。