我正在使用 OpenGL 开发数据可视化工具,而 LAB 颜色空间是用于可视化我正在处理的数据的最容易理解的颜色空间(3 个数据轴映射到颜色空间的 3 个轴)。是否有快速(例如,没有非整数取幂,适合在着色器中执行)算法用于将 LAB 值近似转换为 RGB 值或从 RGB 值转换?
问问题
1976 次
1 回答
1
如果在着色器中进行实际的转换计算过于复杂/昂贵,您始终可以使用查找表。由于两个颜色空间都有 3 个分量,因此您可以使用 3D RGB 纹理来表示查找表。
使用 3D 纹理可能听起来像很多开销。由于 OpenGL 中通常使用 8 位/分量来表示颜色,因此您需要 256x256x256 的 3D 纹理。在 4 字节/纹素下,这是一个 64 MByte 的纹理,这不算离谱,但非常可观。
但是,根据转换表中的值的平滑程度,您可能能够以较低的分辨率侥幸逃脱。请记住,纹理采样使用线性插值。如果分段线性插值在查找表的某个基本分辨率下足够好,则可以大大减小大小。
如果您朝这个方向发展,并且无法为 LUT 使用 64 MB,您将不得不使用 LUT 的大小,并在大小/性能与质量之间进行可能的权衡。
于 2015-03-21T03:04:17.567 回答