图像处理:Yxy、XYZ颜色空间介绍及RGB转换公式

一、介绍

1.简洁总结重点:
Yxy代表亮度、色相、色度。XYZ中X、Y、Z是对R、G、B的一种线性变换,XYZ也分别代表了RGB三基色刺激值的概念。这三者之间可相互转换。

xy分别是XY对XYZ三者之和的比值,x可以理解为红色分量,y为绿色分量,而Y与XYZ中的Y一样。

2.由来:
国际照明委员会(CIE)在进行了大量正常人视觉测量和统计,1931年建立了"标准色度观察者", 从而奠定了现代CIE标准色度学的定量基础。

由于"标准色度观察者"用来标定光谱色时出现负刺激值,计算不便,也不易理解,因此1931年CIE在RGB系统基础上,改用三个假想的原色X、Y、 Z建立了一个新的色度系统。将它匹配等能光谱的三刺激值,定名为"CIE1931 标准色度观察者 光谱三刺激值",简称为"CIE1931标准色度观察者"。

这一系统叫做"CIE1931标准色度系统"或称为" 2° 视场XYZ色度系统"。CIEXYZ颜色空间稍加变换就可得到Yxy色彩空间,其中Y取三刺激值中Y的值, 表示亮度,x、y反映颜色的色度特性。

定义如下:在色彩管理中,选择与设备无关的颜色空间是 十分重要的,与设备无关的颜色空间由国际照明委员会(CIE)制定,包括CIEXYZ和CIELAB两个标准。 它们包含了人眼所能辨别的全部颜色。

而且,CIEYxy测色制的建立给定量的确定颜色创造了条件。 但是,在这一空间中,两种不同颜色之间的距离值并不能正确地反映人们色彩感觉差别的大小, 也就是说在CIEYxy色厦图中,在不同的位置不同方向上颜色的宽容量是不同的,这就是Yxy颜色空间的不均匀性。

这一缺陷的存在,使得在Yxy及XYZ空间不能直观地评价颜色。

XYZ色彩体系颜色匹配函数这个XYZ色彩体系的颜色匹配函数都是正数。而这个体系能标识用RGB无法标识的颜色,因此红色具有两个峰,呈现出有点奇怪的形状。

xy色度图想要表示颜色(表色),基本上需要3个数值。不过因为光的亮度是可变的,所以表示光的颜色只要色相(色调)和色度(彩度)两个颜色信息即可。实际应用时,三维色彩空间(例如孟塞尔色立体)表示起来很难,但如果用二维原色平面,则容易操作。

具体来讲,比较常用的是XYZ色彩体系,牺牲亮度,将三维XYZ色彩空间变为二维xy平面的“xy色度图”( xy color diagram)。这个xy色度图也是国际照明委员会CE在1931年制定的,所以也被称为CIE色彩体系或CIE色度图在这个xy色度图中,使用与XYZ色彩体系的3个刺激值X、Y、Z的比例X:Y:Z相同比例的x:y:z来表示(其中,x+y+z=1) 以这样变换得到的x值作为横轴、y值作为纵轴,用以表示所有颜色的图就是xy色度图。z是自动决定的,因此没有使用。

二、转换公式

XYZ → Standard-RGB

//X, Y and Z input refer to a D65/2° standard illuminant.
//sR, sG and sB (standard RGB) output range = 0 ÷ 255

var_X = X / 100
var_Y = Y / 100
var_Z = Z / 100

var_R = var_X *  3.2406 + var_Y * -1.5372 + var_Z * -0.4986
var_G = var_X * -0.9689 + var_Y *  1.8758 + var_Z *  0.0415
var_B = var_X *  0.0557 + var_Y * -0.2040 + var_Z *  1.0570

if ( var_R > 0.0031308 ) var_R = 1.055 * ( var_R ^ ( 1 / 2.4 ) ) - 0.055
else                     var_R = 12.92 * var_R
if ( var_G > 0.0031308 ) var_G = 1.055 * ( var_G ^ ( 1 / 2.4 ) ) - 0.055
else                     var_G = 12.92 * var_G
if ( var_B > 0.0031308 ) var_B = 1.055 * ( var_B ^ ( 1 / 2.4 ) ) - 0.055
else                     var_B = 12.92 * var_B

sR = var_R * 255
sG = var_G * 255
sB = var_B * 255

Standard-RGB → XYZ

//sR, sG and sB (Standard RGB) input range = 0 ÷ 255
//X, Y and Z output refer to a D65/2° standard illuminant.

var_R = ( sR / 255 )
var_G = ( sG / 255 )
var_B = ( sB / 255 )

if ( var_R > 0.04045 ) var_R = ( ( var_R + 0.055 ) / 1.055 ) ^ 2.4
else                   var_R = var_R / 12.92
if ( var_G > 0.04045 ) var_G = ( ( var_G + 0.055 ) / 1.055 ) ^ 2.4
else                   var_G = var_G / 12.92
if ( var_B > 0.04045 ) var_B = ( ( var_B + 0.055 ) / 1.055 ) ^ 2.4
else                   var_B = var_B / 12.92

var_R = var_R * 100
var_G = var_G * 100
var_B = var_B * 100

X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505

XYZ → Yxy

Y = Y
x = X / ( X + Y + Z )
y = Y / ( X + Y + Z )

Yxy → XYZ

X = x * ( Y / y )
 Y = Y
 Z = ( 1 - x - y ) * ( Y / y )

猜你喜欢

转载自blog.csdn.net/weixin_48846514/article/details/126983926