颜色模型转换公式

为了用计算机来表示和处理颜色,必须采用定量的方法来描述颜色,即建立颜色模型。目前广泛使用的颜色模型有三类:计算颜色模型、工业颜色模型、视觉颜色模型。计算颜色模型又称为色度学颜色模型,主要应用于纯理论研究和计算推导;工业颜色模型侧重于实际应用的实现技术;视觉颜色模型用于与人直接接口的颜色模型和控制。
    1、计算颜色模型有CIE的RGB、XYZ、Luv、LCH、LAB、UCS、UVW。
    2、工业颜色模型NTSC的RGB、YUV、YIQ、CMYK、YCbCr。
    3、视觉颜色模型有HS*系列,包含HSL、HSV(B)。


常见Color Formula/Matrix如下:

 1、RGB<->CIE XYZ
    a、RGB<->CIE XYZ REC601
     |X|    | 0.607  0.174  0.201|    |R|
     |Y| = | 0.299  0.587  0.114| * |G|
     |Z|    | 0.000  0.066  1.117|    |B|

     |R|    | 1.910  -0.532  -0.288|    |X|
     |G| = |-0.985   1.999  -0.028| * |Y|
     |B|    | 0.058  -0.118   0.898|    |Z|

   b、RGB<->CIE XYZ REC709
     |X|    | 0.412  0.358  0.180|    |R|
     |Y| = | 0.213  0.715  0.072| * |G|
     |Z|    | 0.019  0.119  0.950|    |B|

     |R|    | 3.241  -1.537  -0.499|    |X|
     |G| = |-0.969   1.876  -0.042| * |Y|
     |B|    | 0.056  -0.204   1.057|    |Z|

   c、RGB<->CIE XYZ ITU
     |X| = | 0.431  0.342  0.178|    |R|
     |Y| = | 0.222  0.707  0.071| * |G|
     |Z| = | 0.020  0.130  0.939|    |B|

     |R|    | 3.063  -1.393  -0.476|   |X|
     |G| = |-0.969   1.876   0.042| * |Y|
     |B|    | 0.068  -0.229   1.069|    |Z|

2、RGB<->CMYK
  a、RGB -> CMYK 
   K = min(1-R, 1-G, 1-B)
   C = (1-R-K) / (1-K)
   M = (1-G-K) / (1-K)
   Y = (1-B-K) / (1-K)

b、CMYK->RGB
   R = 1 - min(1, C *(1-K) + K)
   G = 1 - min(1, M *(1-K) + K)
   B = 1 - min(1, Y *(1-K) + K)

3、RGB->CIE RGB
|Rcie|    | 1.167 -0.146 -0.151|   |R|
|Gcie| = | 0.144  0.753  0.159| * |G|
|Bcie|    |-0.001  0.059  1.128|   |B|

4、CIE XYZ->CIE Lab
    D65   xn = 0.312713  ,  yn = 0.329016  

    L = 116 * ( ( Y / Yn ) ^ ( 1 / 3 ) )     Y/Yn >  0.008856
    L = 903.3 * Y / Yn                          Y/Yn <= 0.008856

    a = 500*(f(X/Xn)-f(Y/Yn))
    b = 200*(f(Y/Yn)-f(Z/Zn))

5、RGB->HSV

  V=max(R,G,B)
  S=(V-min(R,G,B))*255/V   if V!=0, 0 otherwise

  (G - B)*60/S,  if V=R
  H= 180+(B - R)*60/S,  if V=G
  240+(R - G)*60/S,  if V=B

  若 H<0,则 H=H+360
使用上面从 0° 到 360° 变化的公式计算色调( hue)值,确保它们被 2 除后能试用于8位。

 


6、RGB<->YIQ
    YIQ是北美电视系统(NTSC)所采用的。Y指亮度,I和Q指色调,描述图像的色彩和饱和度。

|Y|      | 0.299  0.587  0.114|    |R|
|I|  =  | 0.596 -0.274 -0.322| * |G|
|Q|      | 0.211 -0.523  0.312|    |B|
  
|R|    | 1    0.956   0.621|    |Y|
|G| = | 1  -0.272  -0.647| * |I|
|B|    |-1  -1.106  -1.703|   |Q|

7、RGB<->YUV
    YUV是欧洲的电视系统所采用(PAL)。Y指亮度,U和V指色调。
|Y|    | 0.299  0.587   0.114|   |R|
|U| = |-0.148 -0.289  0.437| * |G|
|V|    | 0.615 -0.515  -0.100|   |B|
  
|R|    | 1   0          1.140|      |Y|
|G| = | 1  -0.395  -0.581| *   |I|
|B|    |-1   2.032    0     |      |Q|


8、RGB<->YCbCr
    JPEG采用的颜色模型是YCbCr。它是从YUV颜色模型衍生来的。其中Y指亮度,而Cb和Cr是将U和V做少量的调整而得来得。

|Y  |    | 0.2990  0.5870   0.1140  0  |    |R|
|Cb|    |-0.1687 -0.3313  0.5000  128| * |G|
|Cr | = | 0.5000 -0.4187 -0.0813  128|   |B|
|1  |    | 0           0            0    1   |    |1|

|R|    | 1   1.40200   0         |    |Y        |
|G| = | 1  -0.34414  -0.71414| * |Cb-128|
|B|     | 1   1.77200   0      |    |Cr-128 |


