鹰眼视图——《图样,too simple》系列之三

网友投稿 884 2022-05-28

引言:最近为FPGA验证做图片生成器,检索了多种图片格式的介绍文档,这里做一个总结,希望对刚接触数字图像处理的新同事有所帮助。本系列分三部分,介绍工作中常见的YUV、RAW等各种图片格式,不求艰深晦涩,但求简洁明了。

本文是第三部分:RAW10? RAW12? RAW14? BGGR? 原来如此原始+土豪!

1      RAW简介

RAW的原意就是“未经加工的、原始的”,可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光信号转为电信号,进而转为数字信号的原始数据,换句话说,RAW图就是记录每个像素点的光强(亮度)信息。

以下为从光源(被摄物体)à 镜头 à CCD(光电耦合器件)à ADC(模数转换)à RAW图的大概流程。

按照每个像素点亮度记录精度(位深)的不同,区分为RAW 10bits,RAW 12bits和RAW 14bits,简称为RAW10,RAW12和RAW14。

2      RAW图的数据存储

不管是RAW10,RAW12还是RAW14,都是每两个字节(16bits)存储一个像素的亮度值,有效bit位数分别为10、12和14,无效bit位用0补齐,所以这三种raw图文件的大小都是宽x高x2个字节

2.1      RAW10

在RAW10图文件中,每个像素点的亮度值用10个bit位表示,也就是从最暗到最亮分1024个层次精度。每个像素点的亮度值用两个字节表示,其中6个无效的bit位用0表示,以下是用十六进制形式打开的一个RAW10图文件:

红框中的字节最大值为0x03,前6个bit位全是0。文件中无效数据占文件总大小的近40%,可以说相当“土豪”(langfei)。

2.2      RAW12

在RAW12图文件中,每个像素点的亮度值用12个bit位表示,也就是从最暗到最亮分4096(2的12次方)个层次精度。每个像素点的亮度值同样用两个字节表示,其中4个无效的bit位用0表示,以下是用十六进制形式打开的一个RAW12图文件:

红框中的字节最大值为0x0F,前4个bit位全是0。

2.3      RAW14

读者可以根据RAW10和RAW12自行扩展,这里不再赘叙。

3      Bayer pattern

大家可能注意到,上面对RAW图的介绍未涉及到色彩,实际上CCD只能根据光强信号转换为对应强度的电信号,而无法分辨色彩(可见光波长),相当于“色盲”。这样一来,我们得到的RAW图也只能是mono图,显然这是不能接受的。

有人自然想到了一个简单粗暴的解决办法:用R、G、B滤光片将白光分解成三原色,分别用一块CCD来做光电转换,最后合成一张彩*** ,这就是3CCD相机。原理图如下:

原理简单,但是元件成本倍增,商业大佬们表示很不满意。于是柯达公司的拜尔发明了一种棋盘状的滤光片,只用一块CCD,就解决了颜色的识别:

上图中的滤光片上布满了一个个排列规则的滤光点,与后面CCD上的像素一一对应,每个滤光点只能通过R、G、B中的一种颜色,这意味着照射在下层CCD每一个像素上的光只能是固定的某种颜色,从而实现了CCD对色彩的辨别,如下图所示:

仔细看拜尔滤光片上棋盘状的颜色分布,是有规律的,这就是Bayer pattern(拜尔模板),常见的有以下4种:

上述pattern中,每4个像素记录1个R、1个B和2个G,之所以绿色得到“倚重”,是因为人眼对绿光最敏感。

这样一来,我们得到的RAW图就不再是mono图,而是彩图,效果如下所示:

最后经过插值算法,根据周边像素点计算出中心像素点上另外两种原色分量,就得到一张看上去比较正常的RAW图:

鹰眼视图——《图样,too simple》系列之三

篇幅所限,RAW格式的科普就到此为止吧,希望对大家有用。

其他

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:要想数据库性能好,软硬升级少不了
下一篇:OBS大数据解决方案-flume
相关文章