图像bayer的参考:
摄像头相关参考:
https://www.cnblogs.com/fjutacm/p/220631977df995512d136e4dbd411951.html
感谢两位博主的辛勤付出,在此基础上,进行一些疑惑解答
目录
1、摄像头模组和摄像头
摄像头模组,Camera Compact Module,简写为CCM,就是已经包含了镜头,ISP,PCB接口的直接能用的,不需要再考虑sensor选型,设计sensor供电电路,时钟电路的。如下图的这些:
摄像头模组硬件结构图:
2、sensor感光原理
sensor是摄像头的核心,负责将通过Lens的光信号转换为电信号,再经过内部AD转换为数字信号。每个pixel像素点只能感受R、G、B中的一种,因此每个像素点中存放的数据是单色光,所以我们通常所说的30万像素或者130万像素,表示的就是有30万或130万个感光点,每个感光点只能感应一种光,这些最原始的感光数据我们称为RAW Data。
解释:sensor上是由一个个感光的小点(你可以这么理解,就是只有几个微米大小的感光器件组成,多少个感光小点就有多少个像素),但是一个像素上要采集多种最基本的颜色,如rgb三种颜色,最简单的方法就是用滤镜的方法,红色的滤镜透过红色的波长,绿色的滤镜透过绿色的波长,蓝色的滤镜透过蓝色的波长。如果要采集rgb三个基本色,则需要三块滤镜,这样价格昂贵,且不好制造,因为三块滤镜都必须保证每一个像素点都对齐显然是不可能的。
所以就有了bayer这种方式,bayer 格式图片在一块滤镜上设置的不同的颜色,通过分析人眼对颜色的感知发现,人眼对绿色比较敏感,所以一般bayer格式的图片绿色格式的像素是是r和g像素的和。
也就是说,一个像素感光只有一种颜色,但是我对外输出的时候,需要知道这个像素的rgb值,我就只能通过周围像素去计算,这个计算和转换是靠ISP去完成的。进从而得出我这个像素的RGB的值,这样我每个像素虽然只感应了一种光,但是每个像素经过处理后传输到外面后就是有RGB的信息了。
以下是博客内解释:
Raw Data数据要经过ISP(应该理解为Image Sensor Processor,是Sensor模块的组成部分,下面有解释)的处理才能还原出三原色,也就是说如果一个像素点感应为R值,那么ISP会根据该感光点周围的G、B的值,通过插值和特效处理等,计算出该R点的G、B值,这样该点的RGB就被还原了sensor是摄像头的核心,负责将通过Lens的光信号转换为电信号,再经过内部AD转换为数字信号。每个pixel像素点只能感受R、G、B中的一种,因此每个像素点中存放的数据是单色光,所以我们通常所说的30万像素或者130万像素,表示的就是有30万或130万个感光点,每个感光点只能感应一种光,这些最原始的感光数据我们称为RAW Data。Raw Data数据要经过ISP(应该理解为Image Sensor Processor,是Sensor模块的组成部分,下面有解释)的处理才能还原出三原色,也就是说如果一个像素点感应为R值,那么ISP会根据该感光点周围的G、B的值,通过插值和特效处理等,计算出该R点的G、B值,这样该点的RGB就被还原了
3、输出格式:
现在一些海思平台,都带有ISP功能,可以直接接收sensor过来的 raw data信号,这个信号可以按照芯片手册上的类型输出,可以是MIPI的,也可以试DVP对于没有ISP的功能的主处理器来说,一般都是从模组上取信号,于是摄像头模组里面干了这个几件事
(1)sensor芯片需要的电源和时钟等信号的设计
(2)有些sensor自己就带内部ISP,或者说集成了,所以输出的直接是YUV或者RGB格式
(3)没有ISP的sensor就需要外部挂一个ISP。电路上就是一个sensor的信号连接到ISP上,信号和传输YUV的这种DVP信号很类似,但是传输的信息是完全不一样的。
摄像头上有这几个参数,有效像素,和像素尺寸大小。
以下是参考博文的内容,扫盲和备份使用,不作为本博客的原创内容,如果有涉及到作者权益,请联系删除:
(1)、工作原理
光线通过镜头Lens进入摄像头内部,然后经过IR Filter过滤红外光,最后到达sensor(传感器),senor分为按照材质可以分为CMOS和CCD两种,可以将光学信号转换为电信号,再通过内部的ADC电路转换为数字信号,然后传输给DSP(如果有的话,如果没有则以DVP的方式传送数据到基带芯片baseband,此时的数据格式Raw Data,后面有讲进行加工)加工处理,转换成RGB、YUV等格式输出。
(2)、镜头 Lens
镜头是相机的灵魂,单反中一个镜头上万是很随意的事。镜头对成像有很重要的作用,相当于人眼中的晶状体,利用透镜的折射原理,景物光线透过镜头在聚焦平面上形成清晰的像,然后通过感光材料CMOS或CCD记录影像,并通过电路转换为电信号。镜头产业有比较高的技术门槛,国外主要集中在日本、韩国,国内主要是在台湾,业内比较知名的如:富士精机、柯尼卡美能达、大力光、Enplas等。
Lens一般由几片透镜组成透镜结构,按材质可分为塑胶透镜(plastic)或玻璃透镜(glass),玻璃镜片比树脂镜片贵。塑胶透镜其实是树脂镜片,透光率和感光性等光学指标比不上镀膜镜片。
通常摄像头采用的镜头结构有:1P、2P、1G1P、1G2P、2G2P、2G3P、4G、5G等。透镜越多,成本越高,相对成像效果会更出色(个人理解是光线更均匀、更细致;对光线的选通更丰富;成像畸变更小,但是会导致镜头变长,光通量变小)。
(3)、红外滤光片 IR Filter
主要是过滤掉进入镜头的光线中的红外光,这是因为人眼看不到红外光,但是sensor却能感受到红外光,所以需要将光线中的红外光滤掉,以便图像更接近人眼看到的效果。
(4)、传感器 Sensor
sensor是摄像头的核心,负责将通过Lens的光信号转换为电信号,再经过内部AD转换为数字信号。每个pixel像素点只能感受R、G、B中的一种,因此每个像素点中存放的数据是单色光,所以我们通常所说的30万像素或者130万像素,表示的就是有30万或130万个感光点,每个感光点只能感应一种光,这些最原始的感光数据我们称为RAW Data。Raw Data数据要经过ISP(应该理解为Image Sensor Processor,是Sensor模块的组成部分,下面有解释)的处理才能还原出三原色,也就是说如果一个像素点感应为R值,那么ISP会根据该感光点周围的G、B的值,通过插值和特效处理等,计算出该R点的G、B值,这样该点的RGB就被还原了,除此之外,ISP还有很多操作,下面有介绍。
目前常用的sensor有两种,一种是CCD(电荷耦合)原件;一种是CMOS(金属氧化物导体)原件。
>>CCD(Charge Coupled Device),电荷耦合器件传感器:使用一种高感光度的半导体材料制成,能把光线转变成电荷,通过模数转换器芯片转换成电信号。CCD由许多独立的感光单位组成,通常以百万像素为单位。当CCD表面受到光照时,每个感光单位都会将电荷反映在组件上,所有的感光单位产生的信号加在一起,就构成了一幅完整的图像。CCD传感器以日本厂商为主导,全球市场上有90%被日本厂商垄断,索尼、松下、夏普是龙头。
>>CMOS(Complementary Metal-Oxide Semiconductor),互补性氧化金属半导体:主要是利用硅和锗做成的半导体,使其在CMOS上共存着带N(-)和P(+)级的半导体,这两个互补效应所产生的电流可以被处理芯片记录并解读成影像。CMOS传感器主要以美国、韩国和中国台湾为主导,主要生产厂家是美国的OmnVison、Agilent、Micron,中国台湾的锐像、原相、泰视等,韩国的三星、现代。
(5)、图像处理芯片 DSP
DSP是CCM的重要组成部分,它的作用是将感光芯片获得的数据及时地快速地传递到中央处理器并刷新感光芯片,因此DSP芯片的好坏,直接影响画面品质,如:色彩饱和度、清晰度、流畅度等。如果sensor没有集成DSP,则通过DVP的方式传输到baseband芯片中(可以理解为外挂DSP),进入DSP的数据是RAW Data,采集到的原始数据。如果集成了DSP,则RAW Data会经过AWB、color matrix、lens shading、gamma、sharpness、AE和de-noise处理,最终输出YUV或者RGB格式的数据。如下图中所示,ISP(Image Sensor Processor,不是Image Signal Processor)部分中使用的就是DSP来处理Image sensor的输出数据(Raw Data):
DSP结构框架:
>>ISP(Image Signal Processor),镜像信号处理器或者图像信号处理器
>>JPEG encoder,JPEG图像编码器,有软件硬件之分。
(6)、DVP
DVP分为三个部分:输出总线;输入总线;电源总线;如下图:
>>输入总线介绍
a>PWDN是camera的使能管脚,有两种配置方式,一种为standby,一种是normal work,设置为standby的时候,一切对camera的操作都是无效的,包括复位。所以在RESET之前,一定要将PWDN管脚设置为normal模式,否则RESET无效。
b>RESET是camera的复位管脚,此方式为硬复位模式,camera的各个IO口恢复到出厂默认状态。只有在XCLK开启后,将RESET置为低,硬复位才有效,否则复位无效。
c>XCLK是camera的工作时钟管脚,此管脚为BB提供camera的工作时钟。
d>IIC是camera和BB通信的总线通道。
>>输出总线介绍
a>data为camera的数据管脚。此数据脚可以输出的格式有YUV、RGB、JPEG等。
b>VSYNC为camera的帧同步信号管脚。一个VYSNC信号结束表示一帧(即一个画面)的数据已经输出完毕。
c>HSYNC为camera行同步信号管脚。一个HSYNC信号结束表示一行的数据已经输出完毕。
d>PCLK为像素同步信号管脚。一个PCLK信号结束表示一个像素点的数据已经输出完毕。
>>Power线介绍
a>AVDD为camera的模拟电压。
b>DOVDD为camera的GPIO口数字电压。
c>DVDD为camera的核工作电压。
一般来说,要求先提供sensor的GPIO口电压,接着提供模拟电压,最后提供工作电压。时序如下图:
(7)、FPC柔性电路板(柔性PCB)
简称"软板", 又称"柔性线路板",连接芯片和手机。起到电信号传输作用。
(8)、ISP、DSP、基带芯片的区别和联系
几篇文章中出现的术语,这里做个专门的补充。
>>常见基带处理器或者基带芯片负责数据处理与储存,相当于一个协处理器,主要组件为DSP、微控制器、内存(如SRAM、Flash)等单元,主要功能为基带编码/译码、声音编码及语音编码 等。目前主流基带架构:DSP+ARM。可分为五个子块:CPU处理器、信道编码器、DSP、调制解调器和接口模块。
基带芯片是用来合成即将的发射的基带信号,或对接收到的基带信号进行解码。具体地说,就是:发射时,把音频信号编译成用来发射的基带码;接收时,把收到的基带码解译为音频信号。同时,也负责地址信息(手机号、网站地址)、文字信息(短讯文字、网站文字)、图片信息的编译。
>>ISP,Image Signal Processor,图像信号处理器;DSP,Data Signal Processor,数字信号处理器。
ISP一般用来处理Image Sensor(图像传感器)的输出数据,如进行:AEC(自动曝光控制)、AGC(自动增益控制)、AWB(自动白平衡)、色彩校正、Gamma校正、祛除坏点、Auto Black Level、Auto White Level 等等功能的处理。
>>而DSP功能就比较多了,它可以做些拍照以及回显(JPEG的编解码)、录像以及回放(Video 的编解码)、H.264的编解码、还有很多其他方面的处理,总之是处理数字信号了。可以认为ISP是一类特殊的处理图像信号的DSP。
在这篇文章中,可以将基带芯片当做开发板上的控制芯片,ISP和DSP可以对等,都是对Raw Data进行处理。这里尊重原文作者的说法,并没有统一。
还有要注意的是,在摄像头这部分,要看清楚ISP表示的是什么,是Image Signal Processor(图像信号处理器),还是Image Sensor Processor(图像传感器处理器)。像上面的OV2665里面的ISP就是Image Sensor Processor,相当于Sensor模块中的一部分,由DSP做处理器。而下面的GC0308,则正好相反,是Image Signal Processor,是一个真正的处理器,所以在看到ISP的时候要根据语境看指的是一个具体的处理器还是模块的组成部分而非实指。
3、CCM组装方式
(1)、定焦CCM组装
CCM分为定焦模组和自动变焦模组,其中定焦模组主要由镜头、镜座、感光集成电路、软性线路板、补强和钢片装配而成,其装配图如下:
(2)、自动变焦模组组装
主要是镜头下面装了一个VCM音圈马达
(3)、3D模组
多台摄像头拍摄图像,然后组合:
4、摄像头的一些技术指标
(1)、图像解析度/分辨率(resolution)
QSIF/QQVGA | 160 x 120 | 19200 | |
QCIF | 176 x 144 | 25344 | |
SIF/QVGA | 320 x 240 | 76800 | |
CIF | 352 x 288 | 101376 | 10万像素 |
VGA | 640 x 480 | 307200 | 30万像素(35万是指648X488) |
SVGA | 800 x 600 | 480000 | 50万像素 |
XGA | 1024 x 768 | 786438 | 80万像素 |
SXGA | 1280 x 1024 | 1310720 | 130万像素 |
UXGA | 1600 x 1200 | 1920000 | 200万像素 |
QXGA | 2048 x 1536 | 3145728 | 300万像素(320W) |
QSXGA | 2592 x 1944 | 5038848 | 500万像素 |
2816 x 2112 | 2947392 | 600万像素 | |
3072 x 2304 | 7077888 | 700万像素 | |
3200 x 2400 | 7680000 | 770万像素 | |
3264 x 2448 | 7990272 | 800万像素 | |
3876 x 2584 | 10015584 | 1000万像素 |
(2)、sensor输出的图像格式
>>YUV:luma(Y)+chroma(UV)格式(亮度、色度),一般情况下sensor支持YUV422格式,即Y-U-Y-V次序输出数据。
>>RGB:传统的红绿蓝格式,比如RGB565,5bit R + 6bit G + 5bit B,G多一位是因为人眼对绿色比较敏感。
>>RAW RGB:sensor的每一像素对应一个彩色滤光片,滤光片按Bayer Pattern(拜耳模板)分布,将每一个像素的数据直接输出,即Raw RGB Data。
>>JPEG:有些sensor,特别是低分辨率的,其自带JPEG engine,可以直接输出压缩后的jpg格式的数据。
注意:
a>YUV一个像素占2B,如果像素太大,在高时钟下基带芯片处理不过来,JPEG数据量就要小很多,因为基带芯片对输出数据的速率有要求,所以基带芯片低时钟下使用YUV sensor,高时钟下使用JPEG sensor。
b>如果直接输出RGB,对于LCD显示是最方便的,但是大多数基带芯片都是要求输出为YUV格式的数据再进行,这是因为,YUV输出数据的亮度信号没有任何损失,而色偏信号人眼并不是特别敏感,RGB565输出格式是R5G3 G3B5,会丢失很多原始信息,所以YUV图像质量和稳定性要比RGB565好的多。因此,很低端的基带芯片上才会输出RGB565格式。
Raw和JPEG的区别:
Raw优点:
1>Raw格式文件本质上是一个没有经过任何图像处理的源文件,它能原原本本地记录相机拍摄的信息,没有经过图像处理(锐化、色彩对比增强)和压缩而造成的信息丢失。相比之下,JPEG格式的数据经过压缩处理,无法完整的保存原图形的所有数据。
2>Raw是一种专业摄影师常用的格式,因为它能原原本本地保存信息,让用户能大幅度进行后期制作,并且无论怎么操作,照片都能无损的恢复到最初状态;但是JPEG就弱了些,虽然因为PS等技术的发展,也可以在JPEG上进行后期制作,但是如果做大幅度的调整还是Raw文件比较合适。
3>可以用专门的软件修正摄像机的不足,比如佳能DPP软件可以修正镜头失光、变形等。
Raw缺点:
1>存储数据量太大,JPEG就小很多
2>需要专门的软件来打开,JPEG几乎所有的PC都可以直接打开
3>打开速度较慢,JPEG较快
4>不同的软件有不同的方式去演绎RAW文件,所以在不同的软件上会有细微的差别。
5>厂商卖的专用软件价格较高,而这方面JPEG几乎无成本
(3)、自动白平衡调整(AWB)
定义:要求在不同色温环境下,照白色的物体,屏幕中的图像应也是白色的。色温表示光谱成份,光的颜色。色温低表示长波光成分多。当色温改变时,光源中三基色(红、绿、蓝)的比例会发生变化,需要调节三基色的比例来达到彩色的平衡,这就是白平衡调节的实际。
(4)、图像压缩方式
JPEG:(joint photo graphicexpert group)静态图像压缩方式。一种有损图像的压缩方式。压缩比越大,图像质量也就越差。当图像精度要求不高存储空间有限时,可以选择这种格式。目前大部分数码相机都使用JPEG格式。
(5)、彩色深度(色彩位数)
反映对色彩的识别能力和成像的色彩表现能力,实际就是A/D转换器的量化精度,是指将信号分成多少个等级。常用色彩位数(bit)表示。彩色深度越高,获得的影像色彩就越艳丽动人。现在市场上的摄像头均已达到24位,有的甚至是32位(原文)
(6)、图像噪音
指的是图像中的杂点干挠。表现为图像中有固定的彩色杂点。
(7)、视角
与人的眼睛成像是相同原理,简单说就是成像范围。
(8)、输出/输入接口
串行接口(RS232/422):传输速率慢,为115kbit/s
并行接口(PP):速率可以达到1Mbit/s
红外接口(IrDA):速率也是115kbit/s,一般笔记本电脑有此接口
通用串行总线USB:即插即用的接口标准,支持热插拔。USB1.1速率可达12Mbit/s,USB2.0可达480Mbit/s
IEEE1394(火线)接口(亦称ilink):其传输速率可达100M~400Mbit/s
(9)、CAMIF, Camera Interface
下面这张图,没看懂,暂时放在这里:
(10)、FIME,Fully Interactive Moblio Camera
摄像头采集的数据CPU无法直接处理,所以,主动芯片里面集成了Camera控制器,即FIMC。摄像头需要先将图像数九传送给控制器,经过控制器处理(裁剪拉升后直接预览或者编码)之后交给CPU处理。MCLK就是由FIMC提供的。
CAMMCLK给摄像头提供时钟,CAMRST是复位线,PWD在摄像头工作时应该始终为敌。HREF是行参考信号,PCLK是像素始终,VSYNC是场同步信号,一旦给摄像头提供了时钟,并且复位了摄像头,摄像头就开始工作了。
FIMC信号定义如下所示(YCbCr模式)
Signal
I/O
Description
Type
HREF
I
行同步信号
PCLK
I
像素时钟
DATA[7:0]
I
像素数据
FIELD
O
FIELD信号
MCLK O
系统时钟信号
(11)、camera时钟域
每个摄像头都有三个时钟域,第一个是系统总线时钟域;第二个是摄像头像素时钟域PCLK;第三个是内部始终MCLK。
系统总线时钟必须高于PCLK,CAM_MCLK必须固定频率发呢拼比,如:PLL时钟。
二、摄像头工作原理
1、手册中内容扫盲:
首先,我们要明白,一旦给摄像头提供了时钟,并且复位了摄像头,摄像头就可以工作了,通过PCLK、HSYNC、VSYNC听不传输数字图像信号。
摄像头的驱动需要完成三大步:
>>摄像头的上电、时钟这些基本条件
>>IIC保证摄像头的初始化
>>摄像头工作后传回数据到主控
原图有误,已经修改,红色圈圈部分。
控制部分是摄像头上电、IIC控制接口;数据输出是摄像头拍摄的图像数据传到主控芯片,所以,需要有Data、行场同步时钟(告诉主控芯片哪些数据是一行,哪些是一帧)、以及时钟(PCLK,像素时钟,告诉主控芯片哪些数据是一个像素点)。
(1)、MCLK
摄像头要 工作,必须要有个时钟进行同步,这个时钟就是MCLK,必须要有,否则摄像头就是一个死物,这个时钟由主控芯片提供,确切的说是有主控芯片的控制器提供,下面会提到。
(2)、RESET
复位信号,上面有提
(3)、SDA、SCL
IIC总线,主要作用就是为主控芯片配置或者读取摄像头的寄存器提供通道。mini2440音频模块中的L3协议,也是这个作用。不要看见协议就怕,协议就是一条路,数据传输的路,有规定的数据传输的道路。
(4)、Configuration Register
配置寄存器,控制器(在主控芯片中)通过IIC来设置,相当于告诉摄像头如何工作等。
(5)、Timing Control
时序控制,主要是根据主控芯片提供的MCLK时钟来控制行场同步、自动曝光AEC等。因为这些都需要时钟的配合。
(6)、Pixel Array
gc0308物理上的阵列是648H*492V,实际采样阵列是648H*488V,也是有效阵列。实际取像的阵列是640H*480V。如下图所示:
(7)、CDS
Correlated Double Sampling,相关双联取样电路。CCD传感器的每个像素点输出波形只在一部分时间内是图像信号,其余时间是复位电平和干扰,为了提取图像信号并消除干扰,就要采用取样保持电路。
(8)、Analog Processing、10bit ADC
主要是将sensor得到的电信号转换为数字信号,方便ISP或者DSP处理。
(9)、Image Signal Processing
图像信号处理器,可以理解为DSP的一种,主要是对sensor经过ADC处理后的Raw Data进行处理,主要有自动白平衡AWB、插值计算(Bayer interpolation主要是对Raw Data进行格式转换,转为YUV /RGB等)、去噪、gamaa修正、色彩修正、边缘增强等。这些都是由寄存器决定,寄存器又是通过IIC总线来设置的。
(10)、Output Mode & Sync Control
输出接口,从光线进入镜头、过滤、光感应、ADC,然后到图像数据处理,最终数据到达外部接口。摄像头取一幅图像的整个工作完成,摄像头本质上还是一个终端节点,所以需要将采集好的图像数据传递给主控芯片,所以要有数据引脚,图形格式补在是Raw Data,而是YUV或者RGB数据。进行数据传输,肯定需要时钟进行同步,所以需要PCLK,告诉主控芯片,哪个数据代表了一个像素点;VSYNC负责告诉芯片哪些是一帧数据,HSYNC则同步行数据。
(11)、设备地址
百科上的定义,在数据通信中,可以发送或接受数据的任何设备标识。
操作系统课程上面有讲到,系统为了管理外部设备而进行的编码。不知道这个地址是不是这个意思。
反正写入的时候指定0x42,读取的时候指定0x43,
(12)、IIC通信
IIC通信是一个交互的过程,需要等待对方的确认信号,并不是一次性完成的。首先,主机需要做两个事情:
一个是,提供启动、结束信号;一个是提供IIC时钟信号。图示很明白了,不在啰嗦。
(13)、时序 Timing
帧时间(Ft,Frame time)=帧时钟不活动时间(Bt,Blank time)+启动时间(St,Start time)+有效行时间(Vt,Valid line time)+结束时间(Et,End time)+8
空白无效行时间(Vblank/Dummy line)=Bt+St+Et。
首先要明白,物理上492行,但是实际感应光线的只有488行,4行是Dark Row,黑暗行;但是这488有数据的行中只有480行是有效行。然后推导公式,首先分析小公式——空白行时间,空白时间包括无效的帧同步时间,这里就是VSYNC处于高电平的无效时间;开始数据采集之前需要有几个时钟周期的缓冲,然后才开始采集行数据,所以这个时间,也就是启动时间也要算在空白行时间里面,同理,480行有效数据采集完成后,也需要几个时钟周期表示数据采集结束,结束时间也要包括在空白行时间里面。
一帧图像所需要的时间,首先包括空白行时间Bt,还有有效行时间Vt,然后加上8。这个8应该是代表那8行无效数据(不确定),欢迎留言!
exp_time应该是曝光时间,当曝光时间小于488行数据采集时间+空白行时间,这帧时间由所有行采集的时间+空白行时间控制,那么VSYNC无效电平的时间=行空白时间-启动时间-结束时间。
如果曝光时间超过win_height+VB,也就是在曝光没有在正常的一帧时间内完成,那么肯定需要继续曝光,帧时间由曝光时间确定。帧同步无效时间=曝光时间-win_height-启动时间-结束时间。
1 图像bayer格式介绍
bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer发明的,Bryce Bayer所发明的拜耳阵列被广泛运用数字图像。
对于彩色图像,需要采集多种最基本的颜色,如rgb三种颜色,最简单的方法就是用滤镜的方法,红色的滤镜透过红色的波长,绿色的滤镜透过绿色的波长,蓝色的滤镜透过蓝色的波长。如果要采集rgb三个基本色,则需要三块滤镜,这样价格昂贵,且不好制造,因为三块滤镜都必须保证每一个像素点都对齐。当用bayer格式的时候,很好的解决了这个问题。bayer 格式图片在一块滤镜上设置的不同的颜色,通过分析人眼对颜色的感知发现,人眼对绿色比较敏感,所以一般bayer格式的图片绿色格式的像素是是r和g像素的和。
另外,Bayer格式是相机内部的原始图片, 一般后缀名为.raw。很多软件都可以查看, 比如PS。我们相机拍照下来存储在存储卡上的.jpeg或其它格式的图片, 都是从.raw格式转化过来的。如下图,为bayer色彩滤波阵列,由一半的G,1/4的R,1/4的B组成。
Bayer数据,其一般格式为:
奇数扫描行输出 RGRG……
偶数扫描行输出 GBGB……
根据人眼对彩色的响应带宽不高的大面积着色特点,每个像素没有必要同时输出3种颜色。因此,数据采样时,
奇数扫描行的第1,2,3,4,…象素分别采样和输出R,G,R,G,…数据;
偶数扫描行的第1,2,3,4,…象素分别采样和输出G,B,G,B,…数据。
在实际处理时,每个象素的R,G,B信号由象素本身输出的某一种颜色信号和相邻象素输出的其他颜色信号构成。这种采样方式在基本不降低图像质量的同时,可以将采样频率降低60%以上。
2 bayer格式图像传感器硬件
图像传感器的结构如下所示,每一个感光像素之间都有金属隔离层,光纤通过显微镜头,在色彩滤波器过滤之后,投射到相应的漏洞式硅的感光元件上。
当Image Sensor往外逐行输出数据时,像素的序列为GRGRGR.../BGBGBG...(顺序RGB)。这样阵列的Sensor设计,使得RGB传感器减少到了全色传感器的1/3,如下所示。
3 bayer格式插值红蓝算法实现
每一个像素仅仅包括了光谱的一部分,必须通过插值来实现每个像素的RGB值。为了从Bayer格式得到每个像素的RGB格式,我们需要通过插值填补缺失的2个色彩。插值的方法有很多(包括领域、线性、3*3等),速度与质量权衡,最好的线性插值补偿算法。其中算法如下:
R和B通过线性领域插值,但这有四种不同的分布,如下图所示:
(a) (b)
(c) (d)
在(a)与(b)中,R和B分别取邻域的平均值。
在(c)与(d)中,取领域的4个B或R的均值作为中间像素的B值。
4 bayer格式插值绿算法实现
(c) (d)
由于人眼对绿光反应最敏感,对紫光和红光则反应较弱,因此为了达到更好的画质,需要对G特殊照顾。在上述(c)与(d)中,扩展开来就是上图的(e)与(f)中间像素G的取值,者也有一定的算法要求,不同的算法效果上会有差异。经过相关的研究,
(e)中间像素G值的算法如下:
(f)中间像素G值的算法如下:
CMOS摄像头这部分转换是在内部用ADC或者ISP完成的,生产商为了降低成本必然会使得图像失真。当然用外部处理器来实现转换,如果处理器的速度足够NB,能够胜任像素的操作,用上面的算法来进行转换,皆大欢喜。不过上述算法将直接成倍提高了算法的复杂度,速度上将会有所限制。因此为了速度的提成,可以直接通过来4领域G取均值来中间像素的G值,将会降低一倍的速率,而在性能上差之甚微,算法如下:
如果能够通过损失图像的额质量,来达到更快的速度,还可以取G1、G2的均值来实现,但是这样的做法会导致边沿以及跳变部分的失真。