gpt4 book ai didi

c++ - 处理 RGB 到 CIEL*a*b* 到 RGB 转换中的 "Out-of-Gamut"颜色

转载 作者:太空狗 更新时间:2023-10-29 21:44:20 26 4
gpt4 key购买 nike

我有将游戏图像 (SDL2 SDL_Surface) 从 RGB 通过 CIEXYZ 转换为 CIEL*a*b* 的函数 (c++),这样对色调、亮度、饱和度的调整将比在 HSV 空间中更自然.这是有效的,除了那些在过程中被调整到 RGB 色域之外的像素。

虽然通过以下方式很容易将值强制返回到色域:

  • 分别裁剪低于 0 到 0 和高于 255 到 255 的子像素值,或

  • 通过除以 (max-min) 并减去 min/(max-min) 将整个像素或整个图像压缩并移动到 0-255 范围内;

当对同一图像进行多次操作时,这些选项会导致严重的伪影。我正在寻找在代码中处理超色域子像素的破坏性最小的方法。挖掘 Google 的许多页面至少会得到数百个 Photoshop 链接、一些面向设计的链接和对 LittleCMS 等 CMS 的引用。

我需要一个算法解决方案来放入 C++ 代码。

注意:只是做一些基本的实验,在整个图像上使用线性压缩会导致亮度在数百次迭代中大量损失,计算发生在 float 上。欢迎进一步深入了解下面的 S 形压缩评论。

最佳答案

您面临的根本问题是颜色空间之间的多次转换。如果转换不是无损的,那么您将获得累积的工件。

更好的解决方案是将所有图像保存在一个色彩空间中,并在该色彩空间内进行所有操作。将转换视为单行道,将 拷贝 转换为 RGB 以供显示。不要来回转换。

关于c++ - 处理 RGB 到 CIEL*a*b* 到 RGB 转换中的 "Out-of-Gamut"颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20362500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com