CFA和Domosaic介绍
1. Bayer
图像在将实际的景物转换为图像数据时, 通常是将传感器分别接收红、 绿、 蓝三个分量的信息, 然后将红、 绿、 蓝三个分量的信息合成彩色图像。 该方案需要三块滤镜, 这样价格昂贵,且不好制造, 因为三块滤镜都必须保证每一个像素点都对齐。

因此,通过在黑白 cmos 图像传感器的基础上, 增加彩色滤波结构和彩色信息处理模块就可以获得图像的彩色信息, 再对该彩色信息进行处理, 就可以获得色彩逼真的彩色图像。通常把彩色图像传感器表面覆盖的滤波称为彩色滤波阵列(Color Filter Arrays,CFA)

目前最常用的滤镜阵列是棋盘格式的, 已经有很多种类的, 其中绝大多数的摄像产品采用的是原色贝尔模板彩色滤波阵列(Bayer Pattern CFA)。R、G、B 分别表示透红色、透绿色和透蓝色的滤镜阵列单元。由于人的视觉对绿色最为敏感,所以在 Bayer CFA 中G分量是 R和B 的二倍,在每个像素点上只能获取一种色彩分量的信息,然后根据该色彩分量的信息通过插值算法得到全色彩图像。
2. Domosaic
如今几乎所有彩色sensor输出的都是bayer pattern的数据,即每个像素点仅有一种颜色分量数据。demosaic(解马赛克)就是为每个像素点找回另外2个缺失的颜色分量,使每个像素点都具备r,g,b三个通道的数据

可以理解为CFA是对现实景的信号的采样,Demosaic就是对恢复出原始信号的方法

几种 Domosaic 常见方法
1. 双线性插值
- 如果当前点是G点,则需要恢复该点的R,B值
- 如果当前点是R(B)点(下图以R点为例),则需要恢复G值和B(R)值
|
|
R(1,1) = (R(0,1)+R(2,1))/2;
B(1,1) = (B(1,0)+B(1,2))/2;
G(1,1) = (Gb(0,1)+Gr(1,0)+Gr(1,2)+Gb(2,1))/4;
B(1,1) = (B(0,0)+B(0,2)+B(2,0)+B(2,2))/4;
算法虽然简单,但是问题:
- 模糊:这种插值办法本质是低通均值滤波器
- 拉链效应(也称为锯齿效应)
- 伪彩问题
例:假设有一张这样的图,1-3列是低亮度,4-5是高亮度,如下图a,b所示。利用双线性插值法,各颜色通道的插值结果如图d,e,f所示。d,e,f融合后即是c图。相比a图,可以看到,3-4列出现拉链效应与伪彩问题。出现异常的原因就是未遵循图像纹理方向进行插值

2. 色差法(色差一致性)
色差一致性
在一个完整的RGB三通道图像中,两个相邻像素间对应通道的像素差近似相等。以相邻像素X1(r,g,b)和X2(r,g,b)为例:
X1_g - X1_r = X2_g - X2_r;
X1_g - X1_b = X2_g - X2_b;
X1_b - X1_r = X2_b - X2_r;
即当前点的色差与其邻域的对应通道的均值色差近似相等,根据这个特性,如果我们能拿到邻域均值色差,则很容易计算出当前点所缺失的色度分量。
X1_g - X1_r = AVG_g - AVG_r;
X1_g - X1_b = AVG_g - AVG_b;
X1_b - X1_r = AVG_b - AVG_r;
色差法计算步骤
- 最开始,每个像素点都只有一个颜色分量,因此不存在色差。为计算色差,我们一般选择对R,B点进行G通道插值,插值算法可选择双线性插值。之所以先插值G通道,是因为其采样点最多,保留的有效信息最多。

- 经过上一步后,图像所有点都具备G分量,1/4的点具备B,G分量,1/4的点具备R,G分量。后两者就可以计算色差了。定义色差如下:
Kr = G - R; Kb = G - b;

对色差进行双线性插值,得到Kr’和Kb’;利用该点的G值-色差,即可得到该点的R’,B’值。至此,所有像素点都包含了r,g,b三个分量

