视频基础学习四——视频编码基础一(冗余信息)

news2024/11/22 16:03:33

文章目录

  • 前言
  • 一、编码压缩的原理
    • 1.空间冗余
      • 帧内预测
    • 2.时间冗余
      • 帧间预测
        • 运动估计
        • 运动补偿
    • 3.编码冗余
    • 4.视觉冗余
  • 二、压缩编码的流程
    • 1.编码器
    • 2.编解码流程
  • 总结


前言

上一篇文章介绍了视频帧率、码率、与分辨率。也介绍了为什么需要对视频进行压缩,因为720P、rgb24编码格式、25帧、1s的视频大小为
1280 ∗ 720 ∗ 3 / 1024 / 1024 ∗ 25 ∗ 1 = 65.75 M B 1280∗720∗3/1024/1024∗25∗1=65.75MB 12807203/1024/1024251=65.75MB
这无疑是很大的内存。

一、编码压缩的原理

视频编码就是为了去除视频帧之间大量的冗余信息,而视频图像中的冗余信息有以下几种:

  • 空间冗余:图像相邻像素之间有较强的相关性
  • 时间冗余:视频序列的相邻图像之间内容相似
  • 编码冗余:不同像素值出现的概率不同
  • 视觉冗余:人的视觉系统对某些细节不敏感
  • 知识冗余:规律性的结构可由先验知识和背景知识得到

压缩技术就是将这些冗余信息去掉,去除数据之间的相关性,包含帧内图像数据压缩技术、帧间图像数据压缩技术和熵编码压缩技术

下面就以这张动态图来进行介绍这几种冗余
在这里插入图片描述

1.空间冗余

我们从这个图片中选中一块区域进行放大,提取像素点在这里插入图片描述
可以看到,相邻像素点之间几乎全部一模一样,这个也就是空间上的相似性,空间信息的冗余。
那么如何进行压缩呢,这里就有一种办法叫做帧内预测

帧内预测

我们预测:在一帧当中,颜色在垂直方向上保持一致,这种预测意味着未知像素颜色与近邻像素相同,看下图
在这里插入图片描述
但是这种预测是错误的,因为该表单中,最右下角的像素颜色不是(255,255,51),而应该是(255,255,204),这个时候我们通过减去实际值,算出残差,这样的数据就更容易压缩
在这里插入图片描述
同样,我们可以通过这个残差预测距离这个残差相邻的数据是什么样的像素

2.时间冗余

时间冗余信息是发生在相邻帧之间的,比如下面一张图片。
在这里插入图片描述
这两张图片具有很大的相似,随着时间的改变,除了海绵宝宝动作在变,背景是一直都没有变化的。
在时间上就构成了像素的相关性,这个就是时间冗余,通过帧间预测的方法可以进行压缩这种冗余信息。

帧间预测

帧间预测是利用视频时域的相关性,使用邻近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。
帧间预测具有两大内容:运动估计(运动搜索、亚像素插值和运动矢量)、运动补偿

运动估计

运动估计是以当前图像的像素块在之前已编码的图像中寻找到最佳的一个匹配块。从而提取到当前图片的运动信息。

比如以当前帧减去上一帧(参考帧),留下的残差就可以视为一个匹配块,当然实际上是远比这要复杂的,最直接的方法是为每个像素指定一个运动向量,但是这种基于像素的运动表示法会有很高的数据量,为了降低这种复杂度,可以将图像分为不同大小的像素块,只有块大小选择合适,每个块的运动参数可以独立进行估计,这就是基于块的运动表示法

运动补偿

运动补偿:一种描述相邻帧(相邻在这里表示在编码关系上相邻,在播放顺序上两帧未必相邻)差别的方法,具体来说是描述前面一帧的每个小块怎样移动到当前帧中的某个位置去。

假使现在一个像素块在t时间坐标为x,t+1时间坐标在x+1,那么我们可以预测下一时间t+2该像素块在x+2位置。
在这里插入图片描述

3.编码冗余

这个纯纯是一种数据运算了,在视频基础学习二——图像深度与格式(RGB与YUV)这篇文章里面,曾介绍过YUV格式,也曾提到过YUV的出现可以大大减少编码存储内存,人眼对于Y分量也就是明度感知最为明显,对于UV分量反而不明显,所以就可以丢弃一些UV分量,而加大Y分量的数据,同时分析Y分量的频率进行压缩。

其中Y分量,也就是明度通过RGB进行转换为
Y = 0.299 R + 0.587 G + 0.114 B ; Y = 0.299R + 0.587G + 0.114B; Y=0.299R+0.587G+0.114B;

其中在编码中又把明度和RGB的关系进行了分级,叫做灰度级,通常分成了0~255个级别
在这里插入图片描述
那么灰度值怎么对于编码压缩提到了帮助呢?这里就用到的数学公式,有兴趣的可以看看博主这边从别的文章中进行摘录过来的

