0

我正在开发一个应用程序,我想使用滑块更改图像的几个属性,例如亮度、对比度、饱和度、色调等(用例类似于 lightroom 工作流程,用户可以通过移动滑块来更改这些属性)。

在此处输入图像描述

问题:

我的问题是,这些属性不可交换。

例子

  1. 我将图像 I 即 B(I) 上的亮度值更改为 +30,然后将结果图像的对比度更改为 -60 即 C(B(I)),结果与 B(C(I)) 不同。
  2. 在上述操作C(B(I))之后,如果我尝试将亮度恢复-30来否定亮度效果,即B(C(B(I))),结果与C(I)不同。

我尝试过的方法:

我尝试了两种不同的方法,但都失败了。

  1. 继续将结果应用于最新图像,即如果我想再次更改亮度,我将其应用于 C(B(I)) 的结果。这显然会给出错误的结果,并且不会否定早期应用亮度的效果。
  2. 每当重新应用效果时,移除第一个效果。示例:如果我应用了 C(B(I)),并且再次想要更改亮度,我将删除第一个亮度效果,因此将具有 C(I),然后将结果应用于这个新结果。所以新效果看起来像 B(C(I))。这种方法的问题是,它很慢,因为一旦您更改滑块,就需要重新应用效果(因为移除了先前的效果)。如果我将滑块改回亮度(因为结果没有从 C(B(I)) 更改为 B(C(I))),它也会导致图像突然变化(非常直观)。

Lightroom 和许多其他图像处理软件实现了这一点,但我不知道如何实现,它们完美地否定了用户移动滑块时的更改,而不管应用属性的顺序如何。我不知道他们是怎么做到的,因此需要帮助。

注意:最近我想知道这是否可以通过混合(不知道哪种类型的混合)应用于原始图像的每种效果的结果来实现,而不是将它们应用于前一个的结果。

4

1 回答 1

0

其工作方式是创建要在图像上执行的操作的图形,并在任何参数更改时重新执行整个图形。因此,如果您想要亮度后跟对比度,您将创建一个亮度节点和一个对比度节点,然后将它们连接在一起,如下所示:

图像 -> 亮度 -> 对比度 -> 输出图像

当用户更改亮度或对比度滑块时,您将使用新参数执行整个图形。如果您已经明智地编写了图像处理节点,那么对于诸如亮度和对比度调整之类的东西来说,这应该不会太慢。

如果您的图形非常大且复杂,则缓存一些中间图像并仅重新计算中间图像之后的部分可能是有意义的。但老实说,对于您图片中显示的内容类型,这不应该是必要的。

于 2014-05-03T05:37:28.543 回答