RGB彩空间的不同转换公式

RGB彩⾊空间的不同转换公式
在做图像处理时,我们⼀般采⽤的是RGB空间,但是在某些特殊情况下,我们也会⽤到其他的颜⾊空间。本⽂主要介绍⼀些常见的颜⾊空间的概念和转换公式。
颜⾊的实质是⼀种光波。它的存在是因为有三个实体:光线、被观察的对象以及观察者。⼈眼是把颜⾊当作由被观察对象吸收或者反射不同波长的光波形成的。例如,当在⼀个晴朗的⽇⼦⾥,我们看到阳光下的某物体呈现红⾊时,那是因为该物体吸收了其它波长的光,⽽把红⾊波长的光反射到我们⼈眼⾥的缘故。当然,我们⼈眼所能感受到的只是波长在可见光范围内的光波信号。当各种不同波长的光信号⼀同进⼊我们的眼睛的某⼀点时,我们的视觉器官会将它们混合起来,作为⼀种颜⾊接受下来。同样我们在对图像进⾏颜⾊处理时,也要进⾏颜⾊的混合,但我们要遵循⼀定的规则,即我们是在不同颜⾊模式下对颜⾊进⾏处理的。
1.RGB颜⾊模式
  虽然可见光的波长有⼀定的范围,但我们在处理颜⾊时并不需要将每⼀种波长的颜⾊都单独表⽰。因为⾃然界中所有的颜⾊都可以⽤红、绿、蓝(RGB)这三种颜⾊波长的不同强度组合⽽得,这就是⼈们常说的三基⾊原理。因此,这三种光常被⼈们称为三基⾊或三原⾊。有时候我们亦称这三种基⾊为添加⾊(Additive Colors),这是因为当我们把不同光的波长加到⼀起的时候,得到的将会是更加明亮的颜⾊。把
三种基⾊交互重叠,就产⽣了次混合⾊:青(Cyan)、洋红(Magenta)、黄(Yellow)。这同时也引出了互补⾊(Complement Colors)的概念。基⾊和次混合⾊是彼此的互补⾊,即彼此之间最不⼀样的颜⾊。例如青⾊由蓝⾊和绿⾊构成,⽽红⾊是缺少的⼀种颜⾊,因此青⾊和红⾊构成了彼此的互补⾊。在数字视频中,对RGB三基⾊各进⾏8位编码就构成了⼤约16.7万种颜⾊,这就是我们常说的真彩⾊。顺便提⼀句,电视机和计算机的监视器都是基于RGB颜⾊模式来创建其颜⾊的。
2.Lab颜⾊模式
  Lab颜⾊是由RGB三基⾊转换⽽来的,它是由RGB模式转换为HSB模式和CMYK模式的桥梁。该颜⾊模式由⼀个发光率(Luminance)和两个颜⾊(a,b)轴组成。它由颜⾊轴所构成的平⾯上的环形线来表⽰颜⾊的变化,其中径向表⽰⾊饱和度的变化,⾃内向外,饱和度逐渐增⾼;圆周⽅向表⽰⾊调的变化,每个圆周形成⼀个⾊环;⽽不同的发光率表⽰不同的亮度并对应不同环形颜⾊变化线。它是⼀种具有“独⽴于设备”的颜⾊模式,即不论使⽤任何⼀种监视器或者打印机,Lab的颜⾊不变。
RGB=>Lab
|X|  |0.433910  0.376220  0.189860| |R/255|
|Y| = |0.212649  0.715169  0.072182|*|G/255|
|Z|  |0.017756  0.109478  0.872915| |B/255|
L = 116*Y1/3      for Y>0.008856
L = 903.3*Y      for Y<=0.008856
a = 500*(f(X)-f(Y))
b = 200*(f(Y)-f(Z))
其中  f(t)=t1/3              for t>0.008856
f(t)=7.787*t+16/116    for t<=0.008856
3.HSB颜⾊模式埋点
  从⼼理学的⾓度来看,颜⾊有三个要素:⾊泽(Hue)、饱和度(Saturation)和亮度(Brightness)。HSB颜⾊模式便是基于⼈对颜⾊的⼼理感受的⼀种颜⾊模式。它是由RGB三基⾊转换为Lab模式,再在Lab模式的基础上考虑了⼈对颜⾊的⼼理感受这⼀因素⽽转换成的。因此这种颜⾊模式⽐较符合⼈的视觉感受,让⼈觉得更加直观⼀些。它可由底与底对接的两个圆锥体⽴体模型来表⽰,其中轴向表⽰亮度,
开封市人事局
⾃上⽽下由⽩变⿊;径向表⽰⾊饱和度,⾃内向外逐渐变⾼;⽽圆周⽅向,则表⽰⾊调的变化,形成⾊环。
RGB=>HSB
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位。二苯并噻吩
4.YUV颜⾊模式
  这是电视系统中常⽤的颜⾊模式,即电视中所谓的分量(Component)信号。该模式由⼀个亮度信号Y和两个⾊差信号U、V组成。它是利⽤了⼈眼对亮度信号敏感⽽对⾊度信号相对不敏感的特点,将RGB颜⾊通过亮度信号公式Y=0 39R+0 50G+0 11B转换为⼀个亮度信号Y和两个⾊差分量信号U(R-Y)、V(B-Y),即对⾊差信号进⾏了频带压缩。毫⽆疑问,这是以牺牲信号的质量为代价的。
