渲染RAW图像



数字:照片1:使用AF-S 24-120mm f / 4镜头,24mm f / 8 ISO100的尼康D610照片



,以低水平渲染RAW图像的基本步骤是什么?在本文中,我将介绍数码相机转换器的功能,其中原始数据被转换为可见的RAW图像-有时称为渲染。为了演示每一步图像信息的转换,我将使用本文开头显示的照片,该照片是在配备AF-S 24-120mm f / 4镜头和24mm f / 8 ISO100的尼康D610上拍摄的。



渲染是RAW转换和编辑



渲染可以分为两个主要过程:RAW转换和编辑。RAW转换对于将原始图像数据转换为图像编辑,查看程序和设备可以理解的标准格式是必需的。通常,这是使用RGB比色颜色空间(例如Adobe或sRGB)完成的。



编辑者在标准色彩空间中获取有关图像的信息,并对图像进行调整,以使图像对摄影师而言更“适合”或“令人愉悦”。



David Coffin的dcraw就是一个干净的RAW转换器的示例。干净编辑器的一个示例是Adobe公司的Photoshop。实际上,大多数RAW转换器将RAW转换功能与编辑器功能(例如Capture NX,LR,C1)结合在一起。



基本RAW转换的7个步骤



转换结束和编辑开始的行已经足够模糊,但是根据您将它们分开的方式,在将RAW文件转换为标准比色色彩空间(例如sRGB)的主要过程中,只有7个步骤。步骤不必按此顺序进行,但是以下顺序是很合理的。



  1. 从RAW文件加载线性数据并减去黑电平。
  2. 平衡白色。
  3. 校正线性亮度。
  4. 裁剪图像数据。
  5. 从镶嵌还原原始图像(去拜耳)。
  6. 应用颜色转换和校正。
  7. 应用伽玛。


在基本的RAW转换中,该过程一直保持线性直到最后。理想情况下,最后一步的伽玛曲线可以通过显示图像的设备进行校正,因此图像处理系统从开始到结束-从光照射到传感器的那一刻到光到达眼睛的那一刻-都是近似线性的。如果您需要“诚实地”以到达传感器的方式渲染图像,这就是RAW转换器所需要的。



+色调映射:适应输出设备的动态范围



但是,正如我们将要看到的那样,由于大多数输出​​设备(相纸,监视器)的对比度比劣质数码相机所能捕获的对比度低,因此现有数码相机中RAW文件的基本转换几乎无法获得令人满意的结果。因此,实际上有必要进行色调校正,以使照相机的宽动态范围达到设备的窄动态范围。它可以是一条简单的对比度曲线,也可以是更复杂的色调映射,以及阴影,高光,清晰度等的局部和全局调整。 (商业编辑器和转换器软件中的标准滑块)。这通常在编辑渲染时完成-但是,如果您要获得“准确”的颜色,理想情况下,在RAW转换过程中,色调映射应该是颜色分级的第六步(请参阅参考资料)。Alex Torgera撰写的很棒的网站,介绍了颜色配置文件。



经过七个基本的转换步骤,您可以进入编辑器,以便客观地校正在特定帧中以及在输出到输出设备的特定图像中识别出的瑕疵,并使主观上的图像更加美观。例如,修复镜头畸变和横向色差;应用降噪;应用锐化滤镜。在某些RAW转换步骤之前,最好在线性空间中执行其中一些功能,但是它们通常是可选的,并且可以在伽玛空间中渲染后在编辑器中以相同方式完成。



在本文中,我们将专注于RAW转换的基本渲染部分,将色调映射和编辑再留一遍。



1.从RAW文件加载线性数据并减去黑电平



转换RAW的第一步只是将数据从RAW文件加载到内存中。由于RAW格式因相机而异,因此大多数转换器使用开源LibRaw / dcraw程序的变体。以下针对LibRaw或dcraw的命令会将RAW重新打包为线性16位TIF,处理应用程序(Matlab,ImageJ,PS等)可以读取该线性TIF。无需安装程序,只需将可执行文件放在PATH变量中或同一目录中即可。



unprocessed_raw -T  yourRawFile


要么



dcraw -d -4 -T  yourRawFile


如果您的图像传感器设计合理且在规格范围内,则记录的数据将与光强度呈线性关系,但是通常将其与照相机和通道相关的偏压一起存储。 T.N.黑色电平的大小为数百或数千个DN,必须从原始原始数据中减去它们,以使零像素强度与零光匹配。使用上面的命令行的dcraw将为您完成此操作(尽管有一些平均值)。使用unprocessed_raw时,需要知道相机的黑电平并相应地减去它(或者可以使用–B参数,但是,当前版本的LibRaw中似乎不支持该参数)。



