Bayer滤镜如何转换颜色?

Bayer模式是颜色模式,被广泛应用于CCD和CMOS摄像头。相机使用了拜耳滤镜,分别过滤得到红绿蓝三种颜色。既然要得到的是红绿蓝频段光线的强度,要通过的就是红绿蓝光,就反射了其他频段的光线。

比如说红色滤镜应该是 反射 了除去红色那一个波段的其他光。这里有一个疑问:它是 保留 了人眼可见的感觉是红的500–700nm波长的光可以通过,还是保留那个特定的人眼反应是最红的那个波长可以通过?

因为这好像涉及到复合光(即自然界的各种波长的光叠加)与单纯的RGB(即只有特定那个颜色频率的光,只改变光强叠加出来的光)的转换问题。虽然所有他们可以表示的颜色看起来是不差的(即可以用RGB表示看到的几乎所有复合光的一样的颜色),可是怎么把看起来是某一颜色的自然复合光不差地转换为看起来颜色一样的RGB数值呢?只要看起来是最红的那个波长的光就可以了吗?还是只要有点红的都要。这怎么取舍?取舍之后拍出来照片的颜色是在一定范围内人眼看不出来,但和实际看到的自然色应该是有误差的。

如果是反射其他波长的光那么RGB滤镜看起来是青色(0, 255, 255),紫色(255, 0, 255),黄色(255, 255 ,0)这三个颜色,而非示意图上的红绿蓝。

因为人眼三种视锥细胞对波长的响应是有重叠的部分的。它反射了其余波长的光看起来到底会是什么颜色的?

RGB Bayer Color分析

Bayer色彩滤波阵列

拜耳色彩滤波阵列(Bayer Color Filter Array,CFA)是非常有名的彩色图片的数字采集格式。色彩滤波器的模式如上图所示,由一半的G,1/4的R,1/4的B组成。

拜耳色彩滤波器的模式、序列、滤波器有很多种,但最常见的模式是由Kodak提出的2*2模式。

当Image Sensor往外逐行输出数据时,像素的序列为GRGRGR.../BGBGBG...(顺序RGB)。这样阵列的Sensor设计,使得RGB传感器减少到了全色传感器的1/3,如下所示。

图像传感器的结构如下所示,每一个感光像素之间都有金属隔离层,光纤通过显微镜头,在色彩滤波器过滤之后,投射到相应的漏洞式硅的感光元件上。

白平衡调节(White Balance)

色彩传感器并不能像人眼那样直接感应图像,因此为了保证最终图像的真实性,必须经过一些白平衡处理以及色彩校正等算法来修正图像。

原始像素的第一步处理操作就是白平衡调节。一个白色物体每通道的白平衡都应该是相同的,即R=G=B。通过白色物体的采集以及直方图分析,拥有最高级别白平衡的通道被作为目标通道,而其他两个通道通过增益达到匹配,如下:R'=aG'=bB'。同时,随着光源的不同,白平衡也应该相应的调节。

Bayer插值补偿算法(Bayer Interpolation)

1) 插值红蓝算法实现

每一个像素仅仅包括了光谱的一部分,必须通过插值来实现每个像素的RGB值。为了从Bayer格式得到每个像素的RGB格式,需要通过插值填补缺失的2个色彩。插值的方法有很多(包括领域、线性、3*3等),速度与质量权衡,最好的线性插值补偿算法。其中算法如下:

R和B通过线性领域插值,但这有四种不同的分布,如下图所示:

在(a)与(b)中,R和B分别取领域的平均值。

2) 插值绿算法实现

在(c)与(d)中,取领域的4个B或R的均值作为中间像素的B值。

由于人眼对绿光反应最敏感,对紫光和红光则反应较弱,因此为了达到更好的画质,需要对G特殊照顾。在上述(c)与(d)中,扩展开来就是上图的(e)与(f)中间像素G的取值,者也有一定的算法要求,不同的算法效果上会有差异。经过相关的研究,(e)中间像素G值的算法如下:

(f)中间像素G值的算法如下:

CMOS摄像头这部分转换是在内部用ADC或者ISP完成的,生产商为了降低成本必然会使得图像失真。当然用外部处理器来实现转换,如果处理器的速度足够NB,能够胜任像素的操作,用上面的算法来进行转换。不过上述算法将直接成倍提高了算法的复杂度,速度上将会有所限制。因此为了速度的提成,可以直接通过来4领域G取均值来中间像素的G值,将会降低一倍的速率,而在性能上差之甚微,算法如下:

如果能够通过损失图像的额质量,来达到更快的速度,还可以取G1、G2的均值来实现,但是这样的做法会导致边沿以及跳变部分的失真。

从一个单独平面中得到彩色图像,该平面的R/G/B像素点如下表所示安排。

对像素输出的RGB分量由该像素的1、2或者4邻域中具有相同颜色的点插值得到。Bayer模式可以通过向左或向上平移一个像素点来进行一些修改。比如说,Bayer模式具有很流行的BG类型。

实际上不明白用RGB来表示可见颜色以后。RGB的三个分量的叠加关系是线性叠加。那么对RGB应用数值变换,比如说减去红分量一个数。

CFA的滤过波段不是完美的单一波长的,其实很希望能这样做,因为这样的话各通道分离度越高,对色彩的还原就会越准确。而这个现象反向的话,最极端的结果就是黑白传感器,不能获得任何有效的色彩信息。

CFA的波长透过曲线各个CIS(CMOS Image Sensor)各不相同,这也是拍摄出来图像的色彩表现的一个重要影响因素,比如大家一直说的SONY的色彩表现不佳,这个问题和CFA的性能是绝对离不开的。

