|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1.引言
1 m- [# F% j' i" A! s+ O虽然现在RGB是计算机视觉最基本的三原色组成结构,但是YCbCr也有非常重要的角色,甚至却之不可,理由如下:& q6 S3 ^3 |2 `6 j1 ~- t7 D L
1)很多机器视觉,图像处理/检测识别算法,不关注色彩,只需要在灰度域处理即可;
" Q# B) M/ U' _$ O8 P2 h3 E2)包括HDMI接口,UVC协议,BT656/709/1120等,都有采用YCbCr格式进行传输,保证了相互转换的一致性,同时采用YCbCr422/420有效降低了传输带宽;
- S, q3 e- O+ g3)不管实H.264还是AVS,JPEG,MJPEG等都采用YUV格式进行编码压缩;
; b2 d, y+ _1 k- ZRGB转YCbCr虽然很基础,但是很重要(YCbCr转RGB雷同),怎样做更快也是一门学位。在本书开篇“图像处理硬件加速引擎”中,笔者引用conquer的《让你的软件飞起来》,从最初的计算机浮点运算120S,通过定点化、查找表等方式加速到了0.5S,提升了240倍,接着毕设介绍了硬件并行加速的思维,再次将计算时间缩短到了1ms左右,有一次提升了500倍,前后将近10万倍的加速,足以见得,硬件加速的重要性与意义。那么,废话少说,我们从新再梳理一遍。
) ^7 B" r, S% R0 E. U9 K i& c4 ?! j
2.YCbCr原理介绍:7 I) C/ ^1 [6 S3 {8 B
YCbCr 则是在世界数字组织视频标准研制过程中作为ITU - R BT.601 建议的一部分,其实是YUV经过缩放和偏移的翻版。YCbCr其由Y(Luminance)、Cb(Chrominance-Blue)和Cr(Chrominance-Red)组成,其中Y表示颜色的明亮度和浓度,而Cb和Cr则分别表示颜色的蓝色浓度偏移量和红色浓度偏移量。
/ s8 p8 B" f: ]. o2 n医学研究证明,人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。我们通常把YUV和YCbCr概念混在一起,但其实这两者还是有挺大的区别。7 I0 a% b# U& F% f$ v
首先,YUV是一种模拟信号,其色彩模型源于RGB模型,即亮度与色度分离,适合图像算法的处理,常应用于在模拟广播电视中,其中Y∈ [0,1] U,V∈[-0.5,0.5] 。
5 ^: t7 o; V) }) C' f# S* p* p而YCbCr是一种数字信号,其色彩模型源于YUV模型,它其实YUV压缩和偏移的版本(所谓偏移就是从[-0.5,0.5] 偏移到[0,1 ],因此计算时候会加128),在数字视频领域应用广泛,是计算机中应用最多的格式,包括JPEG,MPEG,H.264/5, AVS等都采用YCbCr格式,我们通常广义的讲的YUV,严格的讲应该就是YCbCr。! C P2 X3 D' A; R! [
2 W' t+ l o) q1 i& [+ x# f- x5 gYCbCr继续细分,有2种格式:tv range与full range,主要区别如下:5 P. f+ B' Y2 i4 R' T8 ^. |* \
1)tv range:Y∈[16,235] Cb∈[16-240] Cr∈[16-240] ,主要是广播电视采用的数字标准;
7 |$ O' z& x' S& \2)full range:Y、Cb、Cr∈[0-255] ,主要是PC端采用的标准,所以也称pc range8 O- q. |% h- S& a O; d
1 R3 P% z. o0 E7 d/ x1 |
关于为何tv range要量化到16-235,主要是由于YUV最终在模拟域传输,因此为了防止数模转换时引起过冲现象,于是将数字域限定在16-235。至于为什么选择16/235,可自行了解Gibbs Phenomenon吉布斯现象,这里不再继续展开。
, R3 l/ ?2 V- b- x所以RGB转YCbCr,得明确转tv range还是pc range;反之也可以通过像素值范围,去判断是tv range,还是pc range,甚至还得明确是什么格式范围,否则会导致偏色。如下图所示,为BT.601标准中YUV的的UV坐标模型(U越大越蓝,V越大越红):
# B, s+ @2 E" ~) ~6 k( D' s) b
& {* e6 Y. ^7 z! N, ?3 \9 `9 _" e# Y) W" X: `( i( N; }8 n: V# E
3.RGB转YCbCr硬件思维推导
7 P& o( M- }! X6 U0 m d' t约定,我们采用上一节中full range的YCbCr转RGB的公式进行推导。; x, B1 i8 z. S+ |+ j8 |
由于Y或者CbCr的计算类似,这里仅以Y为例进行推演,最原始的公式如下:, B7 t/ |4 y' `+ t' s
Y0 = R*0.299 + G*0.587 + B*0.114
9 ^5 j6 W7 q; y! f首当其冲的是干掉浮点,那么进行256倍扩大后,如下(防止溢出,得取不大于本身的最大整数,即直接*256后直接舍去小数)
0 \5 x0 N' m, sY1 = R*76 + G*150 + B*29
+ r4 J0 C0 Y% r! \由于扩大了256倍即2的8次方,那么对上述结果再右移8bit,得到最后的结果,如下(其中76+150+29=255<1024,不会溢出):
9 m! {( E# A+ G4 LY2 = (R*76 + G*150 + B*29)>>8
# t2 u: y% s' O其实在PC中,采用查找表理论上会比乘法器更快,但由于FPGA中,本身就有乘法器资源,因此可以直接快速计算;但如果用查找表,则需要768*18bit的RAM缓存,反而代价更大,因此综合评估,乘法器最优。
- ]; Z$ b5 r" U" f: h2 }2 N( `2 Y |
|