RAW的通俗解释

RAW是什么?

RAW是一种图像数据的保存格式,那我们在哪里见过它呢? 当我们在使用数码相机拍照时,就发现在设置菜单里,可以选择保存为RAW文件或者JPEG文件。而RAW的原意,就是未经加工的原始图像数据,也就是图像传感器(Sensor)直接输出的原始数据格式。手机摄像头模组输出给平台的数据也是RAW数据。

RAW长什么样?

佳能数码相机保存出来的RAW格式文件,文件后缀名是.cr2,可以使用photoshop+cameraraw插件打开,因为通过后缀名电脑系统知道它是什么类型的文件,通过文件头可以知道这张图的宽和高,数据的排布方式是怎么样的。先不讨论数码相机,先来看下,手机摄像头模组输出给平台的RAW数据是什么样的。把平台接收到的RAW数据直接保存到文件,里面其实就是一个二维数组,每个元素一般是10bit的位宽来表示,取值范围就是0~1023。如果把这个文件拷贝到电脑上,用二进制编辑器打开的话,可以看到一些数值。

先来看一下照相机的成像过程:照相机用的是凸透镜成像原理,sensor在这里充当光屏的作用接收图像,sensor是一个二维阵列的器件,每个阵列单元(像素)把接收到的光信号强度转换成电信号强度,再经过AD转换(模拟到数字的转换)成数值,所以得到的RAW数据本质是一个二维数组,数组元素的数值表示此处光信号的强度。如果只考虑光的强度的话,上面过程得到的是一幅黑白图片(光强随位置变化而变化)。

如果我们加上如图所示的滤光片阵列,CFA(Color Filter Array),就可以得到R/G/B(red,green,blue)分量的强度。R滤光片只允许R分量通过,可以想象透过红色玻璃看东西时,东西都是红色,G/B同理。

这里的理论依据是光的三原色合成和分解原理:任何光的颜色都可以分解成这RGB分量的叠加,只是各分量的比例差异而已,反过来通过RGB分量也能合成回去。Color(i,j,k) = i*R + j*G + k*B

那为什么是用这样的滤光片阵列呢???如果不用CFA,一种比较笨的方法是,先盖上R滤光片拍照,得到每个位置的R分量,再重复G和B的操作,这样的话拍照过程太复杂了,实现起来很麻烦。这样做有什么缺点???注意图中每个像素只保存R/G/B分量中的一个,比如左上角那个像素,只保存了G分量,两外的R、B分量是缺失的。如果要把图像显示到LCD屏幕上,需要每个像素的RGB值,所以RAW图片其实是不能直接正确显示出来的。

但是如果你硬要显示的话也是可以的:1.比如说你把左上角那个像素的G分量,直接赋值给它的R和B分量,同样的操作遍历图像,就可以把它当作黑白图像来显示。2.或者你把左上角那个像素的G分量保留,R和B直接置为0,同样的操作遍历图像,就可以把它当作彩色图像来显示,但是如果放大看的话,会有马赛克的感觉。


到这里RAW格式就说完了,那RAW格式是如何转成RGB格式的呢?可以用双次线性插值的方法,

G22 = (G12 + G32 + G21 + G23) / 4

R22 = (R11 + R13 + R31 + R33)/ 4

之所以可以这样做的理论依据是,相邻的像素值变化不会太大,具有相关性。到这里就得到一张RGB格式表示的图片,就可以拿去显示了。

根据RAW数据排列有分为紧凑型和非紧凑型,如果用两个字节(16bit)表示一个像素,就有6bit是空闲的不够紧凑,这样就是非紧凑型的,如果把间隔利用起来的话就是紧凑型的,可以节约空间,只要约定好就行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容