事实证明,尼康在写入D610文件之前先从每个通道中减去黑电平,因此对于我们的参考镜头,这两个命令均有效。我使用dcraw -d -4 -T命令加载了该命令,该命令还将数据缩放到16位(请参见下面的步骤3进行亮度校正)。



在此阶段加载的数据只是图像的灰度强度。但是,它们与矩阵所处的特定滤色器关联的位置相对应。如图所示,在拜耳矩阵中,有一排交替的红色和绿色-以及绿色和蓝色。确切顺序由矩阵活动区域的第一个四重奏确定-在这种情况下为RGGB,但是其他三个选项也是可能的。





图2:拜耳彩色滤光片矩阵:RGGB布局。



D610的拜耳矩阵具有RGGB布局。在此阶段看起来像曝光不足的黑白图像的原始数据:





图3:步骤1:线性原始图像减去黑电平。它看起来应该像下面的图片一样明亮。 4.如果不是,则您的浏览器无法正确处理颜色(我使用的是Chrome,显然不能正确处理颜色)。



如果照片是黑色的,则您的浏览器不知道如何正确显示带有标签的线数据。有趣的是,WordPress编辑器可以正确显示图像,但是在发布到Chrome后,它看起来不正确(请注意:该问题最终在2019年得到修复)[2016年文章/大约。翻译]。这是这个形象应该是什么样子:





图。 4:相同的照片,但为CFA灰度



这是线性CFA数据直接在文件中显示的方式。由于我将曝光量向右移动以免切断瀑布的高光,因此它看起来有点暗-我们稍后将在线性亮度调整步骤中对此进行修复。



由于图像较小,图像看起来像是完整的黑白图像,但实际上并非如此:即使在光照相同的区域,像素也可见。这是由于以下事实:具有不同光谱灵敏度的相邻滤色器会收集有关颜色的不同信息。放大图像时很容易看到。这就是WhiBal卡下方图像的区域在高达600%的放大倍率下的样子:





图5:在均匀的灰色卡(顶部)和彩色叶子上可以看到CFA像素化。



2.白平衡数据



由于光源能量的光谱分布(在这种情况下,天空部分被云覆盖,其光会穿透树叶)以及位于矩阵上的滤光片的光谱灵敏度,即使在相同的照明下,不同颜色的像素也会成比例地记录较高或​​较低的值。这在图像的中性部分尤其明显,在所有颜色平面上似乎应该出现相同的平均值。在这种情况下,在中性灰卡上,红色和蓝色像素分别记录为绿色值的48.8%和75.4%,因此它们显得更暗。



因此,下一步是通过将每个红色像素乘以2.0493(1 / 48.8%),将每个蓝色像素乘以1.3256(1 / 75.4%),将白平衡应用于线性CFA数据。用Adobe术语,我们得到的黑白图像对相机是中性的。然后可以保证,除噪点外,所有像素在图像的中性部分上都将显示相同的线性值。





数字:6:进行白平衡后,灰卡像素消失,但在彩色对象上仍然可见。



看看图像顶部的像素化如何消失-使用中性灰卡进行校准。但是,当然,像素化并没有从颜色对象中消失:有关颜色的信息存储在三个通道强度之间的差异中。



3.线性亮度校正



大多数具有可互换镜头的现代数码相机都以12-14个线性位提供原始数据。文件的标准位深度(jpeg,TIFF,PNG)通常以8的倍数给出,而16位是当今大多数编辑器喜欢的深度。我们不能只用减去黑电平的14位数据并将其存储在16位中-一切都将落入线性范围的底部25%且太暗。理想情况下,我们希望在白平衡和黑减后对数据进行修整,以将修整后的数据放入16位文件中,并据此进行缩放(请参阅步骤4)。粗略转换数据的一种简单方法是将14位数据乘以4,将其缩放到16位。这恰好是减去黑色后在步骤1中执行的操作(dcraw -d -4 -T自动执行此操作,并使用unprocessed_raw,则需要手动执行)。



说到缩放,我们可能还想调整亮度。如果您要对图像进行“诚实的”渲染,例如从传感器出来并记录在RAW文件中,则此步骤是主观的,可能不值得做。但是,没有人能够获得完美的曝光,并且不同的相机通常会在原始数据的不同百分比处测量平均灰度,因此能够调整亮度非常有用。因此,许多转换器将相对滑块称为“曝光补偿”或“曝光补偿”。 Adobe有一个关联的DNG标签,用于对不同相机的测光表进行标准化,即BaselineExposure。对于D610,为0.35步。



就我的口味而言,我们的图像有些暗,应有50%反射率的WhiBal卡在全尺寸下仅为17%。线性亮度校正是数据中每个像素乘以一个常数。如果我们认为在此图像中我们不需要保留亮度高于散射白光100%的图像的最亮区域,则此示例中的此常数将为50/17,约为1.5步校正。在这种情况下,我决定申请的1.1线性亮度的步骤的主观保守校正,由2.14文件中的所有数据乘以,获得以下:





图7:减去黑阶,白平衡,裁剪,线性亮度校正后的CFA图像,步长为1.1



更好。但是如您所见,线性亮度校正需要付出的代价是照亮瀑布的一部分。这就是大多数RAW转换器中发现的高级非线性高光和阴影恢复滑块的地方。



4.确保均匀修剪白平衡数据



如果绿色通道最初是在原始数据中剪切的,则在应用白平衡倍增器以校正所产生的非线性之后,可能需要将其他两个通道裁剪为完整比例。满刻度在下面的直方图中显示为归一化值1.0。您可以看到原始数据的绿色通道已被剪切(由于值的混乱),而其他通道则没有。





数字: 8:从上至下:在对原始数据应用白平衡倍增后,裁剪之前的R,G,B直方图。确保将所有三个都裁剪到较低的通道,以免在明亮的区域出现假色。图像数据以0-1绘制,其中1是满刻度。



全面裁剪是必要的,因为在所有三个通道都没有数据的区域中,产生的颜色可能不正确。在最终图像中,这可以表现为在接近最大亮度的区域呈粉红色。例如,在雪山的图片中,这非常令人讨厌。因此,修剪可以毫不妥协地解决这个问题。





数字: 9:左:应用白平衡后正确裁剪图像。右:未裁剪图像。黄色箭头表示接近最大亮度的区域,其中来自颜色通道的不完整信息会呈现粉红色调。



除了裁切外,还可以对缺失的颜色做出某些假设并补充相关数据。在高级RAW转换器中,这是通过名称为“突出显示重建”​​的算法或滑块来完成的。有很多方法可以做到这一点。例如,如果仅缺少一个通道,如图1中绿色从1.0到1.2所示。如图8所示,最容易假设高光在中性白色区域中,并且原始图像数据具有正确的白平衡。然后,在任何一个将切掉绿色而其他两个都不切掉的四重奏中,绿色的值将等于其他两个通道的平均值。对于此镜头,此策略将能够在明亮区域重构不超过1/4的台阶(日志2(1,2))。然后,这将需要缩小高光和/或将新的完整比例重新规格化为1.0。



5.拆箱CFA数据



到目前为止,CFA图像位于相同的黑白平面上,这使彩色区域看起来像是像素化的,如图2所示。6.是时候进行去拜耳处理了-分离如图6所示的红色,绿色和蓝色像素。2,通过近似丢失的数据将其分成单独的全尺寸彩色平面(在下图中,它们显示为白色正方形)。





数字:10:去拜耳化-使用来自所有三个平面的信息填充每个彩色平面中的缺失数据。



此步骤中可以使用大量高级去拜耳算法中的任何一种。它们中的大多数都能很好地工作,但是根据情况,有些要比其他更好。某些RAW转换器(例如开源RawTherapee和dcraw)会提示用户从列表中选择一种算法。大多数转换器不提供此选项,而是使用相同的去拜耳算法。您知道您最喜欢的RAW转换器使用哪种去拜耳算法吗?



在此测试中,我决定作弊并简单地将每个RGGB四重奏压缩为单个RGB像素,将每个四重奏的R和B值保留为原始数据,然后将G平均为两个(这相当于dcraw -h模式)。它是2×2最近邻去拜耳算法。它提供了更方便使用的图像,其大小仅为一半(线性尺寸或面积的四倍)。





数字: 11:经过黑减,白平衡,裁切,线性亮度校正和2x2最近邻去拜耳处理(相当于dcraw –h)后的原始RGB图像。



在图。参见图11,您可以看到我们的原始数据现在是具有三个完全填充的彩色平面的RGB。相机记录的颜色由浏览器和监视器显示。它们看起来很呆滞,但与原始版本没有太大区别。阴影不会存储在标准RGB空间中,因此软件和硬件并不总是知道如何处理它们。下一步是将这些颜色转换为通用的比色标准颜色空间。



6.颜色转换和校正



这是获得具有令人满意的色彩的最终图像所需的最不直观但最重要的步骤之一。所有制造商都嫉妒地将其彩色滤光片的秘密保存在其矩阵的CFA中,但是使用正确的设备,获得光谱灵敏度函数并不是很困难。即使使用便宜的光谱仪,您也可以大致了解相机的功能



有了所有这些,并就典型的光源,场景和观看方法做出了许多假设,就可以生成折衷的线性阵列,该阵列将CFA图像的颜色(如图11所示)转换为标准颜色,即将能够识别诸如编辑器或浏览器之类的通用程序,以及诸如显示器和打印机之类的设备。



