我有一些函数(c++),可以将游戏图像(SDL2 SDL_Surface)从RGB转换为CIEXYZ,再到CIEL*a*b*,以便在色调、亮度和饱和度的调整中比在HSV空间更自然。这个方法有效,但是有一些像素在这个过程中会超出RGB色域,需要将其调整回色域内。虽然强制将值限制在色域内也不难,方法如下:
- 将每个子像素值分别裁剪至0以下或255以上; - 通过除以(max-min)和减去min/(max-min)来压缩并移动整个像素或整个图像到0-255范围内。
但是,这些选项在对同一图像进行多次操作时会导致严重的伪影。我正在寻找用代码最少破坏的处理超出颜色范围的子像素的方法。在谷歌搜索了许多页面后,发现大部分结果都是有关Photoshop的链接,还有一些与设计有关的链接,以及一些有关LittleCMS等CMS的参考资料。
我需要一个算法解决方案,可以放入c++代码里。
注:做了一些基本实验后,使用线性压缩整个图像会导致亮度的大量损失,在运算时,这种指数形式的压缩的更多信息是非常欢迎的。
- 将每个子像素值分别裁剪至0以下或255以上; - 通过除以(max-min)和减去min/(max-min)来压缩并移动整个像素或整个图像到0-255范围内。
但是,这些选项在对同一图像进行多次操作时会导致严重的伪影。我正在寻找用代码最少破坏的处理超出颜色范围的子像素的方法。在谷歌搜索了许多页面后,发现大部分结果都是有关Photoshop的链接,还有一些与设计有关的链接,以及一些有关LittleCMS等CMS的参考资料。
我需要一个算法解决方案,可以放入c++代码里。
注:做了一些基本实验后,使用线性压缩整个图像会导致亮度的大量损失,在运算时,这种指数形式的压缩的更多信息是非常欢迎的。