注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

斗天堂

douzsh还活着

 
 
 

日志

 
 

色度空间变换  

2008-04-23 10:10:04|  分类: 图像基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

HSV<=====>RGB

H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。
纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。
V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。
RGB转化到HSV的算法:
max=max(R,G,B)
min=min(R,G,B)
if R = max, H = (G-B)/(max-min)
if G = max, H = 2 + (B-R)/(max-min)
if B = max, H = 4 + (R-G)/(max-min)

H = H * 60
if H < 0, H = H + 360

V=max(R,G,B)
S=(max-min)/max

HSV转化到RGB的算法
if s = 0
R=G=B=V
else
H /= 60;
i = INTEGER(H)

f = H - i
a = V * ( 1 - s )
b = V * ( 1 - s * f )
c = V * ( 1 - s * (1 - f ) )

switch(i)
case 0: R = V; G = c; B = a;
case 1: R = b; G = v; B = a;
case 2: R = a; G = v; B = c;
case 3: R = a; G = b; B = v;
case 4: R = c; G = a; B = v;
case 5: R = v; G = a; B = b;


YUV<=====>RGB

                                |0.299   -0.148     0.615|  
  [Y   U   V]=[R   G   B]*|0.587   -0.289   -0.515|  
                                  |0.114     0.437   -0.100|

 public int[] rgb2yuv(int R,int G,int B){
 
  int yuv[] = new int[3];
  yuv[0] =(int)(0.299*R+0.587*G+0.114*B);
  yuv[1] = (int)(-0.147*R-0.289*G+0.437*B);
  yuv[2] = (int)(0.615*R-0.515*G-0.1*B);
  return yuv;
 }
 public Color yuv2rgb(int y,int u,int v){
  
  int R = (int)(y+1.14*v);
  int G = (int)(y-0.394*u-0.581*v);
  int B = (int)(y+2.028*u);
  if (R<0) R=0;
  if (G<0) G=0;
  if (B<0) B=0;
  if (R>255) R=255;
  if (G>255) G=255;
  if (B>255) B=255;
  
  Color rgb=new Color(R,G,B);
  return rgb;
 }


YIQ <======>RGB
public int[] rgb2yiq(int R,int G,int B){
 
  int yiq[] = new int[3];
  yiq[0] = (int)(0.299*R+0.587*G+0.114*B);
  yiq[1] = (int)(0.596*R-0.274*G-0.322*B);
  yiq[2] = (int)(0.212*R-0.523*G+0.311*B);
  return yiq;
 }
 public Color yiq2rgb(float y,float i,float q){
  
  int R = (int)(y+0.956*i+0.621*q);
  int G = (int)(y-0.272*i-0.647*q);
  int B = (int)(y-1.105*i+1.702*q);
  
  if (R<0) R=0;
  if (G<0) G=0;
  if (B<0) B=0;
  if (R>255) R=255;
  if (G>255) G=255;
  if (B>255) B=255;
  
  Color rgb = new Color(R,G,B);
  return rgb;
 }



  评论这张
 
阅读(154)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017