对我们来说幸运的是,有几个优秀的实验室从事这些矩阵的测量和计算,然后将这些计算结果放到了公共领域。例如,对于数据库中任何相机的两个来源,DXOmark.com都会生成矩阵,用于将白平衡后的原始照片数据转换为sRGB。举例来说,这里是他们的传感器的尼康D610和标准光源D50:





图12:来自DXO实验室的光源D50的颜色矩阵:从白平衡和去拜耳的数据到sRGB。



哪种折衷矩阵是最佳的,取决于拍摄帧时光源能量的光谱分布,因此通常基于几个参考对真实矩阵进行插值。在当今的Adobe世界中,这些是标准光源A和D65,它们负责限制日常摄影中从钨到日光和室内摄影的典型照明范围。然后,将转换后的数据调整为与最终色彩空间匹配的光源-对于sRGB,例如D65。结果是一种矩阵,如图1所示。 12.然后你只需要由每个debayerized像素的RGB值的步骤5之后乘以它



说明书中Adobe建议为其DNG Converter使用更灵活的过程。 Adobe首先不是将数据从CFA相机直接转换为比色色彩空间,而是先将数据转换为Profile Connection(XYZ D50)色彩空间,将白平衡和去拜耳后的数据乘以内插前向矩阵,然后再转换为最终色彩空间,例如sRGB。有时Adobe还会使用XYZ中的特殊配置文件应用其他非线性色彩校正(在DNG语言中,这些是通过ProPhoto RGB,HueSatMap和LookTable进行的HSV校正)。



拍照的相机的直接矩阵记录在每个DNG文件中,称赞Adobe。我从那里下载了D610的矩阵,并从Bruce Lindblum站点下载了XYZD50-> sRGBD65矩阵,并得到了最终图像:





图。13:“公平”转换后的图像。原始数据,减去黑电平,执行白平衡,裁剪,亮度校正,2x2去拜耳,色彩校正并转换为sRGB。



现在,颜色是程序和设备期望在sRGB颜色空间中找到的颜色。如果您想知道,该图像与尼康的Flat profile Capture NX-D转换器几乎相同。但是,由于我们的监视器对比度差,因此它看起来不是很清晰(请参阅“色调映射”)。



7.伽马的应用



最后一步取决于所选的色彩空间。sRGB空间的gamma约为2.2我仅提及这一点是为了说明渲染过程在这一点上是非线性的。从此刻起,图像将缩小到色彩空间的色度色域,并且可以将其加载到您喜欢的编辑器中或显示在屏幕上。从理论上讲,所有前面的步骤都是线性的,即容易逆转。



+音调显示



在2016年,几乎总是需要进行色调校正,以选择如何将相机的高动态范围压缩到成像设备的小范围内。例如,根据您的抗噪性,D610的动态范围为12级,而相当不错的显示器的对比度为500:1,约9级。这意味着由于背光,从相机底部的三个步骤将在监视器上不可见。



RGB曲线将在整个范围内主观地重新分配色调,以便以一些最亮的区域为代价更清晰地看到一些阴影(因此该曲线称为“色调曲线”)。在撰写本文时,在首次显示图像之前,Adobe通常在渲染时在ACR / LR中应用这样的曲线:





数字: 14:在处理版本3(2012-2016)中,渲染过程即将结束时,ACR / LR应用的色调曲线。水平轴是非线性的。



在这种情况下,我没有使用它。我只是应用了增加对比度的曲线,并在Photoshop CS5中为无花果添加了一些清晰度。 13获得最终图像:





图。 15:最终的sRGB图像。最初为原始数据,减去黑电平,白平衡,裁剪,校正亮度,去拜耳,校正颜色,应用色调曲线



当然,在稍后的阶段应用对比度曲线会更改颜色的色度和饱和度,但这正是在渲染图像后将这些调整应用于RGB伽玛空间时会发生的情况。从历史上看,这就是照相机中所有事情的发生方式,这也是流行的RAW转换器中所有事情的发生方式-这是程序,并且我们多年来已经习惯了。实现色彩再现“准确性”的另一种方法是使用Torgera网站上的色彩配置文件,并且不再触碰色调。



让我们总结一下



因此,对于具有亮度和颜色的线性调整的基本RAW转换,您需要:



  1. 从RAW文件加载线性数据并减去黑电平。
  2. 平衡白色。
  3. 校正线性亮度。
  4. 裁剪图像数据。
  5. 去拜耳。
  6. 应用颜色转换和校正。
  7. 应用伽玛。


就是这样-原始数据转换的保密面纱已被撕掉。



可以从链接下载用于获得本文给出的图像的Matlab脚本这7个基本步骤以黄色标记:



s = raw2RGB(‘DSC_4022’ , ‘ROI’ , 1.1)



使用脚本后,将文件保存为TIFF格式,将其加载到颜色编辑器中,并应用所选的颜色空间以查看正确的颜色。






All Articles