前言

为了后续能更好的理解,I帧编码与P帧编码,所以笔者先对数字视频中的一些基础概念进行铺垫。后续比较复杂的帧内预测,与帧间预测理解起来就会相对容易些。

关于Matlab中h.264的main函数部分可以见下面的连接
(包含了如何输入一个视频,到输出一个比特流的整体框架)。

前文回顾: H.264压缩技术之总览(Overview)——Matlab源码解析.

视频基础

  • 前言
  • 视频采样
  • 色彩空间&色度抽样
  • 视频冗余
  • H.264压缩编码

视频采样

为什么要采样?

因为真实世界的自然场景在空间和时间上都是连续的,为了将他们表示成数字形式,所以要采样

采样主要分为四种类型:

  • 时间采样
  • 空间采样
  • 逐行采样(扫描)
  • 隔行采样(扫描)

我们先看时间采样。如下图:
相当于屏闪照相机,在时间间隔为t的区间,进行了5次拍摄。我们得到了一个视频序列Seq,那么这个序列就是时间采样的结果。

空间采样。先上图:

其实某一时刻拍摄下来的图像就是一个空间采样,当然不一定把这个男人的全貌都采下来,也可以是局部某一块。
我们把那个男人的图像放大,可以看到类似于块的结构(如红色框所示),其实这每个块就可以称之为:采样点
在图像层面上,亦称之为像素。

逐行采样&隔行采样 先上图
因为这两者的原理差不多,放在一块说了。
这里黑色块表示没有输出像素,彩色块表示已经输出了像素。
对于逐行采样:随着时间的推移(5ms——>10ms),整个屏幕上将“慢慢”地被彩色块填充。
对于隔行采样:随着时间的推移(5ms——>10ms),可能现在5ms处输出奇数行像素,10ms处输出偶数行像素,当这转换的频率足够快时,人眼是察觉不到黑色块的出现。

在那个带宽还不大的年达,逐行采样和隔行采样在一定程度上缓解了带宽压力。

逐行采样-小应用:光栅滚动技术:

曾经火爆一时的红白机游戏《F1》赛车竟然用的就是逐行采样+输出偏移,产生赛道弯曲的效果!

参考资料:敖厂长,《红白机F1赛车游戏画质逆天竟是障眼法》,2022-1-31.BV1XY41147m4

色彩空间&色度抽样

我们先来看色彩空间:

一般的图像都是由RGB组成的三通道,但是在图像处理方面,研究人员发现,人们对亮度敏感程度要高于色度。
那么有没有什么方法能够使得图像由亮度+色度的方式组成呢?

答案是:Yes

YCbCr是一种特殊的色彩空间,区别于色彩空间RGB,YCbCr就将图像的组成划分为:亮度+色度。

参考资料:掌芝士zzs ,《JPEG 有损压缩 离散余弦变换 DCT 一条视频讲清楚》,2021-06-19,BV17M4y1u7Ek

接下来看色度抽样:
前面说了,在图像处理层面使用更多的还是YCbCr类的色彩空间,那么有优势呢?相较于RGB。

答:在压缩层面效果显著

色度抽样的目的主要是为了压缩。
如何压缩?少拿出一点亮度分量即可!示意图如下,原本一个像素是由Y(亮度分量),Cb,Cr(色度分量组成,后续为了压缩,那么就在每个像素中少拿一些色度分量即可。

视频冗余

什么是冗余呢?笔者认为:能够预测到的信息就是冗余!(当然不一定准确哈),比如说,一个场景的背景部分是很少变化的,那么观看视频的人就可以预测到下一秒大概率背景还是这个。
关于视频冗余的概念繁多,下面简单举出几例:

参考资料:赵险峰,张弘等,《视频隐写与隐写分析》,科学出版社,2021.5

H.264压缩编码

那么什么是H.264压缩编码呢?
答:压缩编码就是去除冗余+熵编码的过程。

下图小举一例:假设一个视频序列是5帧,视频大小为10*10,每个采样点的大小为1bit,那么一个视频的大小就是500bit。
现在进行YCbCr:4:2:0采样,视频大小直接变成500/2=50bit
紧接着放入H.264编码框架,这5张视频帧,被编码之后,可能完整存在的只有1帧图像(250/5bit),另外4帧变成了一下残差信息和一些方向信息(50bit)。并且最后进行了哈夫曼编码(假设编码率=33%),最后的大小变成()250/5+50)*33%=33bit.

那么是如何除去冗余的呢?
我们如果能将这一帧作为参考(I 帧),下一帧来对比参考帧的位置变化,并记录这些变化不就OK了吗,没必要记录全部像素。那么相对于参考帧的下一帧称之为P 帧。
那么我们再从整体来看一下整个视频序列最后变成啥样了。

最后每一个视频序列都会转化为I,P,B帧的组合。为了方便网络传输。I,P,B帧会再进行压缩编码,生成比特流。我们在网络上进行传输的视频文件,就是这么来的。