标准参考代码:
http://www.easyrgb.com/math.php?MATH=M22#text22
 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=466948


<script src="http://localhost:82/PromoteIcon.aspx?id=466948" type="text/javascript"></script> [ 收藏到我的网摘]   still发表于 2005年08月28日 22:49:00
href="http://blog.csdn.net/still05017/Services/Pingback.aspx" rel="pingback" /> <script type="text/javascript">function hide(){showComment();}</script>


特别推荐:

 

#   flyb 发表于2007-02-28 11:08:02  IP: 222.93.94.*
不好意思,最近想做个分色的程序,还不是很清楚,想问一个简单的问题:

我在你链的标准代码网页中没找到RGB->CMYK的转换代码,是不是需要将RGB->CMY->CMYK呀?

还有:
//RGB values = 0 ÷ 255
//CMY values = 0 ÷ 1

是什么意思。

期盼你的回答,谢谢!


#   still05017 发表于2007-02-28 21:04:14  IP:
1、用上面的2.a的公式就可以了:
K = min(1-R, 1-G, 1-B)
C = (1-R-K) / (1-K)
M = (1-G-K) / (1-K)
Y = (1-B-K) / (1-K)
上面公式中RGB颜色分量的范围是0-1,如果是0-255,把RGB颜色分量分别除以255归一化就可以了。用标准代码RGB->CMY->CMYK,最终实际上就是上面这个公式,你可以自己推导一下看看。
2、
//RGB values = 0 ÷ 255
//CMY values = 0 ÷ 1
就是指RGB颜色分量的范围是 0 - 255;CMY颜色分量的范围是 0 - 1。

#   flyb 发表于2007-03-01 13:07:35  IP:
2.a 与 RGB->CMY->CMYK是一样

我在另一个地方看见了这样一个公式,和你的方法算的结果不一样,很疑惑

RGB->CMYK的转换分3步完成: (以下F代表满色,8位时,=255)
C1=F-R
M1=F-G
Y1=F-B

K=MIN(C1,M1,Y1)

C=C1-K
M=M1-K
Y=Y1-K

#   flyb 发表于2007-03-01 13:16:52  IP: 222.93.94.*
我还想向你请教一个问题:

RGB在计算机中是3个字节,每个分量一个字节,值是0~255方式存储的

那CMYK在计算机中的存储形式是如何呢

好像说CMYK是指这四种颜色调在一起的比例?(这理解对吗?),我看见有些地方说是4个字节存储,这种说法对吗?

如果是这样:假设R-100 G-100 B-100
用你的方法算出来是:K=0.392 C=0.357 M=0.357 Y=0.357

超出100%了

不好意思,因为刚学,问得问题可能比较笨,呵呵。。。
可是不懂呀

等待你的回答,谢谢!



#   flyb 发表于2007-03-01 13:40:26  IP: 222.93.94.*
我理解错了CMYK:
为每个像素的每种印刷油墨指定一个百分比值。为最亮(高光)颜色指定的印刷油墨颜色百分比较低,而为较暗(暗调)颜色指定的百分比较高。

那CMYK的存储形式是怎样的呢?

你的算法和他的算法是一样的吗?

#   flyb 发表于2007-03-01 13:52:45  IP: 222.93.94.*
我现在想做的事是将一个RGB彩色图转换成CMYK四个图,我应该如何做呢?


#   still05017 发表于2007-03-01 22:35:37  IP:
支持CMYK颜色模型的图象格式有tiff和jpeg(还有就是ps的一些图象格式),在图象格式中CMYK是4个字节存储;RGB彩色图转CMYK四个图,把RGB->CMYK后,要得到哪个通道的图象,保留那个通道,然后把其他通道的值都取为0,然后保存啊。你想得到的CMYK四个分色图是想采用RGB颜色模型还是CMYK颜色模型保存?

#   still05017 发表于2007-03-02 22:50:38  IP:
1、引用Tiff6的一段话:
Note: there is no single method of converting RGB data to CMYK data and back.In a perfect world, something close to cyan = 255-red, magenta = 255-green, and
yellow = 255-blue should work; but characteristics of printing inks and printing presses, economics, and the fact that the meaning of RGB itself depends on other
parameters combine to spoil this simplicity.

RGB到CMYK本来就不是一个线性的映射关系,一个是发光的颜色模型,一个是反光的颜色模型,表示油墨的浓度,公式不同效果也不同,网上的公式很多的。如果简单点的话,可以用下面这对,第一个公式也是你提到的。
RGB->CMYK:
k = min((255-r), (255-g), (255-b));
c = 255-r-k;
m = 255-g-k;
y = 255-b-k;

CMYK->RGB:
r = (255-c)*(255-k)/255;
g = (255-m)*(255-k)/255;
b = (255-y)*(255-k)/255;

2、CMYK在TIFF文件中,是4字节存储,每个通道的取值范围(0-255,0对应0%的浓度,255对应100%的浓度)。在电脑上显示CMYK图象还是要CMYK->RGB,然后显示的。我昨天问你“CMYK四个分色图是想采用RGB颜色模型还是CMYK颜色模型保存?”,如果用RGB颜色模型保存,要把CMYK->RGB,然后保存的。至于如何用TIFF保存CMYK图象,看一下TIFF6的Spec,里面有CMYK Images的说明,比较简单,你自己看看吧!
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值