原创 彩色图片变黑白

2011-4-6 15:19 2878 4 4 分类: 消费电子
这里所说的彩色图片变黑白,是指把彩图变为灰度图,不是黑白二值图。 

你可以使用《图像的简单玩法》中的演示程序和本文提供的公式来测试一些图片。例图的尺寸较大,需要用Photoshop图象>图象大小命令将图片调小一点并储存为BMP格式再做测试。

例图——索尼HDR-UX1E的官方样张

基础算法

彩色照片变成黑白照片,其实就是图片中的彩色信息变为灰度信息,是把每一种不同深浅的颜色分别用同等亮度的灰度值来替代。

根据国际照明委员会(CIE)的规定,RGB混合成白色时的比例是1:1:1。因此,纯灰色(中性灰)的RGB混合比例也是1:1:1,也就是说灰色是RGB值相等的颜色

一种颜色深浅度由他的RGB值决定,RGB值越大,颜色越亮,反之则越暗。例如RGB(80,80,80),R=G=B=80,这时这种颜色的灰度值为Gray=80,是一种较暗的灰色。

如果RGB值不相等时怎么办呢?这时我们需要根据RGB的值来计算灰度Gray的值。下面我们以一种橄榄绿色RGB(140,153,115)为例,来分析一下灰度值的算法。

RGB值不相等时,要想转换成与之接近的灰色,最容易想到的是以下几种方法:

a. 灰度值取RGB之一

公式:Gray = R 或 Gray = G 或 Gray = B

取橄榄绿色RGB(140,153,115)的G值,Gray=G=153。

下面分别是Gray=R、Gray=G、Gray=B时的效果:

c=r

c=g

 

c=b

Photoshop的R、G、B通道的灰度值就是这种方法来求的。

b. 灰度值取RGB的最大值或最小值

公式:Gray = Max(R, G, B) 或 Gray = Min(R, G, B)

取橄榄绿色RGB(140,153,115)的RGB最大值,因为153>140>115,所以Gray=153。

c=maxRGB

c=minRGB

由于人眼对亮的颜色比对暗的颜色更敏感,因此取最大值比取最小值的效果要好。

HSV的V值就是取最大值来求的。

c. 灰度值取RGB的中间值

公式:Gray = Mid(R, G, B)

取橄榄绿色RGB(140,153,115)的RGB中间值,因为153>140>115,所以Gray=140。

c=midRGB

d. 灰度值取RGB的最大值与最小值的平均值

公式:Gray = (Max(R,G,B) + Min(R,G,B)) / 2

取橄榄绿色RGB(140,153,115)的RGB最大值153与最小值115的平均值,Gray=(153+115)/2=134。

c=(maxRGB+minRGB)/2

HSL的L值就是用这种方法来求的。

e. 灰度值取RGB的平均值

公式:Gray = (R + G + B) / 3

取橄榄绿色RGB(140,153,115)的RGB平均值,Gray=(140+153+115)/3=136。

c=(r+g+b)/3

HSI的I值就是用这种方法来求的。

RGB加权算法

先来分析一下前面的基础算法。算法a单取某色通道的方法显然是不公平的;b、c的效果稍好,但与a的效果十分接近;d、e的效果较好,但仍有不足之处。下面我们根据彩虹条转换的效果来看一下d、e算法的不足之处。

看出来了吧d、e转换的是很平均的。但是你有没有感觉到实际上绿色和黄色的部分要稍亮一些,而红、蓝部分稍暗一些呢?这是为什么呢?

1931年,国际照明委员会(CIE)通过颜色匹配实验,得出用红、绿和蓝三基色光匹配成白光时,所需要的红、绿和蓝基色光的光通量之比为1∶4.5907∶0.0601,从这个比例上可以看出,绿色的成份所占的比例比较大。

为了简化计算,CIE采用了平均的单位制,记作[R]、[G]、[B],它规定白光是由各为1个单位的三基色光组成。

W(白) = 1[R] + 1[G] + 1[B]

CIE在此基础上定义了CIE XYZ颜色空间,并画出了相应的色度图。下图(b)中的E点代表白光,它的坐标为(0.33,0.33)。从CIE1931色度图中我们可以看出,绿色与白色E点的距离要比红色和蓝色大得多。

CIE色度图是基于人眼对色彩的感知的,从人的视觉角度来讲,RGB配成白光的实际比例是不同的,因此要想调出更为接近人的视觉的灰度,需要通过给RGB加权来增大绿色的分量。

ITU-R BT.601

国际电信联盟(International Telecommunication Union,ITU)定义了几个推荐(Recommendation)标准,最流行的是ITU-R BT.601(前称 CCIR 601-1,简称Rec 601-1)和ITU-R BT.709(前称 CCIR 709,简称Rec 709)。

BT.601-1是老的NTSC制使用的标准,它使用CIE定义的一种标准光源,叫做“光源C(illuminant C)”,用钨丝光源并通过滤波来模拟普通日光,色温是 6774°K。它规定白色在CIE色度图中的坐标是(0.310063,0.316158),红、绿和蓝的坐标分别是(0.67,0.33,0)、(0.21,0.71,0.08)和(0.14,0.08,0.78),跟据这些数据计算出如下的公式来:

