鹰眼视图——《图样,too simple》系列之二

举报
k3soft 发表于 2017/12/05 10:25:37 2017/12/05
【摘要】 引言:最近为FPGA验证做图片生成器,检索了多种图片格式的介绍文档,这里做一个总结,希望对刚接触数字图像处理的新同事有所帮助。本系列分三部分,介绍工作中常见的YUV、RAW等各种图片格式,不求艰深晦涩,但求简洁明了。 本文是第二部分:YUV?什么鬼?à so easy! 1 YUV简介 与RGB类似,YUV也是3个分量的组合,其中Y表示明亮度,也就是灰度值;U和V表示色

引言:最近为FPGA验证做图片生成器,检索了多种图片格式的介绍文档,这里做一个总结,希望对刚接触数字图像处理的新同事有所帮助。本系列分三部分,介绍工作中常见的YUVRAW等各种图片格式,不求艰深晦涩,但求简洁明了。

本文是第二部分:YUV?什么鬼?à so easy!

1      YUV简介

RGB类似,YUV也是3个分量的组合,其中Y表示明亮度,也就是灰度值;UV表示色彩(色度)。YUV等同于YCbCr,其中CbComponent blue的缩写,即蓝色分量,表示输入信号蓝色部分与亮度值之间的差异,CrComponent red的缩写,即红色分量,表示输入信号红色部分与亮度值之间的差异。

可见YUV实现了亮度信号Y与色度信号U/V的分离,可以独立存储和传输,另外可以根据人眼特性进行压缩采样(下采样),从而显著降低图像存储容量及传输带宽。

研究表明,人眼对亮度的敏感超过色度,色度信息减少一点,人眼几乎难以察觉。基于此,人们保留了每个像素点的亮度Y信息,对UV信息进行隔行或隔列采样(多像素共享一个U分量和V分量);按照不同的采样率,衍生出YUV4:4:4YUV4:2:2YUV4:2:0三种常见格式。

2      YUV444

YUV444格式是YUV4:4:4的简写,表示Y:U:V=4:4:4,即没有压缩采样,每一个像素的YUV三分量都得到保留。

3      YUV422

YUV422格式是YUV4:2:2的简写,表示Y:U:V=4:2:2,从字面上看,即相邻的4个像素点除了保留4Y分量,另外只保留2U分量和2V分量。实际表现在整幅图像上,就是每行像素中,隔列丢弃一组UV信息,下图中黑点表示像素点的Y分量,空心圆表示采用该像素点的UV分量:

5a02ac28f053f.png

按照YUV分量存储顺序不同,又分为YUYVUYVYYUV422P三种格式:

3.1      YUYV

为了一目了然,以2x4列像素点为例,以下为采样压缩前的数据,下标为像素点序号:

5a02ac28f0f67.png

上图中两个相邻的像素组成一个宏像素(Macro-Pixel),如红框所示为第一个宏像素。第一个宏像素经4:2:2采样压缩后,只保留Y0Y1U0V0,如果存储顺序为Y0U0Y1V0,这种存储格式就是YUYV(有的文档也称YUY2)。依此类推,上述8个像素采样后的数据排列如下:

5a02ac28f1831.jpg

相应的存储顺序为:Y0U0Y1V0  Y2U2Y3V2  Y4U4Y5V4  Y6U6Y7V6

进而可以扩展到1024*768分辨率及更大尺寸的YUYV图片。

3.2      UYVY

YUYV类似,只是每个宏像素内部YUV分量存储的顺序不同,按照UYVY的顺序存储,就叫UYVY格式(顾名思义)。

同样以上述2x4列像素点为例,则采样后的数据排列如下

5a02ac2901c6c.jpg     

相应的存储顺序为:U0Y0V0Y1  U2Y2V2Y3  U4Y4V4Y5  U6Y6V6Y7

进而可以扩展到1024*768分辨率及更大尺寸的UYVY图片。

3.3      YUV422P

上述两种格式都是packed存储方式,即每个宏像素点的YUV分量都是打包起来逐个包进行存储。YUV422P格式与此不同,这里的Pplanar的缩写,即平面存储方式,分Y/U/V三个平面分别存储:先连续存储所有像素点的Y,紧接着存储所有像素点的U,最后是所有像素点的V

同样以上述2x4列像素点为例,采样后的数据存储顺序为:

Y0Y1Y2Y3Y4Y5Y6Y7  U0U2U4U6  V0V2V4V6

进而可以扩展到1024*768分辨率及更大尺寸的YUV422P图片。

4      YUV420

YUV420格式是YUV4:2:0的简写,但并不表示整幅图像中Y:U:V的采样率为4:2:0,即并不表示丢弃了所有V分量。而是表示在某一行中丢弃所有V分量,此行内Y:U:V=4:2:0,但在紧邻的下一行中保留一半V分量,丢弃所有U分量,此行内Y:U:V=4:0:2。从整幅图上看,所有Y分量被保留,每个2x2小窗口构成一个宏像素(Macro-Pixel),共享一个UV分量,如下图所示,黑色实心圆代表Y,空心圆代表UV

5a02ac2902536.jpg

按照YUV分量存储顺序不同,又分为I420YV12NV12NV21四种格式:

4.1      I420

I420属于420P中的一种,即平面存储方式:YUV三分量分开独立存储。先存储所有Y,然后U,最后是V。同样以上述2x4列像素点矩阵为例:

5a02ac2902d87.jpg

采样后I420格式图片数据的存储顺序为:

Y0Y1Y2Y3Y4Y5Y6Y7  U0U2  V4V6

进而可以扩展到1024*768分辨率及更大尺寸的I420图片。

4.2      YV12

YV12也属于420P中的一种,即平面存储方式:YUV三分量分开独立存储。但UV分量存储顺序调换,先存储所有Y,然后V,最后是U。同样以上述2x4列像素点矩阵为例:

采样后YV21格式图片数据的存储顺序为:

Y0Y1Y2Y3Y4Y5Y6Y7  V4V6    U0U2 

进而可以扩展到1024*768分辨率及更大尺寸的YV12图片。

4.3      NV12

NV12属于YUV420sp中的一种,这里的spsemi-planar的缩写,即半平面存储方式:不再是3个平面,而是两个平面——Y平面和UV平面,分别独立存储Y分量和UV分量。先存储所有Y,然后UV平面中UV交错存储。同样以上述2x4列像素点矩阵为例:


采样后NV12格式图片数据的存储顺序为:

Y0Y1Y2Y3Y4Y5Y6Y7  U0V4U2V6

进而可以扩展到1024*768分辨率及更大尺寸的NV12图片。

4.4      NV21

NV21也属于YUV420sp中的一种,先存储所有Y,然后UV平面中UV交错存储,与NV12不同的是UV平面中UV分量先后顺序是颠倒的。同样以上述2x4列像素点矩阵为例:


采样后NV21格式图片数据的存储顺序为:

Y0Y1Y2Y3Y4Y5Y6Y7  V4U0V6U2

进而可以扩展到1024*768分辨率及更大尺寸的NV21图片。

5      Y8

最后提一下最简单的Y8格式,顾名思义,就是每个像素点只保存Y分量,每个Y分量用8bit位表示,取值为0-255。这与我们上篇提到的单通道256阶灰度图非常类似,是YUV色彩空间中的灰度图。

另外澄清一下,检索国外文献的时候要注意,他们称这种格式为Luma 8bits

 

OK,常用的YUV格式基本介绍完了,希望对大家有帮助。后面敬请关注《图样 too simple》系列之三:RAW10? 12? 14? bggr? 原来如此原始+土豪!

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。