繁体   English   中英

图像的可选颜色

[英]Selective Color of image

我有超过 1 周的时间阅读有关图像选择性颜色变化的信息。 这意味着从颜色选择器中选择一种颜色,然后选择我想要更改颜色的图像的一部分,并将颜色从原始颜色的更改应用于颜色选择器的颜色。

例如,如果我在颜色选择器中选择了一种蓝色并且我还选择了图像中的红色部分,我应该能够将所有图像中的红色更改为蓝色。

另一个例子。 如果我有一个带有红苹果和橙子的图像,并且如果我在图像上选择了一个苹果,并在色标中选择了一个蓝色,那么所有的苹果都应该将颜色从红色变为蓝色。

我有一些想法,但当然我需要一些关于如何做到这一点的更具体的东西

感谢您阅读

作为起点,请考虑对图像的颜色进行聚类。 如果您不知道您想要多少个集群,那么您将需要确定是否合并两个给定集群的方法。 现在,让我们假设我们知道这个数字。 例如,给定左边的下图,我将其颜色映射到 3 个簇,它们的平均颜色如中间所示,并用每个簇的平均颜色表示右图。

在此处输入图片说明在此处输入图片说明在此处输入图片说明

输出正确,现在您需要的是一种替换颜色的方法。 假设用户单击(单个点)图像中的某个位置,那么您就知道原始图像中需要修改的位置。 对于下一个图像,用户(我)单击了“橙色”集群包含的一个点。 然后他点击了一些蓝色调。 从中,您可以制作一个表示“橙色”集群中点的掩码并使用它。 我考虑了一个简单的高斯滤波器,然后是一个 3x5 的平面扩张。 然后根据生成的掩码替换原始图像中的色调(低通滤波后,其上的值也被视为合成图像的 alpha 值)。

在此处输入图片说明

一点也不完美,但你可以有一个比我更好的聚类,还有一个不那么原始的颜色替换方法。 我故意跳过了关于聚类方法、颜色空间等的细节,因为我只在 RGB 上使用了基本的 k 均值,而没有对输入进行任何预处理。 因此,您可以将上述结果视为您可以做的任何其他事情的基准。

给定图像、选定的颜色和目标新颜色 - 您不能做很多不难看的事情。 您还需要一个范围,一些颜色的变化量,因此您可以说一个像素的颜色“足够接近”,而另一个则明显“不同”。

处理的第一步:您创建一个蒙版图像,它是灰度的,从 0.0 到 1.0(或从零到某个最大值,我们将其视为 1.0)变化,并且与输入图像的大小相同。 对于每个输入像素,测试其颜色是否足够接近所选颜色。 如果它“相同”或“足够接近”,则将 1.0 放入掩码中。 如果不同,则输入 0.0。 如果是边界线,则放置一个中间值。 究竟如何做到这一点取决于图像的细节。

这可能在 LAB 空间中效果最好,并根据 A、B 坐标相对于其原点的角度来测试相同性。

拿到口罩后,把它放在一边。 现在对整个图像进行颜色变换。 这可能最好在 HSV 空间中完成。 请勿触摸 V 通道。 向 S 添加一个常数,以 360deg 为模(或 mod 256,如果 S 存储为字节)并将 S 乘以选定的常数,以便将 HSV 中对应于所选颜色的坐标移动到目标颜色的 HSV 坐标。 将变换后的 S 和 H(L 不变)转换回 RGB。

最后,使用蒙版将原始图像与颜色转换后的图像混合。 将此应用于每个通道 - 红色、绿色、蓝色:

output = (1-mask)*original + mask*transformed

如果您在字节数组中进行所有操作,则 0 为 0.0,255 为 1.0,并注意溢出和有符号/无符号问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM