关于颜色:RGB到单色的转换

RGB to monochrome conversion

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


我在颜色常见问题解答中找到了一种可能的解决方案。亮度分量Y(来自CIE XYZ系统)捕获人类在一个通道中最常感知为的颜色。因此,使用这些系数:

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

这篇最近的科学文章比较了将彩色照片转换为灰度的最新技术,包括简单的亮度公式和更复杂的技术。


此MSDN文章使用(0.299 * color.R + 0.587 * color.G + 0.114 * color.B);

此Wikipedia文章使用(0.3* color.R + 0.59 * color.G + 0.11 * color.B);


这取决于您的动机。如果您只想将任意图像转换为灰度图像,并且看起来不错,则可以使用此问题的其他答案进行转换。

如果要将彩色照片转换为黑白照片,此过程可能会非常复杂且主观,需要对每个图像进行特定的调整。要了解可能涉及的内容,请查看Adobe for Photoshop中的本教程。

在代码中复制此内容相当费时,并且仍然需要用户干预才能使生成的图像在美学上"完美"(无论这意味着什么!)。


如还提到的,来自RGB三重奏的灰度级转换(请注意,单色图像不必是灰度级)容易受味道的影响。

例如,您可以作弊,仅将蓝色和红色成分扔掉,然后复制蓝色值,从而仅提取蓝色成分。另一个简单且通常可行的解决方案是取像素的RGB三元组的平均值,并在所有三个分量中使用该值。

仅适用于Photoshop的专业且价格不便宜的灰度/单色转换器插件有相当大的市场,这一事实说明,转换就像您希望的那样简单或复杂。铅>


将任何基于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距离远离其他人群,其颜色很容易使形心偏斜,从而产生意外的结果。


推荐阅读