对于图像来说,可以假设一个离散随机变量表示图像的灰度级,并且每个灰度级(rk)出现的概率为pr
在这里插入图片描述

这里L是灰度级数,nk是第k个灰度级在图像中出现的次数, n是图像中的像素总数。如果用于表示每个rk值的比特数为 l(rk),則表达每个像素所需的平均比特数为:
在这里插入图片描述

就是说,将表示每个灰度级值所用的比特数和灰度级出现的概率相乘,将所得乘积相加后得到不同灰度级值的平均码字长度。如果某种编码的平均比特数越接近熵,則编码冗余越小。

4.视觉冗余

视觉冗余:人类的视觉系统由于受生理特性的限制,对于图像场的注意是非均匀的,人对细微的颜色差异感觉不明显。

上面说了人们对于一张图片的明度进行了分级,即灰度级,范围是0~255级,而人类的视觉一般分辨的能力只有26灰度等级,而一般的图像量化采用的是28灰度级。会存在视觉上的冗余,比如下面的图片

在这里插入图片描述
最左边的图显示了一张存在0~255种灰阶的图片,中间则是经过了量化为16种灰度级的图片,通过改进后,减少了假轮廓和颗粒后(IGS标准量化方法)生成的最右边的图像。

值得注意的是,这是一种不可逆的操作,必定会造成定量信息的损失

二、压缩编码的流程

综上所诉,编码器大概压缩过程和编解码器的流程就像下面两张图一样

1.编码器

代码如下(示例):

在这里插入图片描述

2.编解码流程

在这里插入图片描述


总结

其实这边文章并没有介绍实际编码应用中使用到的一些技术,而是偏向编码原理的一些知识,但是我个人还是认为知道这些知识还是非常有意义的,那么下一篇会介绍实际编码中的一些知识。

如果对您有所帮助,请帮忙点个赞吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1564435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【隐私计算实训营007——隐语SCQL的架构详细拆解】

1.SCQL Overview SCQL属于隐私保护的BI。 1.1 对于安全聚合查询语言的两种常见的技术方案 1.2 SCQL系统组件 SCDB 部署在可信第三方,负责将query翻译成密态执行图,下发给SCQLEngine,本身不参与计算 SCQLEngine 部署在数据参与方&#xff…

某音乐平台歌曲信息逆向之webpack扣取

逆向网址 aHR0cHM6Ly95LnFxLmNvbS8 逆向链接 aHR0cHM6Ly95LnFxLmNvbS9uL3J5cXEvc29uZ0RldGFpbC8wMDJkdzRndjFabWlHdA 逆向接口 aHR0cHM6Ly91Ni55LnFxLmNvbS9jZ2ktYmluL211c2ljcy5mY2c 逆向过程 请求方式:POST 逆向参数 sign zzbd8c72309rdslvlnjwk8pthj2lw462f12…

Java 设计模式系列:备忘录模式

简介 备忘录模式是一种软件设计模式,用于在不破坏封闭的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定…

微信小程序自定义弹窗组件

业务背景&#xff1a;弹窗有时字体较多&#xff0c;超过7个字&#xff0c;不适用wx.showToast. 组件代码 <view class"toast-box {{isShow? show:}}" animation"{{animationData}}"><view class"toast-content" ><view class&q…

20240402—Qt如何通过动态属性设置按钮样式?

