1 YUV域介绍

根据三基色原理,任意一种色光F都可以用不同分量的R、G、B三色相加混合而成,即F = r [ R ] + g [ G ] + b [ B ],其中r、g、b分别为三基色参与混合的系数。当三基色分量都为0(最弱)时混合为黑色光;而当三基色分量都为k(最强)时混合为白色光。调整r、g、b三个系数的值,可以混合出介于黑色光和白色光之间的各种各样的色光。
       在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD摄像机进行摄像,然后把摄得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即Cr)、B-Y(即Cb),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YCbCr色彩空间表示。采用YCbCr色彩空间的重要性是它的亮度信号Y和色度信号Cb、Cr是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号,保证了信道兼容性。

CSC(color space convert):RGB与YCbCr颜色空间的转换,常用的色域空间有BT.601(SDTV,标清电视),BT.709(HDTV,高清电视),BT.2020(UHDTV,超高清电视),在不同的色域空间下,转换矩阵是不一致的。

色域表示显示设备能够显示的颜色范围,下图中马蹄形区域为人眼能看到的色彩区域,BT.601是标清视频使用的色域范围,BT.709和BT.2020分别对应高清和超高清视频的色域。

2 CSC转换矩阵

2.1 BT.601色域CSC

1 计算CSC转换后的Y分量(归一化)

EY = 0.299 ER + 0.587 EG + 0.114 EB  (其中ER、EG、EB范围为[0,1])

2 归一化下红色色差分量等于红色分量减去亮度分量,即Cr

Cr = (ER - EY) = ER - 299 ER - 0.587 EG - 0.114 EB = 0.701 ER - 0.587 EG - 0.114 EB  (Cr区间[-0.701,0.701])

对Cr归一化处理:

Cr = (ER - EY)/1.402 = 0.5 ER + 0.419 EG + 0.081 EB ; (Cr区间[-1, 1])

3 归一化下蓝色色差分量等于蓝色分量减去亮度分量,即Cb

Cb = (EB- EY) = EB - 0.299 ER - 0.587 EG - 0.114 EB = -0.299 ER - 0.587 EG + 0.886 EB (Cb区间[-0.886,0.886])

对Cb归一化处理:

CB  = (EB- EY)/1.772 = 0.169 ER + 0.331 EG + 0.5 EB; (Cb区间为[-1 , 1])

4 由于信号的边缘有其它用途,在实际往往使用窄动态limited格式。比如8bit信号,亮度分量的范围为16-235(共220个灰阶),色差分量的范围为16-240(共225个灰阶)。10bit信号,亮度分量的范围为64-940(共877个灰阶),色差分量的范围为64-960(共897个灰阶)。因此灰阶定点化后各分量如下:

Y   = 219 EY + 16     = 0.2568 * R + 0.5041 * G + 0.0979 * B + 16

Cb = 224 ECB + 128 = -0.1482 * R – 0.291 * G + 0.4392 * B + 128

Cr = 224 ECR + 128 = 0.4392 * R – 0.3678 * G – 0.0714 * B + 128

5 不考虑后面的offset偏移量,BT601_RGB2YCbCr的8Bit定点化后矩阵表示如下:

BT601_RGB2YCbCr =256* [ 0.2568    0.5041   0.0979   = [ 65.7408    129.0496   25.0624     =  [  66   129   25

-0.1482  -0.2910   0.4392        -37.9392   -74.4960     112.4352         -38   -74    112

0.4392    -0.3678  -0.0714]      112.4352  -94.1568    -18.2784]          112  -94   -18]

6 不考虑后面的offset偏移量,BT601_YCbCr2RGB的8Bit定点化后逆变矩阵表示如下:

BT601_YCbCr2RGB = inv(BT601_RGB2YCbCr) = 256 *[ 1.1644  -0.0001   1.5960  = [ 298        0   409

1.1644  -0.3917  -0.8130       298   -100 -208

1.1644   2.0173  -0.0001 ]      298   516       0]

2.2 BT.709色域CSC

1 计算CSC转换后的Y,Cb,Cr分量,转换如下:

Y  = 219 EY + 16 = ?(219/255) * (0.2126 R + 0.7152 G + 0.0722 B) + 16 = 0.1826 R + 0.6142 G + 0.062 B + 16

Cb = 224 ECb + 128 = -0.1006 R - 0.3386 G + 0.4392 B + 128

Cr = 224 ECr + 128 = 0.4382 R - 0.398 G + 0.0402 B + 128

2 不考虑offset偏移量,BT709_RGB2YCbCr的8bit定点化矩阵表示如下:

BT709_RGB2YCbCr = 256 * [ 0.1826  0.6142  0.062   = [ 47 157 16

-0.1006 -0.3386  0.4392     -26 -87 112

0.4382 -0.398  -0.0402]    112 -102 -10]

3 不考虑offset偏移量,BT709_RGB2YCbCr的8bit定点化逆矩阵表示如下:

BT709_RGB2YCbCr = 256 * [ 1.1644 0.0001 1.7969    = [ 298  0    460

1.1644 -0.2133 -0.5342      298 -55   -137

1.1644 2.1125 -0.0002]       298 541  0  ]

2.3 BT.2020色域CSC

1 计算CSC转换后的Y,Cb,Cr分量,转换如下:

Y  = 219 EY + 16     =(219/255) * (0.2627 R + 0.678 G + 0.0593 B) + 16                  =   0.2256 R + 0.5832 G + 0.0509 B + 16

Cb = 224 ECb + 128 = (224/255) * (-0.2627 R - 0.678 G + 0.9407 B) / 1.8814 + 128 = -0.1227 R – 0.3166 G + 0.4392 B + 128

