我有一个应用程序,用户应该可以使用滑块来修改图像的色相,饱和度和亮度。所有图像处理均使用GLSL片段着色器在GPU上完成。

我的问题是,由于存在大量分支,因此RGB-> HSL-> RGB转换在GPU上相当昂贵。

我的问题是我是否可以将用户的“颜色调整”转换为其他颜色空间,从而可以更有效地在GPU上计算调整后的图像。

最佳答案

对于亮度和饱和度,可以使用YUV (actually YCbCr)。从RGB转换回来很容易。无需分支。通过增加或减少Cr和Cb来控制饱和度。亮度为Y。

通过旋转Cb和Cr分量(实际上是3D vector ),您可以获得类似于HSL色调修改的效果,但是,这是否足够取决于您的应用程序。

编辑:颜色分量(Cb,Cr)是一个像上述颜色平面中的点。如果取任意点并将其围绕中心旋转,结果将改变色调。但是由于机制与HSL中的机制有所不同,因此结果并不完全相同。

Image是维基百科的公共(public)领域。

10-08 03:00