CFA及Demosaic介绍

1.Bayer(拜耳滤波器得到彩色)

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


(光线透过镜头然后通过颜色分离片分离 R G B信息,示意图来自《颜色插值算法改进及其电路设计》)

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

目前最常用的滤镜阵列是棋盘格式的, 已经有很多种类的, 其中绝大多数的摄像产品采用的是原色贝尔模板彩色滤波阵列(Bayer Pattern CFA)。R、G、B 分别表示透红色、透绿色和透蓝色的滤镜阵列单元。由于人的视觉对绿色最为敏感,所以在 Bayer CFA 中G分量是 R和B 的二倍,在每个像素点上只能获取一种色彩分量的信息,然后根据该色彩分量的信息通过插值算法得到全色彩图像。

2.Demosaic颜色插值 (去马赛克)

当光线通过 Bayer型 CFA(Color Filter Arrays) 阵列之后, 单色光线打在传感器上,每个像素都为单色光,理想的Bayer 图是一个较为昏暗的马赛克图。(见感光元件成像示意图(2))。

根据sensor上感知的光线强度,再结合对应滤光片颜色排列就可以估计出 sensor输出的彩色图像(见bayer滤镜输出图像示意图(3))

首先需要说明的就是demosaiced并不是和字面的意思一样是为了去除电影中的一些打马赛克的图像,而是数字图像处理中用来从不完整的color samples插值生成完整的color samples的方法(因为bayer pattern看起来像一个个马赛克,因此称为去马赛克)。在sensor端通常需要使用CFA滤镜来得到Bayer pattern,而在后面的处理中需要把bayer pattern变成完整的RGB444(真彩色)图像。在ISP中需要有这么一个模块来做。

插值算法

在传统的ISP中有很多算法可以来做这个插值,包括最近邻域法,bilinear 插值,cubic 插值等。

最近邻域法

最近邻插值算法是将目标图像中的点,对应到原图像中后,找到最相邻的整数坐标点的像素值,作为该点的像素值输出。图像会出现明显的块状效应,会在一定程度上损失空间对称性(Alignment)。最近邻法速度最快,没有考虑像素之间的空间关系、色彩关系,效果肯定不佳。

选择最近邻插值算法在图像放大的应用,在demosaic应用距离都相等,选择任意一个或者只选择一侧的像素数值作为插值数值,该方法没有考虑到附近的几个像素点按权重分配。

双线性插值算法

sensor输出一幅Bayer时,每个像素只有R,G,B三个通道中的一个通道的像素,通过插值算法把缺失的像素估计出来,m*n的二维数组插值为m*n*3的3个二维数组

举例说明一下双线性插值,以下图的GRBG bayer矩阵为例

1、以

G

3

,

3

G_{3,3}

G3,3​ 这个点为例,我们需要求出

G

3

,

3

G_{3,3}

G3,3​点处的RB像素数值,

G

3

,

3

G_{3,3}

G3,3​的R 像素数值可以根据

G

3

,

3

G_{3,3}

G3,3​ 左、右两个R 插值得到:

R

G

3

,

3

=

(

R

3

,

2

+

R

3

,

4

)

/

2

R_{G_{3,3}} = (R_{3,2} + R_{3,4})/2

RG3,3​​=(R3,2​+R3,4​)/2

G

3

,

3

G_{3,3}

G3,3​的B像素数值可以根据

G

3

,

3

G_{3,3}

G3,3​ 上、下两个B 插值得到:

B

G

3

,

3

=

(

B

2

,

3

+

B

4

,

3

)

/

2

B_{G_{3,3}} = (B_{2,3} + B_{4,3})/2

BG3,3​​=(B2,3​+B4,3​)/2

其他的G像素插值RB数值都是这样。

2、以

R

3

,

4

R_{3,4}

R3,4​ 这个点为例,我们需要求出

R

3

,

4

R_{3,4}

R3,4​点处的GB像素数值,则

R

3

,

4

R_{3,4}

R3,4​的G像素数值可以根据$R_{3,4}斜角四个G像素数值插值得到:

G

R

3

,

4

=

(

G

2

,

4

+

R

3

,

3

+

G

3

,

5

+

G

4

,

4

)

/

4

G_{R_{3,4}} = (G_{2,4} + R_{3,3} + G_{3,5} + G_{4,4})/4

GR3,4​​=(G2,4​+R3,3​+G3,5​+G4,4​)/4

R

3

,

4

R_{3,4}

R3,4​的B像素数值可以根据

R

3

,

4

R_{3,4}

R3,4​上下左右四个B 像素数值插值得到:

B

R

3

,

4

=

(

B

2

,

3

+

B

3

,

5

+

B

4

,

3

+

B

4

,

5

)

/

4

B_{R_{3,4}} = (B_{2,3} + B_{3,5} + B_{4,3} + B_{4,5})/4

BR3,4​​=(B2,3​+B3,5​+B4,3​+B4,5​)/4

同理,在当前点是BR 像素时,插值办法类似之上。

根据同样的原理,我们可以对Bayer图像中的每一个点都进行插值,然后得到插值结果:

颜色相关性原理(色差恒定理论)

色差恒定准则与色比恒定准则都是基于颜色通道之间的相关性,目的都是把颜色通道之间的相关性信息引入颜色插值算法,提高插值的准确性。色差相比于色比有两点优势:

第一,色差的运算简单,更容易实现。第二, 色比在G通道接近0时误差较大,色差不存在这类问题。因此,绝大多数颜色插值算法中使用了色差。

以下图的GRBG bayer矩阵为例

一种基于色差恒定准则的颜色插值算法,定义

K

r

Kr

Kr、

K

b

Kb

Kb

K

r

=

G

R

Kr = G - R

Kr=G−R

k

B

=

G

B

kB = G - B

kB=G−B

K

r

Kr

Kr举例,对没有R像素数值的像素,需要

K

r

K_r

Kr​附近的像素进行数值估计,

K

r

3

,

3

=

G

3

,

3

R

3

,

3

=

G

3

,

3

(

R

3

,

2

+

R

3

,

4

)

/

2

Kr_{3,3} = G_{3,3} - R_{3,3} = G_{3,3}-(R_{3,2}+R_{3,4})/2

Kr3,3​=G3,3​−R3,3​=G3,3​−(R3,2​+R3,4​)/2

K

r

2

,

4

=

G

2

,

4

R

2

,

4

=

G

9

2

,

4

(

R

1

,

4

+

R

3

,

4

)

/

2

Kr_{2,4} = G_{2,4} - R_{2,4} = G9_{2,4}-(R_{1,4}+R_{3,4})/2

Kr2,4​=G2,4​−R2,4​=G92,4​−(R1,4​+R3,4​)/2

插值的过程也是先对绿色通道插值,得到所有的G,然后再计算R
和B。

(1)绿色G通道的R、B像素插值:

在计算G值之前,需要计算好周围的Kr或者Kb,以R点处的G值为例

R

G

3

,

2

=

R

3

,

2

+

(

K

R

2

,

2

+

K

R

3

,

1

+

K

R

3

,

3

+

K

R

4

,

2

)

R_{G_{3,2}} =R_{3,2} + (K_{R_{2,2}} +K_{R_{3,1}}+ K_{R_{3,3}}+ K_{R_{4,2}})

RG3,2​​=R3,2​+(KR2,2​​+KR3,1​​+KR3,3​​+KR4,2​​)

B点处的G值类似。

(2)红、蓝通道的插值;

以红色为例,有两种情况,分别是G(3,3)点处的R值($ R_{G_{3,3}}

)

B

(

2

,

3

)

R