参考资料:极客湾Geekerwan ,《【科普】“视频”是怎么来的?H.264、码率这些词又是什么意思?》,2018-12-04 ,BV1nt411Q7S6.

H.264压缩技术之视频基础(foundation of learning video)——Matlab源码解析相关推荐

  1. Android技术栈(五)HashMap(包括红黑树)与ArrayMap源码解析

    1 总览 本文会对 Android 中常用HashMap(有红黑树)和ArrayMap进行源码解析,其中 HashMap 源码来自 Android Framework API 28 (JDK=1.8) ...

  2. Python数据爬取之0基础小白实战(三)源码解析

    前两篇(一)软件安装.(二)初窥门槛我解决了软件版本不匹配的问题并学习关键技术.找到重要源码,完成了程序思路总体设计,本篇废话不多说,我们直接上源码. 任务描述 获取2015-2020年通过申请的国家 ...

  3. H.264压缩技术之总览(Overview)——Matlab源码解析

    写在前面 Abdullah A. Muhit等人在2012年发表的论文[1],[2].并发布了开源H.264 matlab版的代码.笔者会就着这套源码进行分解讲解.一方面为了加强自己的理解,另一方面也 ...

  4. 【Matlab系列】视频图像数字水印系统设计【含Matlab源码】

    Date: 2019.3.24 前言     数字水印技术一般用于版权认证.在实际使用中,嵌入水印的鲁棒性就显得非常重要.通常会采用各种方式进行攻击测试,比如加噪滤波,缩放.旋转.剪切.JPEG压缩等 ...

  5. 【目标检测】基于matlab GUI背景差分算法视频运动物体跟踪【含Matlab源码 1915期】

    一.背景差分法和帧间差分法的车辆运动目标检测简介 1 引言 运动目标检测是从图像序列中检测运动目标.通过运动目标检测可以得到图像中的运动目标,获取图像中的运动信息.运动目标检测在医学辅助诊断.航天航空 ...

  6. 基于ambarella安霸H.264编解码芯片的视频采集压缩系统

    概述: 利用ADI视频采集芯片作为前端信号采集,视频压缩采用H.264标准,采用ambarella芯片,能达到高画质,低码率,低功耗三大特性,为目前最佳的H.264压缩方案. 适用于采集VGA/YPb ...

  7. H.264/AVC技术进展及其务实发展策略思考

    随着NGN.3G及3G演进和NGBW等对视频.多媒体业务与网络应用的飞速发展需求,作为视频业务及存储应用核心技术的高效率 视频数字压缩编(译码)技术,愈来愈引起人们的关注,成为目前广播.视频与多媒体通 ...

  8. H.264编码技术(zz)

    转摘 http://www.360doc.com/content/06/1012/14/7551_228580.shtml 一.H.264的制定过程和应用场合 在制订完最初的H.263标准之后,ITU ...

  9. 基于IP的H.264关键技术

    一. 引言 H.264是ITU-T最新的视频编码标准,被称作ISO/IEC14496-10或MPEG-4 AVC,是由运动图像专家组(MPEG)和ITU的视频编码专家组共同开发的新产品.H.264分两 ...

最新文章

  1. JS如何深度复制对象和数组,避免指针变量引用修改值
  2. 线程同步初解---转载
  3. windows下安装whl文件
  4. python人工智能-Python之人工智能(一)
  5. 补充知识:三元运算和逻辑运算
  6. base64编码的学习和理解
  7. python拟合曲线误差分析_python曲线拟合不能给出合理的拟合结果
  8. c++读取json文件_[SpringMVC]-SpringMVC架构-07-SpringMVC文件上传
  9. oracle安装中桌面模式与服务器模式的去别
  10. linux常用命令 打开文件,【Linux】常用命令 lsof查看打开的文件
  11. 小技巧 ----- 枚举整数的每一位数字
  12. 台式电脑主板插线步骤图_主板电池怎么放电?电脑主板电池放电的方法
  13. 汇编学习--7.16--直接定址表
  14. ADMM算法求解二次项目标函数+l1正则项问题
  15. Android 常见的抓log方法总结
  16. Longest_consecutive_sequence
  17. 软件工程与软件开发模型、软件开发方法
  18. android-ultra-pull-to-refresh list,Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用
  19. android 远程控制服务,Android手机3389远程控制服务器 microsoft remote de
  20. 常用的15个国外网站

热门文章

  1. SpringBoot入门建站全系列(九)文件上传功能与下载方式
  2. 【项目笔记_手写笔】在51822 上移植SSD1306驱动
  3. 无车承运人平台线路定价问题
  4. 替代个人微信mac协议的sdk接口分享
  5. CISSP考试各考场可预约时间(11.04日更新)
  6. I2C的总线电容 总线的最大电容 400pF限制
  7. 4.4 使用曲线命令修复图像色偏问题 [原创Ps教程]
  8. 微信小程序 app.js中onLaunch中方法执行完毕后再执行index首页数据请求
  9. 如何用DOS命令修复移动硬盘
  10. [转]我想要的,简单生活。。。。