更好的图像着色逻辑/算法

Emp*_*ack 8 image-manipulation colors image-processing objective-c ios

我正在开发一个iOS应用程序,用户可以通过触摸它来更改图像颜色的一部分,例如茶杯.我正在使用Floodfill算法填充颜色,以便用户必须点击Tea Cup来改变颜色.这工作正常.但是,最终颜色看起来与替换颜色略有不同.考虑到饱和度和亮度,我有一些问题需要找到一个更好的逻辑来将对象的(茶杯)颜色转换为所选的颜色.

我使用以下逻辑来获取结​​果颜色.我将颜色表示为(色调,饱和度,值).

touchedColor = (tchd_h, tchd_s, tchd_v); // I am not using this now 

pixelColor = (old_h, old_s, old_v); 
replacementColor = (new_h, new_s, new_v);
resultColor = (new_h, new_s, old_v);
pixelColor = resultColor;
Run Code Online (Sandbox Code Playgroud)

绘画前的杯子(用红色圈出).

在此输入图像描述

选中的replacementColor.

在此输入图像描述

绘制替换颜色后的杯子(用红色圈出).

在此输入图像描述

见上面的最终图片.正如我刚才只改变色相和饱和度,而不是价值的的pixelColor,应用的颜色不类似于选定replacementColor.图像的亮度保持不变.

如果我改变连同色调和饱和度这样的,

resultColor = (new_h, new_s, new_v);
pixelColor = resultColor;
Run Code Online (Sandbox Code Playgroud)

然后杯子变成扁平的颜色,错过了这样的灯光和阴影,

在此输入图像描述

我想要一些想法来调整上面的逻辑,将像素颜色更改为匹配的替换颜色.可能是一些公式来推导饱和度和价值.

use*_*321 3

在您的示例中,我们将粉红色称为“要替换的颜色”,将棕色称为“替换颜色”。对于目标中的每个像素,找到源中对应的像素。查看它与“要替换的颜色”有何不同。现在对“替换颜色”进行类似的调整,并将其用作当前输出像素的颜色。

例如,如果当前源像素比要替换的颜色暗 5 个“v”单位,则将输出像素设置为暗 5 个“v”单位的替换颜色。(您还想对色调和饱和度进行相同的调整。)

您可能需要限制调整的颜色范围,以免将其他对象变成不同的颜色。