RGB<=>YUV
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
5.CMYK颜⾊模式
  这是彩⾊印刷使⽤的⼀种颜⾊模式。它由青(Cyan)、洋红(Magenta)、黄(Yellow)和⿊(Black)四种颜⾊组成。其中⿊⾊之所以⽤K来表⽰,是为避免和RGB三基⾊中的蓝⾊(Blue,⽤B表⽰)发⽣混淆。该种模式的创建基础和RGB不同,它不是靠增加光线,⽽是靠减去光线,因为和监视器或者电视机不同的是,打印纸不能创建光源,它不会发射光线,只能吸收和反射光线。因此通过对上述四种颜⾊的组合,便可以产⽣可见光谱中的绝⼤部分颜⾊了。
RGB<=CMYK
R = (255 - C) * ((255 - K) / 255)
G = (255 - M) * ((255 - K) / 255)
B = (255 - Y) * ((255 - K) / 255)
6.部分程序code
void HSI2RGB(BYTE &BR,BYTE &BG,BYTE &BB,BYTE BH,BYTE BS,BYTE BI)
{
int nHValue = static_cast<int>(BH);
int nSValue = static_cast<int>(BS);
int nLValue = static_cast<int>(BI);
float fHAngle = ((float)nHValue ) / 255 * 360;
float H = fHAngle / 180 * PI;
float S = ((float)nSValue ) / 100;
float I = ((float)nLValue ) / 100;
float R = -1;
float G = -1;
float B = -1;
if(fHAngle >= 0 && fHAngle < 120)
{
B = I * ( 1.0 - S );
R = I * ( 1.0 + ( S * cos( H ) / cos( 60.0 / 180 * PI - H ) ) );
G = 3.0 * I - ( B + R );
}
else if(fHAngle >= 120 && fHAngle < 240)
{
R = I * ( 1.0 - S );how often do you exercise
G = I * ( 1.0 + S * cos( H - 120.0 / 180 * PI ) / cos( 180.0 / 180 * PI - H )  );
B = 3.0 * I - ( R + G );
}
else if(fHAngle >= 240 && fHAngle < 360)
{
G = I * ( 1.0 - S );
B = I * ( 1.0 + S * cos( H - 240.0 / 180 * PI ) / cos( 300.0 / 180 * PI - H ) );  R = 3.0 * I - ( G + B );
}
int R_value_in_rgb = R * 255;
2cr13无缝管int G_value_in_rgb = G * 255;
int B_value_in_rgb = B * 255;
BR = static_cast<BYTE>(R_value_in_rgb);
BG = static_cast<BYTE>(G_value_in_rgb);
BB = static_cast<BYTE>(B_value_in_rgb);
}
void  RGB2HSI(BYTE r,BYTE g,BYTE b,BYTE &h,BYTE &s,BYTE &i)
{
short m_fr = static_cast<short>(r);
short m_fg = static_cast<short>(g);
short m_fb = static_cast<short>(b);
float m_fiR = static_cast<float>(m_fr) / 255;
float m_fsG = static_cast<float>(m_fg) / 255;
float m_fhB = static_cast<float>(m_fb) / 255;
if( m_fr == m_fg && m_fg == m_fb)
{
int iHValue = 0;
int iSValue = 0;
int iLValue = ((float)m_fr)/ 255 * 100;
h = static_cast<BYTE>(iHValue);
s = static_cast<BYTE>(iSValue);
i = static_cast<BYTE>(iLValue);
return;
}
美国参议院
float max_value_of_rgb = GetMax( m_fiR, m_fsG, m_fhB );
float min_value_of_rgb = GetMin( m_fiR, m_fsG, m_fhB );
float fSumRGB =m_fiR + m_fsG + m_fhB ;
if( fSumRGB <= 0.0 )
fSumRGB = 0.001;
float I = (m_fiR + m_fsG + m_fhB) / 3;
float S = 1.0 - 3.0 * min_value_of_rgb / fSumRGB;
float H = acos( (( m_fiR - m_fsG ) + ( m_fiR - m_fhB ))/2 / sqrt( ( m_fiR - m_fsG )*( m_fiR - m_fsG ) + ( m_fiR -m_fhB ) * ( m_fsG - m_fhB)  + 0.0001 ) );
float fHAngle = H / PI * 180;
if( m_fsG < m_fhB )
fHAngle = 360 - fHAngle;
if( fHAngle > 360.0 )
fHAngle = 360.0;
int nHValue = fHAngle / 360 * 255;
int nSValue = S * 100;
int nLValue = I * 100;
h = nHValue;
s = nSValue;
i = nLValue;
}

本文发布于:2024-09-23 07:26:00,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/65566.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:阻抗测量
标签:模式   信号   波长   光线   吸收
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议