YUV与RGB互转各种公式

m0_37943064 2017-10-11 06:58:07
有几个公式是量化公式,方便硬件实现(verilog/vhdl).

公式:基于BT.601-6
tv_range : Y~(16-235) U ~(16-240) V~(16-240)
full_range : Y/U/V ~(0-255)
1.小数形式,full range
R = Y + 1.4075 * (V-128);
G = Y - 0.3455 * (U-128) - 0.7169*(V-128);
B = Y + 1.779 * (U-128);

Y = 0.299*R + 0.587*G + 0.114*B;
U = (B-Y)/1.772; (U~(-128-127))
V = (R-Y)/1.402;
或写为:
Y = 0.299*R + 0.587*G + 0.114*B;
U = -0.169*R - 0.331*G + 0.5 *B + 128; 注: +128 的含义是让UV的范围处于整数区间(0-255)
V = 0.5 *R - 0.419*G - 0.081*B + 128;

2.整数形式(减少计算量)full range
R= Y + ((360 * (V - 128))>>8) ;
G= Y - (( ( 88 * (U - 128) + 184 * (V - 128)) )>>8) ;
B= Y +((455 * (U - 128))>>8) ;
Y = (77*R + 150*G + 29*B)>>8;
U = ((131*R - 110*G - 21*B)>>8) + 128 ;
V = ((-44*R - 87*G - 131*B)>>8) + 128;

3. 量化后的公式( Y~(16,235) U/V ~(16,240) ) tv range
yuv --> rgb
R = 1.155*Y + 1.605 * V - 224
G = 1.168*Y - 0.393 * U - 0.823 * V+ 135.7
B = 1.168*Y + 2.028 * U- 277.8
rgb --> yuv
Y= ( 66*R + 128*G + 25*B)>>8 + 16
U= (112*R - 94*G - 18*B)>>8 + 128
V= (-38*R - 74*G + 112*B)>>8 +128
...全文
2118 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,425

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
  • 其他硬件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