前言 正文 1、点击UI文件 2、选择Bool型或是QString 3、设置后这里出现动态属性 4、这qss文件中绑定该动态属性 QPushButton[PopBlueBtn"PopBlueBtn"]{background-color:#1050B7;color:#FFFFFF;font-size:20px;font-family:Source Han Sans CN;//思源黑体 CNbor…

实验四 微信小程序智能手机互联网程序设计(微信程序方向)实验报告

请编写一个用户登录界面&#xff0c;提示输入用户名和密码进行登录&#xff1b; 代码 index.wxml <view class"user"> <form bindreset""> <view>用户名&#xff1a;</view><input type"text"name""/>…

UE4_动画基础_ 瞄准偏移1D(Aim Offset Blend Space 1D)

瞄准偏移1D基本上可以完成角色的向左看向右看或者向上看向下看&#xff0c;像混合空间1D一样只有一个轴向可用。 操作步骤&#xff1a; 1、新建第三人称模板项目。 2、右键——动画——瞄准偏移1D 选取骨骼 双击打开 3、瞄准偏移混合的是姿势&#xff0c;我们需要创建姿势。 …

FPGA高端项目:解码索尼IMX327 MIPI相机+图像缩放+视频拼接+HDMI输出,提供开发板+工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理自研HLS图像缩放详解Video Mixer…

库存超卖问题分析

3.5 库存超卖问题分析 有关超卖问题分析&#xff1a;在我们原有代码中是这么写的 if (voucher.getStock() < 1) {// 库存不足return Result.fail("库存不足&#xff01;");}//5&#xff0c;扣减库存boolean success seckillVoucherService.update().setSql(&quo…

R统计实战:详解机器学习Adaboost的操作步骤与应用

一、引言 机器学习是人工智能的核心领域之一&#xff0c;其重要性体现在其能够从数据中自动学习并改进的能力上。在实际问题中&#xff0c;机器学习已经被广泛应用于各个领域&#xff0c;包括但不限于金融、医疗、电子商务、社交网络等。例如&#xff0c;在金融领域&#xff0c…

论文笔记 - :DIGGING INTO OUTPUT REPRESENTATION FOR MONOCULAR 3D OBJECT DETECTION

Title: 深入研究单目 3D 物体检测的输出表示 Abstract 单目 3D 对象检测旨在从单个图像中识别和定位 3D 空间中的对象。最近的研究取得了显着的进展&#xff0c;而所有这些研究都遵循基于 LiDAR 的 3D 检测中的典型输出表示。 然而&#xff0c;在本文中&#xff0c;我们认为…

Flask Python:如何获取不同请求方式的参数

Flask中 如何获取不同请求方式的参数 前言一、get请求下1.1、路径中带有参数1.1.1、postman示例1.1.2、 flask代码实现1.1.3、 注意事项 1.2、在url后边带有参数1.2.1、postman示例1.2.2、 flask代码实现 二、post请求下2.1、form-data格式2.1.1、postman示例2.1.2、flask代码实…

【面试HOT200】数组篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试coding部分的&#xff0c;整理期间苛求每个算法题目&#xff0c;平衡可读性与代码性能&#xff08;leetcode运行复杂度均打败80%以上&#xff09;。 &#x1f970;来源&#xff1a;材料主要源于…

uniapp-打包app-图标配置

依次找到manifest->App图标配置&#xff0c;然后点击浏览&#xff0c;从本地文件夹中选择你们项目的logo&#xff0c;然后点击自动生成所有图标并替换&#xff0c;即可&#xff1a;

OpenHarmony实战:轻量级系统之安全子系统移植

安全子系统提供网络设备连接、认证鉴权等功能&#xff0c;依赖mbedtls实现硬件随机数以及联网功能。 由于每个厂商芯片硬件与实现硬件随机数的方式不同&#xff0c;需要适配硬件随机数接口。 移植指导 OpenHarmony提供了mbedtls的开源三方库&#xff0c;路径为“//third_par…

adobe stock会员开通付费付款订阅充值教程/adobe stock免费白嫖一个月

登录adobe stock的官网&#xff0c;点击你想要下载的视频&#xff0c;然后点击免费下载&#xff0c;我们点击免费试用按钮&#xff0c;可以看到非常贵&#xff0c;需要80美金一个月&#xff0c;用fomepay可以免费白嫖一个月 点击获取一张虚拟信用卡&#xff0c;就可以白嫖一个…

【Vscode】无法将“python,pip,node,npm等”识别为cmdlet...问题

问题出现场景 新换个电脑&#xff0c;然后重新安装了软件&#xff0c;又复现一次又一次“老生常谈”的问题。 解决方法 网络答案吧五花八门&#xff0c;我采取一个我的场景解决可行的方案&#xff0c; 首先我的场景是&#xff0c;环境变量&#xff0c;配置路径都是没有问题…

C#手术麻醉临床信息系统源码,自动生成麻醉记录单、各种手术麻醉相关医疗文书

麻醉临床信息系统&#xff0c;采用计算机和通信技术&#xff0c;实现监护仪、麻醉机、输液泵等设备输出数据的自动采集&#xff0c;采集的数据能够如实准确地反映患者生命体征参数的变化&#xff0c;并实现信息高度共享&#xff0c;根据采集结果&#xff0c;综合其他患者数据&a…

第五篇:3.4 用户归因和受众(User attribution and audience) - IAB/MRC及《增强现实广告效果测量指南1.0》

翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇广告效果测量定义和其他矩阵之- 3.2 可见性 &#xff08;Viewability&#xff09;第四篇广…

【Vue3源码学习】— CH2.7 Computed: Vue 3 计算属性深入解析

Computed: Vue 3 计算属性深入解析 1.计算属性的基本用法2. ComputedRefImpl 类深入解析JavaScript 中的 getter 函数 3. 计算属性的创建&#xff1a;computed 方法解析3.1 源码解析3.2 使用示例 4. 计算属性的工作原理5. 手动实现简化的计算属性6. 结语 在 Vue 3 的响应式系统…