(

(

)和B(2,3)点处的R值((

)和B(2,3)点处的R值(( R_{B_{2,3}}$))。

R

G

3

,

3

=

R

3

,

3

+

(

K

R

1

,

3

+

K

R

3

,

2

+

K

R

3

,

4

+

K

R

4

,

3

)

R_{G_{3,3}} =R_{3,3} + (K_{R_{1,3}} +K_{R_{3,2}}+ K_{R_{3,4}}+ K_{R_{4,3}})

RG3,3​​=R3,3​+(KR1,3​​+KR3,2​​+KR3,4​​+KR4,3​​)

R

B

2

,

3

=

G

B

2

,

3

+

(

K

R

2

,

3

+

K

R

3

,

2

+

K

R

3

,

4

+

K

R

4

,

3

)

R_{B_{2,3}} =G_{B_{2,3}} + (K_{R_{2,3}} +K_{R_{3,2}}+ K_{R_{3,4}}+ K_{R_{4,3}})

RB2,3​​=GB2,3​​+(KR2,3​​+KR3,2​​+KR3,4​​+KR4,3​​)

自适应插值算法

双线性插值忽视了各通道间的相关性,插值结果往往带有比较严重的伪彩色。

Hamilton and Adams 考虑到了各颜色通道之间的关系,利用梯度变化即两个通道之差,通常是用G通道分别减去R和B通道来增加通道之间的相关性,再用相减得到的结果进行插值。这种方法考虑了各通道间的关联,因此插值结果伪彩色大大减少

其计算水平梯度和竖直梯度,在计算梯度时综合了亮度分量梯度和使用的拉普拉斯二阶微分算子

插值缺失的绿色

在计算绿色像素值时,不仅使用了边缘方向的像素值进行平均,还使用了色差对平均值进行修正。

1、 计算水平梯度和竖直梯度(以

B

2

,

3

B_{2,3}

B2,3​举例)

H

=

G

2

,

2

G

2

,

4

+

2

B

2

,

3

B

2

,

1

B

2

,

5

\nabla{H} = {丨G_{2,2}-G_{2,4}丨} + 丨2*B_{2,3}-B_{2,1}-B_{2,5}丨

∇H=丨G2,2​−G2,4​丨+丨2∗B2,3​−B2,1​−B2,5​丨

V

=

G

1

,

3

G

3

,

3

+

2

B

2

,

3

B

1

,

3

B

4

,

3

\nabla{V} = {丨G_{1,3}-G_{3,3}丨} + 丨2*B_{2,3}-B_{-1,3}-B_{4,3}丨

∇V=丨G1,3​−G3,3​丨+丨2∗B2,3​−B−1,3​−B4,3​丨

2、分析梯度数值大小,计算插值的G值(梯度数值小,色彩差异小,选择梯度小的方向作为插值方向)

H

<

V

\nabla{H} < \nabla{V}

∇H<∇V时,

G

B

2

,

3

=

(

G

2

,

2

+

G

2

,

4

)

/

2

+

(

2

B

2

,

3

B

2

,

1

B

2

,

5

)

/

4

G_{B_{2,3}} = ( G_{2,2} + G_{2,4} )/2 + (2*B_{2,3}-B_{2,1}-B_{2,5})/4

GB2,3​​=(G2,2​+G2,4​)/2+(2∗B2,3​−B2,1​−B2,5​)/4

H

>

V

\nabla{H} > \nabla{V}

∇H>∇V时,

G

B

2

,

3

=

(

G

1

,

3

+

G

3

,

3

)

/

2

+

(

2

B

2

,

3

B

1

,

3

B

4

,

3

)

/

4

G_{B_{2,3}} = (G_{1,3} + G_{3,3} )/2 + (2*B_{2,3}-B_{-1,3}-B_{4,3})/4

GB2,3​​=(G1,3​+G3,3​)/2+(2∗B2,3​−B−1,3​−B4,3​)/4

H

=

V

\nabla{H} = \nabla{V}

∇H=∇V时,

G

B

2

,

3

=

(

G

1

,

3

+

G

2

,

2

+

G

3

,

3

+

G

2

,

4

)

/

4

+

(

4

B

2

,

3

B

1

,

3

B

4

,

3

B

2

,

1

B

2

,

5

)

/

4

G_{B_{2,3}} = (G_{1,3} + G_{2,2} + G_{3,3} + G_{2,4} )/4 + (4*B_{2,3}-B_{-1,3}-B_{4,3}-B_{2,1}-B_{2,5})/4

GB2,3​​=(G1,3​+G2,2​+G3,3​+G2,4​)/4+(4∗B2,3​−B−1,3​−B4,3​−B2,1​−B2,5​)/4

插值绿色通道缺失的 红、蓝数值

1、插值红像素数值,寻找附近一列或者一行存在红色像素进行权重插值

举例

G

3

,

3

G_{3,3}

G3,3​

R

G

3

,

3

=

(

R

3

,

2

+

R

3

,

4

)

/

2

+

(

2

G

3

,

3

G

3

,

1

G

3

,

5

)

/

4

R_{G_{3,3}} = ( R_{3,2} + R_{3,4} )/2 + (2*G_{3,3}-G_{3,1}-G_{3,5})/4

RG3,3​​=(R3,2​+R3,4​)/2+(2∗G3,3​−G3,1​−G3,5​)/4

蓝色插值同上

插值红(蓝)通道缺失的 蓝(红)数值

已知的红色像素值在两条对角线上,算法的思想是计算两条对角线对应的梯度,选择梯度较小的方向插值。

举例以

B

2

,

3

B_{2,3}

B2,3​举例

定义倾斜梯度

N

\nabla{N}

∇N、

P

\nabla{P}

∇P:

N

=

R

1

,

2

R

3

,

4

+

2

G

2

,

3

G

1

,

2

G

3

,

4

\nabla{N} = 丨R_{1,2}-R_{3,4}丨 + 丨2*G_{2,3}-G_{1,2}-G_{3,4}丨

∇N=丨R1,2​−R3,4​丨+丨2∗G2,3​−G1,2​−G3,4​丨

P

=

R

1

,

4

R

3

,

2

+

2

G

2

,

3

G

1

,

4

G

3

,

2

\nabla{P} = 丨R_{1,4}-R_{3,2}丨 + 丨2*G_{2,3}-G_{1,4}-G_{3,2}丨

∇P=丨R1,4​−R3,2​丨+丨2∗G2,3​−G1,4​−G3,2​丨

根据倾斜梯度,选择插值方向:

N

<

P

\nabla{N} < \nabla{P}

∇N<∇P时,

G

B

2

,

3

=

(

R

1

,

2

+

R

3

,

4

)

/

2

+

(

2

G

2

,

3

G

1

,

2

G

3

,

4

)

/

4

G_{B_{2,3}} = ( R_{1,2} + R_{3,4} )/2 + (2*G_{2,3}-G_{1,2}-G_{3,4})/4

GB2,3​​=(R1,2​+R3,4​)/2+(2∗G2,3​−G1,2​−G3,4​)/4

N

>

P

\nabla{N} > \nabla{P}

∇N>∇P时,

G

B

2

,

3

=

(

R

1

,

4

+

R

3

,

2

)

/

2

+

(

2

G

2

,

3

G

1

,

4

G

3

,

2

)

/

4

G_{B_{2,3}} = (R_{1,4} + R_{3,2} )/2 + (2*G_{2,3}-G_{1,4}-G_{3,2})/4

GB2,3​​=(R1,4​+R3,2​)/2+(2∗G2,3​−G1,4​−G3,2​)/4

N

=

P

\nabla{N} = \nabla{P}

∇N=∇P时,

G

B

2

,

3

=

(

R

1

,

2

+

R

3

,

4

+

R

1

,

4

+

R

3

,

2

)

/

4

+

(

4

B

2

,

3

G

1

,

2

G

3

,

4

G

1

,

4

G

3

,

2

)

/

4

G_{B_{2,3}} = (R_{1,2} + R_{3,4} + R_{1,4} + R_{3,2} )/4 + (4*B_{2,3}-G_{1,2}-G_{3,4}-G_{1,4}-G_{3,2})/4

GB2,3​​=(R1,2​+R3,4​+R1,4​+R3,2​)/4+(4∗B2,3​−G1,2​−G3,4​−G1,4​−G3,2​)/4


图、kodim19测试图像


图、双线性插值图像


图、自适应插值算法图像


图、双线性插值、自适应插值算法图像对比

双线性插值法使图片变模糊,在图片中栅栏区域有大量的拉链效应和伪彩色失真;自适应插值算法拉链效应会好很多,还是有一点异常需要优化

感兴趣的可以去我的github 跑跑程序

https://github.com/AomanHao/ISP_Demosiac

我的个人博客主页,欢迎访问

我的CSDN主页,欢迎访问

我的GitHub主页,欢迎访问

ISP图像处理之Demosaic算法及相关的更多相关文章

  1. ISP基本框架及算法介绍

    什么是ISP,他的工作原理是怎样的? ISP是Image Signal Processor的缩写,全称是影像处理器.在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始信号数据,可以理解为 ...

  2. ISP图像处理&&相机系统

    如何理解 ISO.快门.光圈.曝光这几个概念? 摄影基础篇——彻底弄清光圈.快门与ISO 理解这三个参数各自都是如何控制进入的光线量: 快门速度一般的表示方法是1/100s.1/30s.2s: 小的“ ...

  3. 图像Demosaic算法及其matlab实现

    由于成本和面积等因素的限定,CMOS/CCD在成像时,感光面阵列前通常会有CFA(color filter array),如下图所示,CFA过滤不同频段的光,因此,Sensor的输出的RAW数据信号包 ...

  4. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  5. Lengauer-Tarjan算法的相关证明

    Lengauer-Tarjan算法的相关证明 0. 约定 为简单起见,下文中的路径均指简单路径(事实上非简单路径不会对结论造成影响). \(V\)代表图的点集,\(E\)代表图的边集,\(T\)代表图 ...

  6. ISP图像处理算法之---Demosaic

    目前市场上主流传感器为Coms传感器,sensor出来的的数据格式为bayer数据格式,这种格式,每个像素点只有三个颜色通道中的一个,如图1所示                             ...

  7. Win8 Metro(C#)数字图像处理--2.66FloodFill算法

    原文:Win8 Metro(C#)数字图像处理--2.66FloodFill算法  [函数名称]   洪水填充算法函数 WriteableBitmap FloodfillProcess(Write ...

  8. c#图像处理的简单算法

    原文链接:https://blog.csdn.net/wchstrife/article/details/78984735 使用C#进行图像处理前言之前一直认为图像处理是一件很高大上的事情,在一门选修 ...

  9. 图像处理------泛洪填充算法(Flood Fill Algorithm) 油漆桶功能

    泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就 ...

  10. ISP PIPLINE (四) Demosaic

    what is the Demosaic? CMOS/CCD在成像时,CFA(color filter array),CFA过滤不同频段的光,因此,Sensor的输出的RAW数据信号包含了3个通道的信 ...

随机推荐

  1. MySQL MHA信息的收集【Filebeat+logstash+MySQL】

    一.项目背景 随着集团MHA集群的日渐增长,MHA管理平台话越来越迫切.而MHA平台的建设第一步就是将这些成百上千套的MHA集群信息收集起来,便于查询和管理. MHA主要信息如下: (1)基础配置信息 ...

  2. Appuploader安装指南

    转载:http://kxdang.com/topic/appuploader/install.html 下载和安装appuploader IOS开发工具官网地址 http://www.applicat ...

  3. [ Docker ] 部署 nps 和 npc 实现内网穿透

    https://www.cnblogs.com/yeungchie/ 云主机上运行 nps 创建映射目录 mkdir -p ~/docker/nps/config 拉取镜像 docker pull o ...

  4. 面试最常问的数组转树,树转数组 c++ web框架paozhu实现

    刚毕业同学,找工作常被问 二维数组转树,树转二维数组 需要支持无限层级实现,如果你了解这个语言那么实现起来还要一番思考 c++ web框架 paozhu使用 需要实现数据库表数据到前台菜单实现,就是这 ...

  5. springCloud项目搭建版本选择

    1.查看spring cloud的版本 https://spring.io/projects/spring-cloud#learn 选择spring boot版本 https://mvnreposit ...

  6. 数据结构(DataStructure)-01

    数据结构-01 **数据结构与算法** **算法概述** **时间复杂度概述** **时间复杂度 - 计算规则** **数据结构概述** **抽象数据类型** **线性表 - 顺序表** **线性表 ...

  7. MAUI开发Android程序使PDA扫码广播消息转发至Web页面

    前言 公司系统的手持终端(PDA)是用的Vue写的前端代码 在PDA上用浏览器直接打开Web页面 PDA扫码的时候,输出模式直接用模拟键盘按键的方式输出 这样在Web页面上,如果一个输入框在当前有焦点 ...

  8. 2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n的数组,powers和rates pow

    2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n的数组,powers和rates pow ...

  9. pg序列的增删改查

    添加序列. CREATE SEQUENCE IF NOT EXISTS public.data_device_id_seq INCREMENT 1 START 1 MINVALUE 1 MAXVALU ...

  10. 2020-10-03:java中satb和tlab有什么区别?

    福哥答案2020-10-03:#福大大架构师每日一题# 简单回答:satb: snapshot-at-the-beginning,快照.tlab:thread local allocation buf ...