如何将像素的RGB值转换为单个单色值?
答案 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 Adobe的这个tutorial。
在代码中复制这一点会相当复杂,并且仍然需要用户干预才能使得到的图像在美学上“完美”(无论这意味着什么!)。
答案 4 :(得分:4)
如上所述,来自RGB三联体的灰度平移(注意单色图像不需要是灰度级)受品味影响。
例如,你可以作弊,只提取蓝色成分,只需将红色和绿色成分抛弃,然后复制蓝色值。另一个简单且通常可行的解决方案是获取像素的RGB三元组的平均值,并在所有三个组件中使用该值。
单独使用Photoshop的专业且非常便宜的无灰度/单色转换器插件市场占有相当大的市场,这说明转换就像你想要的一样简单或复杂。 / p>
答案 5 :(得分:0)
将任何基于RGB的图片转换为单色的逻辑背后都不是简单的线性变换。我认为,通过“颜色分割”技术可以更好地解决此类问题。通过k均值聚类可以实现“颜色分割”。
请参阅MathWorks网站上的参考示例。
原始图片为彩色。
这是如何工作的?
从整个图像中收集所有像素值。从宽W像素,高H像素的图像中,您将获得W * H颜色值。现在,使用k-means算法创建2个群集(或bin),并将颜色放入适当的“ bins”中。 2个簇代表您的黑色和白色阴影。
Youtube视频演示了使用k均值的图像分割吗? https://www.youtube.com/watch?v=yR7k19YBqiw
使用此方法的挑战
k均值聚类算法容易受到异常值的影响。一些随机像素的RGB距离远离其他人群,其颜色很容易使形心偏斜,从而产生意想不到的结果。