Cr = 224 ECr + 128  = (224/255) * (0.7373 R?-?0.678 G?- 0.0593 B) / 1.4746 + 128 = 0.4392 R – 0.4039 G - 0.0353 B  + 128

2 不考虑offset偏移量,BT2020_RGB2YCbCr的8bit定点化矩阵表示如下:

BT2020_RGB2YCbCr = 256 * [ 0.2256 0.5832 0.0509   = [ 58 149 13

-0.1227 -0.3166 0.4392        -31 -81 112

0.4392 -0.4039 -0.0353]       112 -103 -9]

3 不考虑offset偏移量,BT2020_RGB2YCbCr的8bit定点化逆矩阵表示如下:

BT2020_YCbCr2RGB = 256 * [ 1.1632   0.0002     1.6794   = [ 298  0    430

1.1632   -0.1870   -0.6497        298 -48 -166

1.1634    2.1421    0.0008]       298 -48  -166]

图像处理之CSC色彩转换的更多相关文章

  1. 图像处理之CSC性能优化(源码)

    1 CSC基本实现 根据前一篇CSC转换的文档了解到,RGB与YUV的变换公式如下: YCbCr(256 级别) 可以从8位 RGB 直接计算,计算公式如下: Y = 0.299 R + 0.587 ...

  2. 图像处理之色彩转换(CCM)

    1 色彩校正原理 人眼对色彩的识别,是基于人眼对光谱存在三种不同的感应单元,不同的感应单元对不同波段的光有不同的响应曲线的原理,通过大脑的合成得到色彩的感知.  一般来说,我们可以通俗的用 RGB三基 ...

  3. PhotoShop 图像处理 算法 汇总

    不定期更新 ...... 直接点标题即可链接到原文. OpenCV 版:OpenCV 图像处理 图层混合算法: PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡)PS图层混合算法之二(线性 ...

  4. ISP图像处理&&相机系统

    如何理解 ISO.快门.光圈.曝光这几个概念? 摄影基础篇——彻底弄清光圈.快门与ISO 理解这三个参数各自都是如何控制进入的光线量: 快门速度一般的表示方法是1/100s.1/30s.2s: 小的“ ...

  5. 学习笔记(2)---Matlab 图像处理相关函数命令大全

    Matlab 图像处理相关函数命令大全 一.通用函数: colorbar  显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ col ...

  6. Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉

    Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉 1.1. 按照当前流行的分类方法,可以分为以下三部分:三部分 图像处理 图像分析 计算机视觉1 1.2. 图像处理需要 ...

  7. Atitit 图像处理的摩西五经attilax总结

    Atitit 图像处理的摩西五经attilax总结 1. 数字图像处理(第三版)1 2. 图像处理基础(第2版)(世界著名计算机教材精选)1 3. 计算机视觉特征提取与图像处理(第三版)2 4. Op ...

  8. Atitit 图像处理的心得与疑惑 attilax总结

    Atitit 图像处理的心得与疑惑 attilax总结 1.1. 使用类库好不好??还是自己实现算法1 1.2. 但是,如果遇到类库体积太大,后者没有合适的算法,那就只能自己开发算法了1 1.3. 如 ...

  9. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

随机推荐

  1. 金融科技行业 SDL(转载)

     都是一些检查项,值得借鉴,关键在于要能够落地 作者 沈发挺@美的金融科技下载打印版

  2. 图片人脸检测(OpenCV版)

    图片人脸检测 人脸检测使用到的技术是OpenCV,上一节已经介绍了OpenCV的环境安装,点击查看. 功能展示 识别一种图上的所有人的脸,并且标出人脸的位置,画出人眼以及嘴的位置,展示效果图如下: 多 ...

  3. linux命令系列 grep

    grep, egrep, fgrep - print lines matching a pattern SYNOPSIS grep [OPTIONS] PATTERN [FILE...] grep [ ...

  4. 互评Beta版本(Hello World!——SkyHunter)

    1 基于NABCD评论作品,及改进建议 SkyHunter这款游戏我很喜欢,小时候总玩飞机类的游戏,这款游戏我上课的时候试玩了,在我电脑上运行是很好玩的,音乐震撼,画面玄幻,富有金属音乐的味道,游戏内 ...

  5. Scrum Meeting 5 -2014.11.11

    放假过掉一大半.大家都努力赶着进度,算法实现基本完成.可能还有些细小的改动,但也可以统一进入测试阶段了. 今天叫了部分在校人员开了个小会.任务决定以测试为主,同时开始进行服务器的部署. 在之前尝试服务 ...

  6. BugPhobia展示篇章:学霸在线系统Alpha阶段展示

    0x00:序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet yo ...

  7. C# winForm调用WebService

    C#winForm调用WebService的远程接口 创建一个WebService工程用例 添加服务引用 添加webService服务地址 输入命名空间名称 主要代码 测试成功截图 工程代码下载 新建 ...

  8. linux下使用pip在虚拟环境下安装tensorflow-gpu

    1. 查看已安装包库 pip list 2. linux下下载虚拟环境 sudo apt-get install python-virtualenv 3.建立全新的virtualenv环境 virtu ...

  9. GIT的使用及心得

    先给大家个很棒的GIT使用教程链接http://blog.jobbole.com/78960/ 这个链接是我在学习使用GIT时看的教程博客,分享给大家,里面还有介绍SVN与GIT的区别 GITHUB上 ...

  10. 【CSAPP笔记】3. 浮点数

    回想起刚学C语言时,我对浮点数的印象大概是"能够表示小数"的数据类型.还死记硬背过例如什么"小数用double存,用%f输出"这类的话.实际上呢,浮点数可以用这 ...