- 东方标准(前新东方职业教育)
国内最大的IT人才服务机构-- IT培训 人才服务 项目外包 - 《数据库黑客大曝光》在线阅读
详解数据库服务器防护术 优快云读书频道独家奉献 - 《程序员面试宝典》在线阅读
详解简历书写与面试细节、问题 优快云读书频道独家奉献 - 孙鑫著作《VC++深入详解》在线阅读
从根本上理解并掌握Windows的程序设计 优快云读书频道独家奉献 - 《VC++ 2005入门经典》在线阅读
Ivor Horton的经典之作 C++最畅销书 优快云读书频道独家连载
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.youkuaiyun.com/TrackBack.aspx?PostId=466948
我在你链的标准代码网页中没找到RGB->CMYK的转换代码,是不是需要将RGB->CMY->CMYK呀?
还有:
//RGB values = 0 ÷ 255
//CMY values = 0 ÷ 1
是什么意思。
期盼你的回答,谢谢!
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。
我在另一个地方看见了这样一个公式,和你的方法算的结果不一样,很疑惑
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
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%了
不好意思,因为刚学,问得问题可能比较笨,呵呵。。。
可是不懂呀
等待你的回答,谢谢!
为每个像素的每种印刷油墨指定一个百分比值。为最亮(高光)颜色指定的印刷油墨颜色百分比较低,而为较暗(暗调)颜色指定的百分比较高。
那CMYK的存储形式是怎样的呢?
你的算法和他的算法是一样的吗?
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的说明,比较简单,你自己看看吧!