2.2 HDR 内容存储(Advanced High Dynamic Range Imaging )

2.2 HDR内容存储(Advanced High Dynamic Range Imaging )

生成HDR内容后,就需要存储,分发和处理这些图像。 假设使用RGB颜色的三个波段,则使用三个单精度浮点数[173]表示未压缩的HDR像素。 这意味着一个像素使用12个字节的内存,在1920×1080的高清(HD)分辨率下,单个图像将占用大约24 MB。 这比不压缩就存储等效LDR映像所需的大约6 MB大得多。 研究人员一直在研究有效的方法来存储HDR内容,以满足高内存需求。 最初,仅使用浮点数的紧凑表示形式来存储HDR。 这些方法仍然在HDR应用程序中普遍使用,并将在本节中介绍。 最近,研究人员将精力集中在压缩方法上,这将在第8章和第9章中介绍。

HDR值通常使用单精度浮点数存储。 LDR成像中广泛使用的整数对于存储HDR值不切实际。 例如,一个32位无符号整数可以表示[0,2^23-1]范围内的值,这不足以覆盖HVS经历的整个范围。 它还不适用于两个或多个HDR图像之间的图像处理操作; 例如,在加法或乘法时,精度很容易丢失,并且可能会发生溢出。 对于实际值,这种情况使浮点数优于整数。[173]

使用单精度浮点数,图像每像素(bpp)占据96位。 Ward [405]提出了第一个解决方案,即RGBE,它最初是为存储由Radiance渲染系统[407]生成的HDR值而创建的。 假设这三种颜色之间的变化不大,则此方法将存储三种颜色之间的共享指数。 格式的编码定义为。

 然后将红色,Rm,绿色,Gm和蓝色Bm的尾数以及指数E分别存储在无符号字符(8位)中,最终格式为32 bpp。 RGBE编码涵盖76个数量级,但编码不支持全部色域和负值。 为了解决这个问题,可以在编码之前将图像转换为XYZ颜色空间。 这种情况称为XYZE格式。 图形硬件供应商和计算机图形API支持RGBE格式的修改版本(即,每个颜色通道的尾数为9位,共享指数为5位)。 在Direct3D和OpenGL中,该格式分别称为DXGI FORMAT R9G9B9E5 SHAREDEXP [267]和GL RGB9 E5。 此外,这种格式可以在空间上适应有效的图像压缩[74]。

 

图像2.3和清单2.4展示了用于对本地存储的HDR图像(由每个颜色通道中的浮点数组成)中的RGBE值进行编码和解码的MATLAB代码。

沃德提出了另一种HDR图像格式,一种基于感知的24/32 bpp格式,名为LogLuv [214]。 与线性域中的颜色相比,此图像格式将更多位分配给对数域中的亮度。 第一步,将图像转换为XYZ颜色空间,并计算CIE(u',v')色度座标(请参阅附录B)。 然后,32 bpp格式将15位分配给亮度,将16位分配给色度,并将其定义为:

 其中u'和v'是色度座标。 根据位的分布,24 bpp格式的公式(2.14)和公式(2.15)的常数略有变化:10位分配给亮度,14位分配给色度。 32-bpp格式覆盖38个数量级,而24-bpp格式仅覆盖4.8个数量级。 与RGBE / XYZE相比,LogLuv的主要优点是该格式分别存储亮度和颜色信息,使这些值可直接用于诸如色调映射(请参阅第3章),颜色处理等应用程序。此外,可以通过以下方式改进此格式: 利用图像统计数据(即最大和最小)[274]。 清单2.5中显示了基于公式(2.14)的LogLuv编码的MATLAB代码。 同样,清单2.6给出了使用公式(2.15)进行解码的MATLAB代码。

另一种常见的HDR图像格式是单浮点格式,这是OpenEXR文件格式的规范的一部分[180]。 在这种表示形式中,每种颜色都使用半精度浮点数编码,这是IEEE 754标准[173]的16位实现,并且定义为

 其中S代表符号,占1位,M是尾数,占10位,E是指数,占5位。 因此,最终格式为48 bpp,覆盖大约10.7个数量级。 尽管尺寸很大,但主要优点是该格式是在图形硬件中实现的,允许实时应用程序使用HDR图像。 这种格式被认为是电影行业中的事实上的标准[112]。 娱乐业已经提出了几种中等动态范围格式,其目的是覆盖2-4个数量级之间的经典电影范围。 但是,它们不适用于HDR图像/视频。 皮克斯创建的日志编码图像格式就是这样的一个例子[112]。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章