X = 0.606881*R + 0.173505*G + 0.200336*B

Y = 0.298912*R + 0.586611*G + 0.114478*B

Z = 0.000000*R + 0.066097*G + 1.116157*B

其中Y的值就是我们要的亮度值(灰度值)。因为编程时不需要那么高的精确度,所以一般软件用的是精确到小数点后面3位的公式:

Gray = 0.299*R + 0.587*G + 0.114*B

c = 0.299*r + 0.587*g + 0.114*b

Photoshop的标准亮度公式是保留两位小数的形式:

Gray = 0.3*R + 0.59*G + 0.11*B

c = 0.3*r + 0.59*g + 0.11*b

[注]Photoshop的亮度公式我是在Adobe开放的ASL源代码中看到的,后面加0.5是为了四舍五入。原文如下:

/// ITU standard is 0.222*r + 0.707*g + 0.071*b
/// Photoshop: red * .3 + green * .59 + blue * .11 + .5
/// optimized: (( ((boost::uint32_t)(red) * 4915) + ((boost::uint32_t)(green) * 9667) + ((boost::uint32_t)(blue) * 1802) + 8192) >> 14)

ITU-R BT.709

另一个普遍使用的推荐标准是BT.709,它使用的标准光源是D65,65表示相关色温是6504°K,它的白色坐标为(0.312713,0.329016),这种标准的灰度(Y)值算法公式为:

Y = 0.212649*R + 0.715169*G + 0.072182*B

一般情况下精确到小数点后面3位,于是:

Gray = 0.213*R + 0.715*G + 0.072*B

c = 0.213*r + 0.715*g + 0.072*b

ITU标准(ITU standard)

近年来,ITU-R介绍了新的推荐标准,称为ITU标准(ITU/EBU 3213 standard)。它对RGB颜色空间中绿色坐标作了变动,但标准白光仍然是D65,坐标为(0.312713,0.329016),这种标准的灰度(Y)值算法公式为:

Y = 0.222015*R + 0.706655*G + 0.071330*B

精确到小数点后面3位:

Gray = 0.222*R + 0.707*G + 0.071*B

c = 0.222*r + 0.707*g + 0.071*b

Lab的L算法

观察上图的彩虹条,我们凭感觉可以看出绿色的部分亮度分布是比较均匀的,而BT.601的算法明显的在绿色范围的中央产生一个较暗的渐变色带。这是因为CIE色度图是个不规则的马蹄形,而RGB加权算法是线性的,所以有时我们需要通过Gamma修正来减小失真。

BT.601 Gamma 2.2的灰度公式:

Gray = (0.3*R2.2 + 0.59*G2.2 + 0.11*B2.2)1/2.2

c=(0.3*r^2.2 + 0.59*g^2.2 + 0.11*b^2.2)^(1/2.2)

Lab颜色空间是直接从CIE XYZ导出的,因此基于Lab的灰度算法是最标准的、最接近人视觉的算法。Phothshop的灰度模式(Grayscale)是Lab模式a、b的色度信息都为0时的效果。Lab(L)是Lab模式的L亮度通道,比灰度模式稍亮。Lab的具体算法,将在关于Lab颜色空间的文章中详细讲述。

总结

本文讲述的所有灰度算法的比较图:

基础算法中的Gray=Max(R,G,B)Gray=(Max(R,G,B)+Min(R,G,B))/2这两个公式很重要,因为经常用到的HSV和HSL颜色空间的亮度就是用它们来计算的。

ITU的标准,是目前应用最为普遍的计算亮度方法。YUV、YIQ、YCbCr的Y值、JPEG图片、DVD、电视、电影基本上都是用了这三个标准之一。从网上流传的源代码来看,用ITU-R BT.601标准的最多,Photoshop中的标准亮度公式用的也是BT.601标准。

基于Lab的算法最接近人的视觉。

相关知识

CIE(国际发光照明委员会)

CIE,原文为Commission Internationale de L'Eclairage(法)或International Commission on Illumination(英)。这个委员会创建的目的是要建立一套界定和测量色彩的技术标准。可回溯到1930年,CIE标准一直沿用到数字视频时代,其中包括白光标准(D65)和阴极射线管(CRT)内表面红、绿、蓝三种磷光理论上的理想颜色。

CCIR,ITU

与广播电视最密切的国际标准组织是原来的(Consultative Committee of International Radio Communication)与CCITT(Consultative Committee of InternationalTelegraph and TelePhone) 一起分别负责广播电视和通信的全球协调,两者都曾是国际电信联盟ITU(Intenatioonal Telecommunication Union)的分支机构。

1993年ITU进行重组,成为三个部门。1993年3月1日原CCIR更名为ITU-R(ITU-Radio Communication Sector),ITU-R的主要工作是确保无线电频率和卫星轨道为所有国家平等、有效和经济地得到利用。

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /2 下一条