RGB到单色转换

时间:2008-08-18 08:27:33

标签: colors rgb monochrome

如何将像素的RGB值转换为单个单色值?

6 个答案:

答案 0 :(得分:18)

我在Color FAQ找到了一个可能的解决方案。 亮度分量 Y(来自 CIE XYZ系统)捕获人类最感知的一个通道中的颜色。所以,使用这些系数:

mono = (0.2125 * color.r) + (0.7154 * color.g) + (0.0721 * color.b);

答案 1 :(得分:7)

This MSDN article使用(0.299 * color.R + 0.587 * color.G + 0.114 * color.B);

This Wikipedia article使用(0.3* color.R + 0.59 * color.G + 0.11 * color.B);

答案 2 :(得分:6)

recent scientific article比较了将彩色照片转换为灰度的最先进技术,包括简单的亮度公式和更复杂的技术。

答案 3 :(得分:5)

这取决于你的动机。如果您只是想将任意图像转换为灰度并使其看起来很好,那么此问题的其他答案中的转换就可以了。

如果要将彩色照片转换为黑白照片,过程可能非常复杂且主观,需要对每张图像进行特定调整。想要了解可能涉及的内容,请查看Adobe for Adob​​e的这个tutorial

在代码中复制这一点会相当复杂,并且仍然需要用户干预才能使得到的图像在美学上“完美”(无论这意味着什么!)。

答案 4 :(得分:4)

如上所述,来自RGB三联体的灰度平移(注意单色图像不需要是灰度级)受品味影响。

例如,你可以作弊,只提取蓝色成分,只需将红色和绿色成分抛弃,然后复制蓝色值。另一个简单且通常可行的解决方案是获取像素的RGB三元组的平均值,并在所有三个组件中使用该值。

单独使用Photoshop的专业且非常便宜的无灰度/单色转换器插件市场占有相当大的市场,这说明转换就像你想要的一样简单或复杂。 / p>

答案 5 :(得分:0)

将任何基于RGB的图片转换为单色的逻辑背后都不是简单的线性变换。我认为,通过“颜色分割”技术可以更好地解决此类问题。通过k均值聚类可以实现“颜色分割”。

请参阅MathWorks网站上的参考示例。

https://www.mathworks.com/examples/image/mw/images-ex71219044-color-based-segmentation-using-k-means-clustering

原始图片为彩色。

Picture with colours

使用k均值聚类转换为单色后 Picture after converting to monochrome using k-means clustering

这是如何工作的?

从整个图像中收集所有像素值。从宽W像素,高H像素的图像中,您将获得W * H颜色值。现在,使用k-means算法创建2个群集(或bin),并将颜色放入适当的“ bins”中。 2个簇代表您的黑色和白色阴影。

Youtube视频演示了使用k均值的图像分割吗? https://www.youtube.com/watch?v=yR7k19YBqiw

使用此方法的挑战

k均值聚类算法容易受到异常值的影响。一些随机像素的RGB距离远离其他人群,其颜色很容易使形心偏斜,从而产生意想不到的结果。