你可以使用《图像的简单玩法》中的演示程序和本文提供的公式来测试一些图片。例图的尺寸较大,需要用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值不相等时,要想转换成与之接近的灰色,最容易想到的是以下几种方法:
公式: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通道的灰度值就是这种方法来求的。
公式: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值就是取最大值来求的。
公式:Gray = Mid(R, G, B)
取橄榄绿色RGB(140,153,115)的RGB中间值,因为153>140>115,所以Gray=140。
c=midRGB |
公式: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值就是用这种方法来求的。
公式:Gray = (R + G + B) / 3
取橄榄绿色RGB(140,153,115)的RGB平均值,Gray=(140+153+115)/3=136。
c=(r+g+b)/3 |
HSI的I值就是用这种方法来求的。
先来分析一下前面的基础算法。算法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加权来增大绿色的分量。
国际电信联盟(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)
另一个普遍使用的推荐标准是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-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 |
观察上图的彩虹条,我们凭感觉可以看出绿色的部分亮度分布是比较均匀的,而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,原文为Commission Internationale de L'Eclairage(法)或International Commission on Illumination(英)。这个委员会创建的目的是要建立一套界定和测量色彩的技术标准。可回溯到1930年,CIE标准一直沿用到数字视频时代,其中包括白光标准(D65)和阴极射线管(CRT)内表面红、绿、蓝三种磷光理论上的理想颜色。
与广播电视最密切的国际标准组织是原来的(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条评论)
登录后参与讨论