什么是4:4:4、4:2:2、4:2:0?了解图像压缩取样的方式

我们经常会看到4:4:4、4:2:2、4:2:0这样的字眼,比如你的5D拍摄的视频是4:2:0取样压缩的,又比如QuickTime的ProRes422格式,或者专业摄影机拍摄时是以4:4:4取样的。视频压缩通常被认为是数字格式特有的概念,但早在模拟信号时代就有了,数字格式的压缩只是变得更复杂了而已。在这个文章中,我们来看看什么是4:2:2、4:1:1和4:2:0色度取样。

取样的概念

视觉专家很早以前就知道,人眼对亮度分辨率的敏感度高于对色彩分辨率的敏感度。

这就是早期模拟和数字压缩形式的主要动因。视频信号会分解为亮度和色度,这两个是组成色彩的元素,这类似于图像可以分解为红、绿、蓝三个元素。亮度和色度元素被称为YUV(模拟信号)或YCbCr(数字信号)而不是RGB。

一旦被分开,色度分辨率会通过一个叫做“色度取样”的步骤被减半或更多。结果就是在同样的广播带宽情况下,视频信号能呈现更多的细节,这是因为亮度元素对视频信号的贡献更大。

原始图像

色度取样后

这个技术也是很容易实现的,在解码时也不需要进行太多处理。基于这些原因这个方法在今天仍然被广泛的成功使用。

它是如何工作的

早期的显示器是以逐行扫描每个横线上的像素来显示图像的,通常是从顶部到底部快速连续的扫描。在每条线被扫描时,色度数值的传送频率比亮度低。

尽管现代的显示设备不是这种工作模式,扫描线的概念依然很重要,因为色度取样的方式是水平的。一条线被扫描时传递的亮度值和色度值间的比率常用来描述各种取样方式。这个比率通常基于亮度值,然后以4:X:Y的形式描述,X和Y是每两个色度通道中的数值的相对数量。下面的例子中体现了这些比率是如何影响一个4x2像素图像的分辨率。

亮度分辨率

色度分辨率4:4:4

色度分辨率4:1:1

色度分辨率4:2:0

使用标准的命名规则,4:2:2意味着每个横向的扫描线每4个亮度值对应两个色度值。简单的,4:1:1意味着每4个亮度值对应1个色度值,4:4:4意味着色度值不进行二次采样。不过这不是完全连续的,4:2:0会以1个色度值对应四个亮度值,对于第一个色度元素有两个取样值,第二个色度元素则不进行取样,这不能产生完整的彩色图像。实际当中,4:2:0意味着每条扫描线有两个色度取样,只对隔行进行取样。

压缩失真

由于色度取样有效的减少了色彩分辨率,在色彩过渡较锐利的边缘体现较明显。下面的例子展现了在8x8的图像中压缩后的样子。

原始4:4:4

色度取样4:2:2

色度取样4:1:1

色度取样4:2:0

副作用通常是减少细节处颜色的饱和度。通常这个不会减少大个物体内的颜色饱和度,如果这些物体含有精细的色彩图案,压缩后会较明显。下面的这种色彩图案就很容易受压缩的影响:

原始

4:2:2

4:1:1

4:2:0

不过,压缩效果的力度很大程度上取决于细节的类型。下个例子中空间距离也是很近的,但是类似颜色的屋顶压缩前后的差别就很细微。

原始

4:2:2

4:1:1

4:2:0

上面的各种取样方式中,请注意看屋顶的红色边缘处,竖直的红色烟囱处,红色的窗框,以及上面和下面的屋顶上排列的斜线。最明显失真就是这些区域的颜色饱和度降低了。还能注意到各种采样类型对横向与纵向颜色细节的影响是不同的。

总结

尽管从早期视频采样到现在,色度取样已经是一种简单有效的压缩技术,但是它会产生明显的失真。数字技术那是起也变得更复杂。不过取样只是简单的减少图像的色彩分辨率的宽度,现代数字编码能够分析图像内容然后决定如何优先处理细节。举例来说,现代数字采样,能够对低亮度、低饱和度以及细节度低的区域区别对待。

消费者的眼光也变得更犀利,对图像质量的要求也越来越高。对于4:2:0压缩方式的DVD,蓝光碟成为了趋势。最后,在进行现代数字编码时,为其提供4:4:4采样的数据,能极大程度的改善编码后的图像质量。

在最近十年中,视频工程师发现人眼对色度的敏感程度要低于对亮度的敏感程度。在生理学中,有一条规律,那就是人类视网膜上的视网膜杆细胞要多于视网膜锥细胞,说得通俗一些,视网膜杆细胞的作用就是识别亮度,而视网膜锥细胞的作用就是识别色度。所以,你的眼睛对于亮和暗的分辨要比对颜色的分辨精细一些。正是因为这个,在我们的视频存储中,没有必要存储全部颜色信号。既然眼睛看不见,那为什么要浪费存储空间(或者说是金钱)来存储它们呢?
   像Beta或VHS之类的消费用录像带就得益于将录像带上的更多带宽留给黑—白信号(被称作“亮度”),将稍少的带宽留给彩色信号(被称作“色度”)。
   在MPEG2(也就是DVD使用的压缩格式)当中,Y、Cb、Cr信号是分开储存的(这就是为什么分量视频传输需要三条电缆)。其中Y信号是黑白信号,是以全分辨率存储的。但是,由于人眼对于彩色信息的敏感度较低,色度信号并不是用全分辨率存储的。
  色度信号分辨率最高的格式是4:4:4,也就是说,每4点Y采样,就有相对应的4点Cb和4点Cr。换句话说,在这种格式中,色度信号的分辨率和亮度信号的分辨率是相同的。这种格式主要应用在视频处理设备内部,避免画面质量在处理过程中降低。当图像被存储到MasterTape,比如D1或者D5的时候,颜色信号通常被削减为4:2:2

  其次就是4:2:2,就是说,每4点Y采样,就有2点Cb和2点Cr。在这种格式中,色度信号的扫描线数量和亮度信号一样多,但是每条扫描线上的色度采样点数却只有亮度信号的一半。当4:2:2信号被解码的时候,“缺失”的色度采样,通常由一定的内插补点算法通过它两侧的色度信息运算补充。每个象素都有与之对应的亮度采样,同时一半的色度采样被丢弃,所以我们看到,色度采样信号每隔一个采样点才有一个。当着张画面显示的时候,缺少的色度信息会由两侧的颜色通过内插补点的方式运算得到。就像上面提到的那样,人眼对色度的敏感程度不如亮度,大多数人并不能分辨出4:2:2和4:4:4颜色构成的画面之间的不同。
  色度信号分辨率最低的格式,也就是DVD所使用的格式,就是4:2:0了。事实上4:2:0是一个混乱的称呼,按照字面上理解,4:2:0应该是每4点Y采样,就有2点Cb和0点Cr,但事实上完全不是这样。事实上,4:2:0的意思是,色度采样在每条横向扫描线上只有亮度采样的一半,扫描线的条数上,也只有亮度的一半!换句话说,无论是横向还是纵向,色度信号的分辨率都只有亮度信号的一半。举个例子,如果整张画面的尺寸是720*480,那么亮度信号是720*480,色度信号只有360*240。在4:2:0中,“缺失”的色度采样不单单要由左右相邻的采样通过内插补点计算补充,整行的色度采样也要通过它上下两行的色度采样通过内插补点运算获得。这样做的原因是为了最经济有效地利用DVD的存储空间。诚然,4:4:4的效果很棒,但是如果要用4:4:4存储一部电影,我们的DVD盘的直径至少要有两英尺(六十多厘米)!

转自:http://www.vmovier.com/45052?from=backstage_left
           http://blog.sina.com.cn/s/blog_558a7e5d01000cwv.html

什么是4:4:4、4:2:2、4:2:0?了解图像压缩取样的方式相关推荐

  1. 从言行合一到知行合一

    本篇记录突然的随想,偶尔停留 2022-01-17 rest不只是一个简单的api约束分享一本rest小手册,如何把东西变得 RESTful! 2021-12-06 规划 未来编程.   未来需要什么 ...

  2. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  3. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  4. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  5. 程序主动进行电话短信报警,自定义电话、短信、钉钉报警通知

    程序主动进行电话短信报警,自定义电话.短信.钉钉报警通知 一. 规则说明 这里我们要利用到阿里云的云监控的手段,有一个叫做事件监控的东西,可以通过自定义事件上传来进行监控报警. 流程: 程序发现错误 ...

  6. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  7. mysql并发更新数据,多用户并发修改数据解决方案。

    mysql并发更新数据,多用户并发修改数据解决方案. 在系统中,有一些如余额.资产.积分的数据,是要保证数据一致性的.如,一个人使用两个设备同时进行消费操作,如何保证数据一致性的问题. 我们一起来思考 ...

  8. docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name

    docker 报错: Error response from daemon: Cannot restart container hello: driver failed programming ext ...

  9. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  10. mongo报错:not authorized on bb to execute command { create: \“xxx\“...}

    mongo报错: {"ok" : 0,"errmsg" : "not authorized on bb to execute command { cr ...

最新文章

  1. springcloud是什么_阿里P8道出,入职阿里必会199道SpringCloud面试题,你能掌握多少?...
  2. 3.4.2 停止等待协议
  3. VSTS : 在性能调优中找到瓶颈所在
  4. .NET Core项目部署到linux(Centos7)
  5. Ubuntu修复Fix Busybox Initramfs错误
  6. BZOJ1453: [Wc]Dface双面棋盘
  7. python中if有几种使用方式_python 中if-else的多种简洁的写法
  8. BCB中与路径文件名相关的几个函数!
  9. 洞泾机器人园区地址_2020年4月上海市北新泾商圈写字楼市场租赁情况
  10. SSIS数据转换器及字符转换器使用
  11. Spring的运行原理
  12. amazon aws 亚马逊云服务概述
  13. 17计算机七班班级活动,2017班级主题活动方案设计
  14. poj1061青蛙的约会
  15. ITRON的任务管理
  16. VS Code 网易云音乐插件 没有声音 无法播放的解决办法
  17. idea莫名其妙打不开了怎么办
  18. Sqlserver 生僻字
  19. 苹果cms模板_苹果cms什么模板好?
  20. 如何给自己的网站接入谷歌联盟

热门文章

  1. 计算机毕业设计net中医康养会员服务信息管理平台(系统+数据库+源码+文档)
  2. 批规范化 Batch Normalization
  3. 如何回答「为什么想做产品经理」【面试核心问题3】
  4. php 时间加法函数_PHP中时间加减函数strtotime用法分析
  5. rust怎么拆除墙壁指令_腐蚀RUST指令大全
  6. 新人成长:实习一个月感悟
  7. 2022-2028年中国移动电商行业深度调研及投资前景预测报告
  8. 我的第一次知识图谱问答
  9. 服务器cpu怎么选,E5-2670 or i9-9900K
  10. python将三位数分离(format格式)_Python格式函数,python,之,format