比如,CFA透过曲线,就是一个很典型的例子,通过提高RGB分离度来获得更高的色准。

RYYB这种排列,就会导致色彩反算的准确度降低。

CFA的取舍非常重要,这个也算是各个厂商一直在各种攻关的一点了。

拍到的照片的颜色和实际颜色差别是很大的。这个需要通过色彩管理来实现,如何获取XYZ坐标,如何向RGB空间映射,这些展开的话就太多了。

然后是第二问,CFA不是反射无法透过的光,是吸收无法透过的光,所以理论上完美的CFA应该是黑的,不过实际上大家都知道不存在这种完美材料,基本颜色就是和CFA像素对应的颜色看起来是一致的。

然后其实你的最后一个问题是很好的,如果把拍照看作一个图像信息获取的过程的话,其实是非常希望得到全光谱数据而不是单单的RGB数据的。比如微软就做过类似的工作。

这个例子里,对RGB的数值进行变换,本质上是加权减去一部分光谱能量的。但不能从RGB的图片中提取出原始的光谱信息,因为从光谱到RGB的这个映射过程实际上已经把那些数据都拍平了,是一种“降维打击”。

CFA根据techinsight的报告,拍下来看就是红蓝绿的颜色。

Bayer滤镜转换颜色方案的更多相关文章

  1. 2018-9-30-C#-winforms-输入颜色转换颜色名

    title author date CreateTime categories C# winforms 输入颜色转换颜色名 lindexi 2018-09-30 18:27:49 +0800 2018 ...

  2. Ubuntu终端字体颜色方案

    默认: 蓝色代表该文件夹: 绿色代表可运行文件. 红色表示压缩文件. 浅蓝色表示链接文件: 灰色表示其它文件: 红色闪烁表示链接的文件有问题了 黄色表示设备文件. 非常不爽怎么办,改! # Attri ...

  3. 设置vim颜色方案

    获取所有vim颜色配置方案 ls /usr/share/vim/vim74/colors/ [root@lx ~]# ls /usr/share/vim/vim74/colors/ blue.vim ...

  4. css过滤镜实现颜色渐变

    语法:filter : progid:DXImageTransform.Microsoft.Gradient ( enabled=bEnabled , startColorStr=iWidth , e ...

  5. 设置SecureCRT的背景色和文字颜色方案

    一.对于临时设置,可以如下操作: 首先options -- session - appearance 此处可以设置临时的窗口背景,字体颜色,大小等等,为什么说是临时,是因为只要你关闭连接后,又会恢复. ...

  6. secureCRT颜色方案设置

    按照如下设置后vim编辑会有如下颜色提示

  7. shell 通过ANSI转换颜色

    格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[控制码" 如果单纯显示字体颜色可以固定控制码位0m. 格式: echo -e "\033[字背景 ...

  8. C# winforms 输入颜色转换颜色名

    本文告诉大家如何输入颜色,如0xFFFF8000转换为 Orange 在 winforms 程序 可以使用下面代码转换 public static class HexColorTranslator { ...

  9. Tkinter颜色方案举例

    效果图: 示例代码: # _*_ coding: utf-8 _*_ from Tkinter import * colors = '''#FFB6C1 LightPink 浅粉红 ,#FFC0CB ...

随机推荐

  1. 『政善治』Postman工具 — 3、补充:restful风格接口的项目说明

    目录 (一)RESTful架构风格特点 1.统一接口风格 2.规范的HTTP请求方法 3.HTTP响应码 4.什么是无状态 (二)JSON数据格式说明 1.什么是JSON 2.JSON格式的特点 3. ...

  2. 病毒木马查杀实战第014篇:U盘病毒之手动查杀

    在U盘中发现病毒 前段时间需要往虚拟机中拷贝点资料,如同往常一样,插上我的U盘,并且在虚拟机的设置中选择连接U盘.奇怪的是这次的连接时间较以往长,并且还出现了"自动播放"窗口: 图 ...

  3. 010 Editor体验

    源代码的我们现在拥有各式各样的IDE和编辑器可以去查看,但二进制文件对于大多数软件只能做到显示16进制,而不能按照文件类型的格式去显示.今天我们就用dex文件让010 show. 安装软件: http ...

  4. layui框架下如何给select的option选项赋值

    后端返回数据格式 axios方法执行成功后返回的数据格式如下图 前端下拉框 <div class="layui-form-item"> <label class= ...

  5. Excel-宏与VBA-数据类型

    学习视频,本文是观看前视频时做的笔记,手动感谢up. 数据类型 案例 声明一个变量并且赋值 Sub 变量() ' 声明一个变量用Dim,格式就是 Dim 变量名 As 数据类型 Dim Score A ...

  6. VS中光标变成方块状,输入时会把光标覆盖的部分替换掉的解决方法

    按下键盘上的Insert键,切换为插入模式.

  7. 3D深色金属哥特3D项目工具小图标icon高清设计素材

    3D深色金属哥特3D项目工具小图标icon高清设计素材

  8. Spring的Xml和JavaConfig 扩展你选哪一个?

    引言 上一篇文章我们有怎么介绍到如何通过XML的形式来定义Spring的扩展<Spring面试高频题如何:自定义XML schema 扩展>,好多人都在吐槽现在都什么年代了,xml还有人再 ...

  9. JAVA基础——包机制

    包机制 包的语法格式package pkg1[.pkg2[.pkg3...]] 一般利用 公司域名倒置 作为包名; 例如www.baidu.com,则建立报的名字com.baidu.www 一般不要让 ...

  10. [刷题] PTA 02-线性结构3 Reversing Linked List

    链表逆序 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 using namesp ...