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

时间:2012-01-30 13:22:51

标签: objective-c ios image-processing colors image-manipulation

我正在开发一个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;

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

enter image description here

选择的replacementColor。

enter image description here

绘制replacementColor后的杯子(用红色圈出)。

enter image description here

见上面的最终图片。因为我只是改变 hue&饱和度 ,而不是 pixelColor ,应用的颜色没有看起来与所选的 replacementColor 类似。图像的亮度保持不变。

如果我更改 以及 hue&饱和度 ,像这样,

resultColor = (new_h, new_s, new_v);
pixelColor = resultColor;
然后杯子变成扁平的颜色,缺少灯光和灯光。像这样的阴影,

enter image description here

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

1 个答案:

答案 0 :(得分:3)

在你的例子中,让我们将粉红色称为“要替换的颜色”,然后将棕色调成“替换颜色”。对于目标中的每个像素,找到源中的相应像素。了解它与“替换颜色”的不同之处。现在对“替换颜色”进行类似的调整,并将其用作当前输出像素的颜色。

例如,如果当前源像素比用5“v”单位替换的颜色更暗,则将输出像素设置为由5“v”单位变暗的替换颜色。 (并且你也希望在色调和饱和度方面进行相同的调整。)

你可能需要限制你调整的颜色范围,这样你就不会将其他物体变成不同的颜色。