Turbo Photo中RAW导入器的开发笔记

Turbo Photo中RAW导入器的开发笔记 - 电脑诊所 - 电脑教程网

Turbo Photo中RAW导入器的开发笔记

日期:2007-02-02   荐:

相机RAW格式文档现在被越来越多摄影爱好者所采用,它究竟是什么,好在哪里,如何发挥其潜力?

在开发新版本Turbo Photo的过程中,为了增加对RAW的支持,笔者对RAW文件进行了一定深度的学习,得到了一些非常有用的知识和信息,希望在本文中和大家分享。

RAW是什么?

当您按下快门的时候,您的数码相机从感光器件CCD/CMOS上获得量化的数据,然后经过一系列复杂的内部数字信号处理,形成最后的JPG文件。之后,作为标准的文件格式,JPG文件被导出相机,可以在各种平台、媒体、软硬件上被展示、修改、输出、进一步利用。

但是,从CCD数据到JPG,,相机内部的处理未必能得到最优的结果。首先,不同的厂商不同的相机可能会采用千差万别的信号处理算法,这样导致最后的输出画质可能存在较大差别。其次,受到相机内部电路运算能力限制以及相机要求实时快速生成照片的应用限制,相机不可能采用很难用硬件实现,或者非常消耗时间的处理。

现在,有了计算能力强大的电脑,我们希望能够用更强大更优秀的算法代替厂商固化在数码相机内的算法,以期望获得更优秀的照片输出效果。更优秀的算法意味着更大的运算量,但对于注重质量的用户来说,这一切都是值得的!RAW格式应此需求而诞生。

RAW格式文件的地位

对于讲求效率和操作简便的普通用户来说,采用RAW拍摄意味着更多的额外转化时间,更大的存储空间占用以及并不“明显”的质量提高,似乎非常不值得。但对那些画质需求第一,为了更好的画质,不惜花费更多时间、金钱和耐性的专业、准专业人士来说,RAW则是制胜法宝!

RAW文件里存储的内容,简单的来说,就是CCD原始感光数据和一系列拍摄参数。至于最后输出什么质量的照片,则完全由您选择的RAW处理软件决定。选择RAW进行拍摄一定比JPG方式拍摄质量要好,这是一个误解。

现在的数码相机厂商,机内算法已经非常成熟, 但是如果您因为不够了解RAW而选择错误的RAW处理算法或者糟糕的软件,可能会带来比直接用JPG拍摄更糟糕的结果,这绝对不是耸人听闻!,所以如果您属于菜鸟行列,强烈建议您采用JPG格式拍摄。

而如果您希望深入了解RAW,请往下继续看: 从CCD到实际图像

群雄割据的混乱现状

RAW现在很流行,每个厂商都号称要支持。但对于不同的相机,从CCD开始就有很大的不一样,相机的定位也各不相同,所以最后结果是各个厂商都有自己专门的格式,互不兼容。甚至同一厂商不同格式的情况都有,譬如Canon的CRW与CR2。这就为开发统一的处理软件制造了麻烦。幸好相关的文档甚至参考代码不难找到,使得开发通用的RAW文件处理软件成为可能。

CCD数据反映什么

相机的感光部件CCD(有的是CMOS),能够把光的强弱转化为量化的电信号。为了反映彩色,一般来说,CCD会有一个滤色矩阵分别感知R,G,B三原色的强弱。后期软件则利用3原色合成出彩色图像。

典型的CCD滤色矩阵

当然,某些CCD会采用稍微不一样的CCD结构,譬如Fujifilm的超级CCD呈蜂窝状,早些型号的Canon,譬如G1等,则采用GMCY矩阵(绿色,杨红,青色和黄色)等…但不管怎么样,大多数CCD从单一的一个感光元器件格子,只能得到某种颜色通道,无法得到完整的一个像素RGB三者的值。这种CCD叫做马赛克式的CCD,而从这种CCD得到的数据恢复图像的办法叫做去马赛克法(Demosaicing)。

按下快门后,光子进入CCD,转化成电荷积累,完成拍摄后,每个滤色方格积累的电荷多少就反映了此处某颜色份量的能量大小。而CCD原始数据则是此能量大小的数字体现。如果采用12bit的量化器,则数值可能从0变化到4096。这种变化是线性的,也就是说,2000代表的亮度一定是1000代表的亮度的一倍。相比之下,我们电脑中图像亮度0-255则是非线性的,(注:根据人眼特性被gamma化处理),显示器在显示亮度200的点时,实际物理亮度不等于显示数值100时的两倍,这点要特别注意。

从上面的描述我们可以看到,CCD数据距离实际的图像还差得很远,我们至少要做:

1、找到一种去马赛克方法,从CCD矩阵得到线性的高bit位图像;

2、转化到我们能够显示的图像色彩空间。 数据拉伸与白平衡

在去马赛克之前,CCD的原始数据需要得到拉伸处理。因为有3个原因:

1、如果量化器是12bit(0-4096)的,而计算机内部位保留12bit信息只能采用16bit(0-65535)的数据,就必须对每个数据做乘法。

2、实际上,由于工艺的不同,对于RGB三原色感知单元的光学特性不可能一样,因此,原始数据可能不能反映实际的能量大小。必须乘上一个校正系数。这个校正系数厂商会记录到RAW格式中。

3、黑点和白点。多大的数值表示黑点,多大的表示白点,如果这个不知道,数据拿到是没有意义的。多数时候,0表示黑点,但是白点却各个厂商不同,不幸的是,这个数据没有记录在案。如果白点寻找错误,那么出来的图像可能丢失高光细节。这就是为什么不同的RAW处理软件出来的高光表现有所区别的原因。

