目录
- RGB与YCbCr转换算法
- RGB与YCbCr色域介绍
- RGB模型
- YCbCr色域
- 简介
- YCbCr的应用
- YUV 和 YCbCr 的区别
- 色彩转换公式
- RGB 转 YCbCr 实现
- RGB 转 YCbCr 的 Matlab 实现
- RGB 转 YCbCr 的 FPGA 实现
- YCbCr 转 RGB 实现
- YCbCr 转 RGB 的 Matlab 实现
- YCbCr 转 RGB 的 FPGA 实现
RGB与YCbCr转换算法
RGB与YCbCr色域介绍
RGB模型
为了研究RGB模型,我们需要从光线的底层物理组成开始分析。光也属于电磁波,有着同样的特性,电磁波光谱图。
在电磁波波段中,400-700nm范围内为可见光波段,即人眼可见的光,大自然的色彩均是由可见光组成的。
红、绿、蓝三色被称为三原色。
饱和度均为100%的RGB能组合8种颜色,那么当RGB饱和度在0~100%(色彩深度)变化时,就能细分组合出更多的颜色。计算机处理的BMP图片为24bit的位图,即每一通道的颜色可以细分为28=256级别(RGB888),每一通道的色彩分辨率能达到256级,总共能综合出的颜色种类计算如下:
R的种类xG的种类xB的种类 = 28 x 28 x 28 = 16777216 ≈ 1600万
YCbCr色域
简介
YCbCr 由Y(Luminance)、Cb(Chrominance-Blue)和 Cr(Chrominance-Red)组成,其中 Y 表示颜色的明亮度和浓度,Cb 和 Cr 则分别表示颜色的蓝色浓度偏移量和红色浓度偏移量。
医学研究证明,人眼对视频的 Y 信号分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到图像质量的变化。如果只有 Y 信号分量,而没有 U、V信号分量,那么表示的图像就是黑白灰度图像。
YCbCr 格式可以细分成两种格式:tv range 格式与 full range 格式,主要区别如下:
-
tv range 格式
Y ∈ [16,235],Cb,Cr ∈ [16,240],主要是广播电视采用的数字标准。
-
full range 格式
Y,Cb,Cr ∈ [0,255],主要是 PC 端采用的标准,所以也称为 pc range 格式。
YCbCr的应用
- HDMI、DP等接口,UVC、BT656/709/1120等协议,都可以采用YCbCr格式进行传输,(YCbCr422/420 有效降低了传输带宽);
- 不管是H.264还是AVS、JPEG、MJPEG等格式,都采用YUV格式进行编码压缩;
- 很多机器视觉、图像处理、检测识别算法,不关注色彩,只需要在灰度域处理即可。
YUV 和 YCbCr 的区别
- YUV 是一种模拟信号,其色彩模型源于 RGB 模型,即亮度与色度分离,适合图像算法的处理,常应用于模拟广播电视中,其中 Y ∈ [0,1],U,V∈[-0.5,0.5]
- YCbCr 是一种数字信号,其色彩模型源于 YUV 颜色模型,是 YUV 压缩和偏移的版本(所谓偏移就是从 [-0.5,0.5] 偏移到 [0,1],因此计算的时候会加 128),在数字视频领域应用广泛,JPEG、MPEG、H.264/5、AVS等都采用 YCbCr 格式。我们通常广义讲的 YUV ,严格讲就是 YCbCr。
色彩转换公式
在进行颜色转换之前,需要明确 YCbCr 的格式范围,否则会导致偏色。
另外,图像传感器可以配置输出 RGB/YCbCr 格式图像,对应的手册一般也会给出转换公式,在 VO7725图像传感器手册中,RGB 与 YCbCr 的转换关系如下所示:
与前面介绍的 full range 格式下的转换公式比较还是有略微差别。
RGB 转 YCbCr 实现
RGB 转 YCbCr 的 Matlab 实现
- 读取图像
- 转换公式参数化设计
- 生成仿真测试源文件和验证文件
RGB 转 YCbCr 的 FPGA 实现
-
流水线延迟3个时钟周期
-
封装成 IP 例化界面如下所示: