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