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. Cocos2dx源码赏析(2)之渲染

    Cocos2dx源码赏析(2)之渲染 这篇,继续从源码的角度来跟踪下Cocos2dx引擎的渲染过程,以此来梳理下Cocos2dx引擎是如何将精灵等元素显示在屏幕上的. 从上一篇对Cocos2dx启动流 ...

  2. sprint2(第九天)

    今天是sprint2的最后一天,已经完成功能有可以实现点餐功能.菜品的添加和删减.菜品数量的增减.添加备注.查看订单详情.订单状态.提交订单.后厨可以查看订单信息,对菜品的状态进行操作,是否完成烹饪, ...

  3. [buaa-SE-2017]个人作业-Week2

    个人作业-Week2 一.代码复审Checklist 1.概要部分 1.1 代码能符合需求和规格说明么? 本次作业的需求可以分成基本的功能实现和大规模数据下程序的健壮性,以及少量的异常处理能力,也就是 ...

  4. 面向对象程序设计第三次作业-Calculator

    题目: 最终代码: Scan.h: Print.h: Calaulator.cpp: 解题过程 看到题目后,在查询之后明白了这是多文件的题目,然后通过翁凯老师的视频讲解知道了.h和.cpp文件的区别和 ...

  5. 信安实践——自建CA证书搭建https服务器

    1.理论知识 https简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HT ...

  6. JAVA自学日记——Part Ⅰ.

    和C++比较相似,Java同样是面向对象的设计语言,在基础的语句上有一些不大的差别,经过两天的学习,大概的了解了在eclipse中如何进行简单的编程,解决一些简单的问题,诸如在学习C时做过的“字符串倒 ...

  7. VS团队资源管理器(VS自带git)使用说明_使用VS自带git推送到远程存储库

    使用git存储库是相当好的习惯,每次码完代码就推送到远程存储库,万一不小心把本地代码搞废了,或者硬盘坏了,或者中了勒索病毒,本地代码丢失了还能从服务器上下载.我曾经就中了一次勒索病毒,本地电脑上的所有 ...

  8. mysql按日期分组统计数据

    最近在做一个招聘网时,需要显示一个月内企业招聘信息的发布数量,按日期分组统计,刚开始是直接从源数据库表里面进行group by,但这样子就出现日期不连续的问题了,我想要的效果是,若当天没有数据,则显示 ...

  9. iptables 开放端口

    #iptables -A INPUT -p tcp --dport 5000 -j ACCEPT #service iptables save

  10. java 数据结构与算法---栈

    原理来自百度百科 一.栈的定义 栈是一种只能在一端进行插入和删除操作的特殊线性表:它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数 ...