不管怎么样,原始CCD数据要做一个拉伸。既然如此,不如把白平衡(同样也是拉伸)一起作了。当然,白平衡也可以在图像出来以后作,但在多数相机是在这一步里进行的。


[1] [2] [3]  

更多的请看:http://www.QQread.com/windows/2003/index.Html

去马赛克-生成实际图像的关键步骤

数据准备好以后,我们就得进行最关键的去马赛克工作。为什么说是最关键呢?因为去马赛克这个操作本身是没有固定办法的,每个相机厂商都有自己的办法。各个软件开发商,研究人员也在不停的寻找更好的办法。

也许你会说,这还不简单,譬如在绿色的方格处猜测红色和蓝色,只需要把两边的红色或者蓝色拿到平均就可以了嘛!没错,这是一种方法,这种方法叫做线性插值法(Bilinear interpolation)。这是一种非常快速的办法,但也是质量最差的办法,它的质量差到比任何相机内的算法都差!所以,除非特别讲究速度,一般没人会用它。在研究其他的RAW软件过程中,我发现某些非专业软件为了给用户一个速度很快的感觉,居然用了这种插值方式,使得用户在不知不觉中丢失信息,得不偿失,这里特别提醒注意。

恶劣的算法主要体现在较低的分辨率和细节表现,边缘处的彩点效应。改进的算法一般有基于梯度的插值VNG法,拉普拉斯法,Pixel Grouping法,自适应最大各向同性AHD法….算法效果越好,一般消耗时间越长。正是因为如此,相机内部不可能采用复杂度特别高的高计算法,利用外部转化,可以在这个环节极大的提高画质!因此,这一步是RAW格式优势体现的一个关键。专业RAW格式处理软件一般都有他们自己的独特算法,有的侧重于分辨率的表现,有的侧重于减少边缘彩点现象,具体选择也得看消费者个人喜好和应用背景来决定。

各算法效果比较 图像后处理

相机内常见的后处理包括去噪,锐化,色彩加强。和去马赛克一样,相机内不可能使用过于复杂的算法,以保证成像的速度。这也就为外部软件提供了较大的提高潜力。以降噪为例,相机内采用的算法只能进行小幅度的噪声抑制,效果远不及专门进行降噪的软件,譬如NeatImage, Turbo Photo等。

实际上,除了这些调整外,RAW软件理论上可以在RAW的高bit空间进行任何图像处理和调整。前面提到,RAW采集的CCD数据是按照16bit位深度存储的,而我们电脑里面常见的图像表示格式是8bit深度的(3个通道连同alpha=32bit真彩色)。显然,16bit要比8bit精确的多。

对于人眼来说,8bit量化已经足够,16bit在显示上毫无疑义,但对于调整来说,在高bit空间调整显然可以比在8bit空间获得更高的精度,而更高的精度则意味着更少的累积量化误差(量化误差,譬如结果是100.35,转化成整数就是100,量化误差0.35)。简单的说,效果可能会好一些,特别是调整幅度较大或者步骤特多的时候优势相对明显。

但16bit空间带来数据量增大一倍,内存消耗更大,处理速度更慢,把所有处理都往里面移也有弊端。原则上信息失真程度小于最大量化误差的处理,最适合优先在16bit空间进行,譬如亮度和色彩的调整,以及前面说到的锐化,鲜艳等。在这次开发中,考虑到我们的用户中家庭用户较多,他们的电脑内存依然停留在256M-512M档次居多,(专业人员一般在1G以上),我们最后决定把曝光补偿、宽容度、色温、锐度、鲜艳等最常用最基本也最需要精度的操作优先放在RAW导入器中,其余操作则仍然在导入后在Turbo Photo中继续修饰。这样的折衷可以同时兼顾16bit调整的精确和原有软件的快速和完善两方面好处。至少也要比通过相机内部设置进行机内调整要方便,强大太多太多。

更多的请看:http://www.qqread.com/windows/2003/index.html

色彩空间

经过上面的步骤,我们已经有了最后的16bit线性的图像数据,最后一步就是转化到能够在具体设备,譬如显示器,打印机等上展示的图像。涉及到设备,就不得不考虑不同设备的色彩表现能力。

譬如一般的显示器是sRGB空间,从16bit转化到8bit sRGB空间,就需要对每个数据进行一个gamma化的处理。更为专业的用户可能会对这个过程更讲究一些,他们需要专业的硬件校准设备,更宽的色彩空间等。

考虑到Turbo Photo用户群体,在这次开发中,我们没有提供给用户此类选择。

横向考察和总结

在参考了多款支持RAW的软件,包括Adobe camera RAW, Nikon Capture, SILKYPIX等,以及阅读了相关资料后,我倾向于同意Adobe观点认为RAW实际上相当于数码时代的底片的说法。

Adobe公司也试图用DNG(数字负片)格式统一RAW的混乱场面。传统的底片需要冲洗过程,冲洗使用的药水、流程、设备和操作人员的经验决定了最后照片的质量;类比的,RAW处理软件的内部算法、功能、流程等也决定了最后输出图像的质量。前面提到,有的软件确实并不一定能让RAW带来更好的效果,在横向对比中,甚至发现有一款号称支持RAW的软件在处理Nikon D50数据的时候,竟然直接把RAW文件中自带得JPG参考图作为RAW转化结果输出!注: (Nikon的格式中,相机会把同样场景的JPG拍摄结果作为参考数据放在RAW文件的缩略图数据里面作为转化的预览或者参考)


 [1] [2] [3]  

下面,我们就同一个场景JPG和RAW的输出作一个对比,让大家了解一下这种差距的大小,最为本文的结束。

同一个场景JPG和RAW的输出对比

(出处:http://www.sheup.com)


 [1] [2] [3] 

标签: