发布网友 发布时间:2024-12-24 19:09
共1个回答
热心网友 时间:2024-12-24 19:37
本章所涉及的内容针对特定格式的实现,不具备通用性,且详细翻译并不具有价值。
OpenEXR,是一种由工业光魔开发的HDR图像格式。
常规的数字图像对比度约为500比1,最暗与最亮部分分别映射为0到1。然而,当需要更多信息或绝对值信息时,这种存储方式便不再适用。此时,HDR应运而生,它能够表示更大范围的信息。例如,下图中油灯与阴影的亮度相差约十万倍,若使用传统的0到1映射,则无法体现这种差异。
传统方式会将整张图压暗以适应范围,但图像效果如下:
若使用OpenEXR之类的HDR格式,则可以达到以下效果:
在2003年,工业光魔发布了一种新的使用半精度浮点的HDR格式。由于IEEE754标准未定义半精度浮点,工业光魔自行实现了一种半精度浮点格式,其中包含1位符号位、5位指数位和10位尾数位。以下是用C++生成半精度浮点的代码:
精度范围:最大值约为65504.0,最小值约为5.96e-8。
色彩范围:在0到1的范围内,半精度浮点可以提供8192个不同的值,而传统方法只能提供235个(注:Gamma 2.2空间)。
工业光魔提供了一套C++接口。
OpenEXR文件结构中,文件头用于声明文件属性。像素则分别存储,你可以在写完RGBA后添加更多通道。
OpenEXR支持PIZ、ZIP以及RLE三种压缩方式。
以下是使用OpenEXR读取与显示图像的示例:
读取:将图像绑定到纹理;
渲染与写入OpenEXR图像:组合两张图像并写入OpenEXR文件;
组织Pbuffer:
以下是着色器代码。以下是over操作:
以下是in操作:
以下是out操作:
OpenEXR存储线性空间的值,而大多数图像处理软件都需要线性空间的值。然而,当我们在显示器上观察图像时,它处于Gamma 2.2空间。以下代码将展示Gamma矫正:
在线性空间调整曝光值:
最后,我们将进行一些调色:
HDR图像可以通过渲染或从真实世界捕捉获得。