image - OpenGL:GL_R11F_G11F_B10F的精度对于8位RGB图像来说好吗?

标签 image opengl precision 8-bit

来自"Image Format" ,我们看到:

An 11-bit float has no sign-bit; it has 6 bits of mantissa and 5 bits of exponent.

从“Half-precision floating-point format ”,我们可以推导出: 11位 float 的相对精度为2^(-6),即1/64

但对于 8 位 RGB 图像,255 时的相对精度为 (255-254)/255 = 1/255。

那么是不是说 GL_R11F_G11F_B10F 的精度对于亮度范围较大(例如 255)的 8 位 RGB 图像来说不好?

最佳答案

使用浮点图像的原因是为了允许表达 [0, 1] 范围之外的值。如果这就是您需要做的,那么这就是您需要做的,并且规范化整数格式将没有帮助,无论其精度如何。

这种特殊的浮点格式在不使用共享指数的情况下尽可能压缩浮点 RGB 数据。相对于标准化 8 位整数,它确实会损失精度,只有大约 2.1 位小数精度(由于 IEEE-754 float 的工作方式,您会得到比实际多一位尾数的效果)。

但如前所述,如果您需要大于 1 的值,则不能选择标准化格式。这种特殊的浮点格式适用于可以容忍精度损失的情况。这适用于 HDR 情况下的帧缓冲区输出等用途。它的大小是 16 位浮点 RGBA 格式的一半,因此可以代表帧缓冲区带宽成本的显着性能改进。

这是一个优化。您可能会使用半浮点进行开发,但随后您切换到此并看看您是否可以分辨出差异。如果没有,您可以永久切换到它(可能使用面向用户的设置以获得更高的图像保真度)。

关于image - OpenGL:GL_R11F_G11F_B10F的精度对于8位RGB图像来说好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36940805/

相关文章:

c++ - OpenCV如何为imencode编码原始图像信息?

php - 如何使用php函数unlink从服务器删除图像?

c++ - OpenGL 在正交和透视之间切换

opengl - 如何在opengl中实现两个不同相机 View 之间的平滑过渡

c# - C# 中的 float 学是否一致?是真的吗?

java - Spark 流 : Different average values returned by PairDStream. 打印

java - 使用SWT的ImageData,如何判断png、gif、bmp文件是否具有透明度?

c++ - GLUT 只运行一次显示回调并且不输出到终端

javascript - 在不损失准确性的情况下格式化计时器?

ios - 如何解决 imgly-sdk-ios 缺少 libpods 文件的问题?