//for G channel
Kb' = (Kb0 + Kb1)/2;
Kr' = (Kr0 + Kr1)/2;
B' = G - Kb'
R' = G - Kr'
//for R channel
Kb' = (Kb0 + Kb1 + Kb2 + Kb3) / 4;
B' = G - Kb'
//for B channel
Kr' = (Kr0 + Kr1 + Kr2 + Kr3) / 4;
R' = G - Kr'
可以看到,这里色差法其实也是双线性插值,不过它是在色差平面做的,即引入了颜色通道间的相关性(R,B的插值有G的参与)。使之能获得比同颜色通道内的双线性插值更好的效果。
但本算法也有双线性插值的毛病——未考虑图像纹理方向。而色差一致性只有在平坦区或者图像纹理方向才更准确。因此本算法在高频区插值效果并不够好。
3. Hamilton & Adams插值算法
前面提到的2种算法都没考虑纹理方向,因此在高频区插值效果不好。既然如此,这里我们引入纹理方向判断来辅助插值运算。本算法也是基于色差法,上一节的色差法无差别使用邻域色差。本算法使用梯度来判断纹理方向,梯度小的地方被认为是纹理方向,因此使用这个方向的色差进行插值。 本算法基于梯度自动选择插值方向,因此也是自适应插值算法的一种。
本算法于1997年提出,后续的许多demosaic算法都是由此发展而来
基于色差的HA滤波器
前面我们提到当前点的色差与其邻域的对应通道的均值色差近似相等:
X1_g - X1_r = AVG_g - AVG_r;
X1_g - X1_b = AVG_g - AVG_b;
X1_b - X1_r = AVG_b - AVG_r;
如下,对于中心点Rc, 选择其邻域1x5的数据。根据色差一致性可得到如下式子:
IntpG - Rc = Avg_g - Avg_r; //IntpG表示中心点插值
其中:
Avg_g = (G0+G1)/2; Avg_r = (R0+2Rc+R1)/4;
->IntpG - Rc = -0.25*R0 + 0.5*G0 - 0.5*Rc + 0.5*G1 - 0.25*R1
->IntpG = -0.25*R0 + 0.5*G0 + 0.5*Rc + 0.5*G1 - 0.25*R1

上述运算对IntpR,IntpB同理,由此得到HA滤波插值系数为:[-0.25,0.5,0.5,0.5,-0.25],HA设置了H,V两个方向的滤波器,共用一套滤波参数。
h/v方向滤波操作
利用上述的H和V方向的滤波器对每一个点进行滤波,可得到H和V方向的插值结果:
IntpG_h, IntpR_h, IntpB_h
IntpG_v, IntpR_v, IntpB_v

HA插值-R(B)点G分量插值
计算H,V两个方向的梯度
Grad_h = abs(G1,G2) + abs(2*Rc,(R1+R2));
Grad_v = asb(G0,G3) + abs(2*Rc,(R0+R3));

根据梯度,计算最终插值结果:
if(Grad_h < Grad_v) IntpG = IntpG_h;
else if(Grad_h > Grad_v) IntpG = IntpG_v;
else IntpG = (IntpG_h + IntpG_v)/2;
HA插值-R(B)点B®分量插值
注意:需先进行上一步"R(B)点G分量插值"
Grad_N = abs(B1,B4) + abs(2*IntpGc,(IntpG1+IntpG4))
Grad_P = abs(B2,B3) + abs(2*IntpGc,(IntpG2+IntpG3))
最终结果:
if(Grad_N < Grad_P)
IntpB = (B1+B4)/2 + (2*IntpGc-IntpG1-IntpG4)/4;
else if(Grad_h > Grad_P)
IntpB = (B2+B3)/2 + (4*IntpGc-IntpG2-IntpG3)/4;
else
IntpB = (B1+B2+B3+B4)/2 + (2*IntpGc-IntpG1-IntpG2-IntpG3-IntpG4)/4;
HA插值-G点B,R分量插值
//如果该G点与R分量在同一行
IntpR = IntpR_h
IntpB = IntpB_v
//如果该G点与R分量在同一行
IntpR = IntpR_v
IntpB = IntpB_h
本文介绍了CFA(彩色滤波阵列)在图像传感器中的应用,特别是BayerPattern,以及如何通过Demosaic算法(如双线性插值、色差法和Hamming-Adams插值)恢复缺失的色彩信息。这些算法在ISP(图像信号处理器)中起到关键作用,提升图像质量和色彩还原性。

8069

被折叠的 条评论
为什么被折叠?



