IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> YUV图像格式 -> 正文阅读

[移动开发]YUV图像格式

采样格式

YUV 4:4:4

图像格式为:(×为Y,圈为U或V)
在这里插入图片描述
每个Y对应一个U和一个V
采样码流为:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映射出的图像为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
与RGB占用的存储空间一样

YUV4:2:2

图像格式为:
在这里插入图片描述
每两个个Y对应一个U和一个V
采样码流为:Y0 U0 Y1 V1 Y2 U2 Y3 U3
映射出的图像为:[Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]
U和V各减少一半,可比RGB节省1/3空间

YUV4:2:0

图像格式为:
在这里插入图片描述

每四个Y对应一个U和一个V,2:1水平采样,2:1垂直采样。
采样码流为:(4:2:0和4:0:2交替进行)
Y0 U0 Y1 Y2 U2 Y3 (两个Y,一个U)
Y5 V5 Y6 Y7 V7 Y8(两个Y,一个V)
映射出的图像为:
[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]
U和V各减少3/4,可比RGB节省一半空间

YUV4:1:1

与YUV4:2:0相似,只是采样方式不同,采用4:1水平采样,垂直完全采样。
采样码流为:
Y0 U0 Y1 Y2 V2 Y3
Y5 U5 Y6 Y7 V7 Y8
映射出的的图像为:
[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]
[Y5 U5 V7] [Y6 U5 V7] [Y7 U5 V7] [Y8 U5 V7]

存储格式

平面格式(planar format)

先连续存储所有像素点的 Y,紧接着存储所有像素点的 U,随后是所有像素点的V,即:YYYYUUUUVVVV

打包格式(packed format)

每个像素点的 Y、U、V 是连续交错存储,即YUVYUVYUVYUV

格式类型

YUYV

属于YUV422,packed,数据格式为:Y0 U0 Y1 V0 Y2 U2 Y3 V2

UYVY

属于YUV422,packed,与YUYV排列格式相反:U0 Y0 V0 Y1 U2 Y2 V2 Y3

YUV422P

属于YUV422,planer,数据格式为:Y0 Y1 Y2 Y3 U0 U1 V0 V1

YUV420P

属于YUV420,planer,其中按照U和V的不同先后顺序,可分为YU12和YV12:

YU12

属于YUV420,planer,先存储U,再存储V:Y0 … Y7 U0 U1 V0 V1

YV12

属于YUV420,planer,先存储V,再存储U:Y0 … Y7 V0 V1 U0 U1

YUV420SP

属于YUV420,基于planer,但U、V分量交替排列,按照UV的先后不同,可分为NV12和NV21:

NV12(IOS中的模式)

属于YUV420,基于planer,UV交替排列,先存U,再存V:Y0 … Y7 U0 V0 U1 V1

NV21(Android中的模式)

属于YUV420,基于planer,UV交替排列,先存V,再存U:Y0 … Y7 V0 U0 V1 U1

IYUV、I420

即YUV420P,YU12格式

YUV与YCbCr、YPbPr

YPbPr是YUV基于缩放(scaled)和偏移(shift)所产生,而YCbCr是基于YPbPr信号进行量化得到。

YUV、YPbPr用于模拟系统,如彩电,YCbCr用于数字系统,如数字视频

YCbCr中的Y与YUV中的Y含义一致,Cb、Cr同样都指色彩,只是在表示方法上不同。

YCbCr是在计算机系统中应用最多的成员,其应用领域很广泛,JPEG、MPEG中用的YUV实际上是YCbCr。一般人们所讲的YUV大多是指YCbCr。

YCbCr中的Y指亮度,Cb指蓝色色度分量,Cr指红色色度分量。

RGB与YUV转换公式

YUV是由RGB推导计算而来的。基本公式为:
Y’ = kr R’ + (1-kb-kr)G’ + kb B’
U’ = B’-Y’ = -kr R’ - (1-kb-kr)G’ + (1 - kb)B’ //亮度与蓝色分量的差值
V’ = R’-Y’ = (1-kr)R’ - (1-kb-kr)G’ - kb B’ //亮度与红色分量的差值
其中kr,kb的取值大小取决于色彩空间标准
逆转换:
R’ = Y’ + (1-kr)/0.5 * V’
G’ = Y’ - 2kb(1-kb)/(1-kb-kr) * U’ - 2kr(1-kr)/(1-kb-kr) * V’
B’ = Y’ + (1-kb)/0.5 * U’

