Bayer滤镜转换颜色方案
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滤镜转换颜色方案的更多相关文章
- 2018-9-30-C#-winforms-输入颜色转换颜色名
title author date CreateTime categories C# winforms 输入颜色转换颜色名 lindexi 2018-09-30 18:27:49 +0800 2018 ...
- Ubuntu终端字体颜色方案
默认: 蓝色代表该文件夹: 绿色代表可运行文件. 红色表示压缩文件. 浅蓝色表示链接文件: 灰色表示其它文件: 红色闪烁表示链接的文件有问题了 黄色表示设备文件. 非常不爽怎么办,改! # Attri ...
- 设置vim颜色方案
获取所有vim颜色配置方案 ls /usr/share/vim/vim74/colors/ [root@lx ~]# ls /usr/share/vim/vim74/colors/ blue.vim ...
- css过滤镜实现颜色渐变
语法:filter : progid:DXImageTransform.Microsoft.Gradient ( enabled=bEnabled , startColorStr=iWidth , e ...
- 设置SecureCRT的背景色和文字颜色方案
一.对于临时设置,可以如下操作: 首先options -- session - appearance 此处可以设置临时的窗口背景,字体颜色,大小等等,为什么说是临时,是因为只要你关闭连接后,又会恢复. ...
- secureCRT颜色方案设置
按照如下设置后vim编辑会有如下颜色提示
- shell 通过ANSI转换颜色
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[控制码" 如果单纯显示字体颜色可以固定控制码位0m. 格式: echo -e "\033[字背景 ...
- C# winforms 输入颜色转换颜色名
本文告诉大家如何输入颜色,如0xFFFF8000转换为 Orange 在 winforms 程序 可以使用下面代码转换 public static class HexColorTranslator { ...
- Tkinter颜色方案举例
效果图: 示例代码: # _*_ coding: utf-8 _*_ from Tkinter import * colors = '''#FFB6C1 LightPink 浅粉红 ,#FFC0CB ...
随机推荐
- 多指灵巧手MoveIt!与Gazebo联合仿真框架搭建
至于为什么叫框架,一是因为灵巧手的3维模型没有按照基本的设计要求画,正常来说,设计机器人机构之前应该设计好机构需要多少个自由度/DOF,每个自由度是旋转/revolute类型还是滑移/prismati ...
- hdu4971 流-最大权闭包
题意: 给了一些任务,然后给了一些完成某些任务的限制,然后又给了限制之间的拓扑关系,最后问你最大收益. 思路: 很直白,就是流的一个应用,最大权闭包,没涉及到什么想法的地方,建 ...
- 基于ray的分布式机器学习(二)
基本思路:基于parameter server + multiple workers模式.同步方式:parameter server负责网络参数的统一管理,每次迭代均将参数发送给每一个worker,多 ...
- 使用花生壳、瑞友天翼远程访问金蝶K3
金蝶版本号 WISE15.1 瑞友6.0系列 花生壳5 金蝶软件无法通过外网直接访问 因此需要使用瑞友天翼来实现远程访问 一般来说 金蝶服务器固定了IP地址以后 通过路由器开房两个外网端口即可实现瑞友 ...
- JavaWeb——JDBC连接池&JDBCTemplate
今日内容 1. 数据库连接池 2. Spring JDBC : JDBC Template 数据库连接池 1. 概念:其实就是一个容器(集合),存放数据库连接的容器. 当系统初始化好后,容器被创建,容 ...
- Spring中声明式事务存在的优缺点以及注意事项!
事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种. 关于事务的基础知识,如什么是事务,数据库事务以及Spring事务的ACID.隔离级别. ...
- Java集合详解(一):全面理解Java集合
概述 Java所有集合类都在java.util包下,支持并发的集合在java.util.concurrent(juc)包下. 集合与数组区别: 数组大小是固定的,集合大小可以根据使用情况进行动态扩容. ...
- 从零搭建springboot服务01-初始搭建、内嵌swagger
愿历尽千帆,归来仍是少年 1.基础springBoot框架 编辑工具:IDEA.jdk1.8.tomcat8.maven3.3.9 编码格式:UTF-8 参考文献:https://www.cnblog ...
- CentOS、RHEL、Asianux、Neokylin、湖南麒麟、BC Linux、普华、EulerOS请参考“1.1 CentOS本地源配置”;
本文档适用于CentOS.RHEL.Asianux.Neokylin.湖南麒麟.BC Linux.普华.EulerOS.SLES.Ubuntu.Deepin.银河麒麟. CentOS.RHEL.A ...
- 优启通-PE启动盘制作工具 原版Win7系统安装超详细教程!!!!!
https://www.jianshu.com/p/cd4abc9889b6 前期准备 原版Win7系统ISO映像文件 PE启动U盘或系统光盘(本教程以纯净无捆绑的优启通PE为示例) 优启通v3.3下 ...