为了限制值域范围,需要对U和V的值进行缩放,于是:
Y’ = kr R’ + (1-kb-kr)G’ + kb B’
Pb = (Umax / (1 - kb)) * (B’ - Y’)
Pr = (Vmax / (1 - kr)) * (R’ - Y’)
其中Y~ [0, 1],U~ [-Umax, Umax], V~ [-Vmax, Vmax]

不同的色差空间标准,所规定的kb、kr权值不同
常用的标准有BT.601, BT.709(网络视频使用最多), BT.2020(用于HDR等广色域)等。根据值域范围,每个标准下面还可能有Full Range和Limited Range格式,如Full Range值域为[0, 255], Limited Range为Y ~ [16, 235], UV ~ [16, 240]。

BT.601标准

kr = 0.229
kb = 0.114
kg = 1 - kr - kb = 0.587
Umax = 0.5
Vmax = 0.5

RGB to YCrCb

将上述参数代入计算后:
Y = 0.299R + 0.587G + 0.114B
Pb = 0.564 * (B - Y) = -0.168736
R - 0.331264G + 0.5B
Pr = 0.713 * (R - Y) = 0.5R - 0.418688G - 0.081312*B

(JPEG使用的标准为601 Full Range,即上面的公式)
其中Y~ [0,1]; U,V~[-0.5,0.5]; R, G, B ~ [0, 1]

为了解决浮点精度问题,Y、Cb、Cr分量被scaled为8bit整数(uint8),其中Y~[0, 255], Cb/Cr ~[-128, 128]。但为了解决滤波后的过冲现象,Y分量被scale到[16, 235],Cb/Cr分量被scale到[16, 240]。并根据值域进行平移,保证各个分量为正数(8bit系统里一般是按照这个值域设置)。
于是:
Y = (235 - 16) * (0.299R + 0.587G + 0.114B) + 16
Cb = (240 - 16) * ( -0.168736
R - 0.331264G + 0.5B)+ 128
Cr = (240 - 16) * ( 0.5R - 0.418688G - 0.081312*B) + 128

化简后即为:
Y = 65.481 * R + 128.553 * G + 24.966 * B + 16
Cb = -37.797 * R - 74.203 * G + 112.0 * B + 128
Cr = 112.0 * R - 93.786 * G - 18.214 * B + 128

其中,上面公式的RGB~[0, 1]

若RGB ~[0, 255],需进行缩放,即RGB需除以255:(以Y为例)
Y = 65.481 * R / 255 + 128.553 * G / 255 + 24.966 * B / 255 + 16
为了方便计算,通常将分母设成256,并将系数乘以256 / 255,即:
Y = (65.481 * 256 / 255) * R / 256 + (128.553 * 256 / 255) * G / 256 + (24.966 * 256 / 255)* B / 256 + 16

于是各分量计算公式为:
Y = (65.738 * R + 129.057 * G + 25.064 * B) / 256
Cb = ((-37.945 * R - 74.494 * G + 112.439 * B) / 256) + 128
Cr = ((112.439 * R - 94.154 * G - 18.285 * B) / 256) + 128

以上即为 ITU-R BT.601中的转换公式
其中YUV的值域范围分别为[16, 235], [16, 240], [16, 240]
(Opencv 中的cvtColor使用的是上面的公式,一般渲染器里面也是使用的上述公式?)

YCrCb to RGB

根据上面的公式,对应的逆转公式为:
R = (298.082 * Y + 408.583 * Cr) / 256 - 222.921
G = (298.082 * Y - 100.291 * Cb - 208.120 * Cr) / 256 + 135.576
B = (298.082 * Y + 516.412 * Cb) / 256 - 276.836

BT.709

kb = 0.0722
kr = 0.2126
kg = 0.7152

RGB to YUV

Full Range:
Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
Cb = - 0.114572 * R - 0.385428 * G + 0.5 * B
Cr = 0.5 * R - 0.454153 * G - 0.045847 * B
其中RGB~[0, 1],YUV ~ [0, 1]

Limite Range:
Y = 46.559 * R + 156.629 * G + 15.812 * B + 16(乘(235-16),加16)
Cb = - 25.664 * R - 86.336 * G + 112 * B + 128(乘224,加128)
Cr = 112 * R - 101.730 * G - 10.270 * B + 128(乘224,加128)
其中RGB~[0, 1],Y ~ [16, 235], UV ~ [16, 240]

YUV to RGB

Full Range:
R = Y + 1.5748 * V
G = Y - 0.187324 * U - 0.468124 * V
B = Y + 1.8556
其中RGB~[0, 1],YUV ~ [0, 1]

BT.2020

kb = 0.0593
kr = 0.2627

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 18:16:18  更:2022-06-25 18:18:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 3:44:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码