图像视频基础

news2024/11/23 20:21:21

参考学习资料:https://blog.csdn.net/qq_28258885/article/details/116192244

文章目录

        • 图像
          • 颜色深度
          • 分辨率
        • 视频
          • 帧率
          • 比特率
          • 帧类型
          • 消除冗余的方法
            • 时间冗余(帧间预测)
            • 空间冗余(帧内预测)
          • 视频编码器
            • 1.分区
            • 2.预测
            • 3.转换
            • 4.量化
            • 5.熵编码
        • YUV模型
          • 色度子采样

图像

颜色深度

存储颜色的强度,需要占用一定大小的数据空间,这个大小被称为颜色深度。假如每个颜色的强度占用 8 bit(取值范围为 0 到 255,即 2 8 2^8 28),那么颜色深度就是 24(8*3)bit(因为RGB三个颜色),我们还可以推导出我们可以使用 2 24 2^{24} 224种不同的颜色。

分辨率

即一个平面内像素的数量。通常表示成宽*高

视频行业常见的分辨率,我们比较熟悉的360P (640x360)、720P (1280x720)、1080P (1920x1080)、4K (3840x2160)、8K (7680x4320)

我发现宽都是高的1.77777倍

视频

帧率

帧率(FRames rate)= 帧数(Frames)/时间(Time)

若单位时间为秒,则等同于 FPS (每秒帧数 Frames Per Second)。

比特率

即常说的码率

比特率 = 宽 * 高 * 颜色深度 * 帧每秒

例如,一段每秒 30 帧,每像素 24 bits,分辨率是 480x240 的视频,如果我们不做任何压缩,它将需要 82,944,000 比特每秒或 82.944 Mbps (30x480x240x24)。

  • 对于一个单独的一小时长的视频,分辨率为1080p 和 30fps 的视频

  • 每幅图片的大小为: 1920 x 1080 x 24 / 8 ≈ 5.93MB(图片大小计算公式=分辨率*位深/8)

  • 一小时的视频大小为:5.93 * 30 * 3600=640440MB ≈625GB

所以要压缩,消除冗余

为此,我们可以

利用视觉特性:和区分颜色相比,我们区分亮度要更加敏锐。

时间上的重复:一段视频包含很多只有一点小小改变的图像。

图像内的重复:每一帧也包含很多颜色相同或相似的区域。

我们的眼睛对亮度比对颜色更敏感

帧类型

在介绍去除冗余的方法前,需要了解帧类型。

I帧(帧内,关键帧)

P帧(预测)

P 帧利用了一个事实:当前的画面几乎总能使用之前的一帧进行渲染

实际情况中,一般使用一个I帧多个P帧。但是P帧不能太多,因为离上一个I帧越远,预测难度就越大,丢失的信息也就越多

B帧(双向预测)

引用前面和后面的帧去做更好的压缩

image-20230703184304329

消除冗余的方法
时间冗余(帧间预测)

image-20230704102443344

我们可以做个减法,我们简单地 0 号帧减去 1 号帧,得到残差,这样我们就只需要对残差进行编码

在这里插入图片描述

但我们有一个更好的方法来节省数据量。
首先,我们将0 号帧 视为一个个分块的集合,然后我们将尝试将 帧 1帧 0 上的块相匹配。我们可以将这看作是运动预测

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

在这里插入图片描述

我们预计那个球会从 x=0, y=25 移动到 x=6, y=26xy 的值就是运动向量进一步节省数据量的方法是,只编码这两者运动向量的差。所以,最终运动向量就是 x=6 (6-0), y=1 (26-25)

实际情况下,这个球会被切成 n 个分区,但处理过程是相同的。

帧上的物体以三维方式移动,当球移动到背景时会变小。当我们尝试寻找匹配的块,找不到完美匹配的块是正常的。这是一张运动预测与实际值相叠加的图片。

在这里插入图片描述

但我们能看到当我们使用运动预测时,编码的数据量少于使用简单的残差帧技术

在这里插入图片描述

空间冗余(帧内预测)

如果我们分析一个视频里的每一帧,我们会看到有许多区域是相互关联的

image-20230704102904343

image-20230704102915073

视频编码器

是什么?就是用于压缩或解压数字视频的软件或硬件

1.分区

image-20230704101825305

有许多原因,比如,当我们分割图片时,我们可以更精确的处理预测,在微小移动的部分使用较小的分区,而在静态背景上使用较大的分区。

通常,编解码器将这些分区组织成切片(slices )或条带(tiles),宏(或编码树单元)和许多子分区。
这些分区的最大大小有所不同,HEVC 设置成 64x64,而 AVC 使用 16x16,但子分区可以达到 4x4 的大小。

2.预测

一旦我们有了分区,就可以在它们之上做出预测。

  • 对于帧间预测,我们需要发送运动向量和残差
  • 对于帧内预测,我们需要发送预测方向和残差
3.转换
4.量化

有损的

5.熵编码

在我们量化数据(图像块/切片/帧)之后,我们仍然可以以无损的方式来压缩它。有许多方法(算法)可用来压缩数据。
熵编码技术是视频编码技术中基础性关键技术,在经典编码框架中处于系统末端,负责对编码过程中的变换系数、运动矢量等信息进行熵编码,并完成最终编码码流的组织。

熵编码目标是利用信息熵原理进行数据的最终压缩,去除信源符号在信息表达上的冗余。

YUV模型

有一种模型将亮度(LUMA)和色度(cb,cr)分离开,它被称为 YUV模型

我们的眼睛对亮度比对颜色更敏感

image-20230703181800235

色度子采样

一旦我们能从图像中分离出亮度和色度,我们就可以利用人类视觉系统对亮度比色度更敏感的特点,选择性地剔除信息。色度子采样是一种编码图像时,使色度分辨率低于亮度的技术。

image-20230703182100490

四个亮度像素共享一个色度像素

现代编解码器中使用的常用方案是: 4:4:4 (没有子采样), 4:2:2, 4:2:0,

image-20230703183649449

第二个参数代表第一行分成几块

第三个参数代表第二行分成几块

如果我们使用 YCbCr 4:2:0 我们能减少一半的大小

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

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

相关文章

软件测试基础教程学习4

文章目录 软件测试技术和方法4.1 静态测试和动态测试4.2 黑盒测试和白盒测试概述4.3 黑盒测试技术4.3.1 等价类划分4.3.2 边值分析4.3.3 因果图法4.3.4 正交实验设计法4.4.5 决策表驱动测试4.5.6 错误推荐法 4.4 白盒测试技术4.4.1 程序结构分析测试4.4.2 逻辑覆盖测试4.4.3 路…

JSP页面跳转刷新

问题: 当前的jsp页面触发ajax请求后,能够获得新的相应页面,但是浏览器上展示的依然是老的页面,数据不刷新 尝试使用页面重定向依然无效, 最后使用js的window.location.href, 让浏览器的页面url 重加载才ok function submitDate() {var date1 document.getElementById("d…

【uniapp】uniapp反向代理解决跨域问题(devServer)

背景介绍 前段时间,在拿uniapp开发的时候,出现了跨域问题,按理说跨域应该由后端解决,但既然咱前端可以上,我想就上了(顺手装个13) 首先介绍什么是跨域 出于浏览器的同源策略,在发…

docker-使用harbor搭建私有仓库

前提 安装docker-ce 安装docker-compose 安装 安装docker-ce # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce…

金蝶云星空无需代码连接钉钉考勤的方法

金蝶云星空用户使用场景: 企业的销售渠道人员出差之前需要在金蝶云星空上提交出差申请单,并等待审批通过;每当销售任务完成,金蝶云星空上的审批通过后,需要人力在考勤系统中手动修改考勤信息。看似比较简单的流程&…

基于Java+SpringBoot+vue的汽车改装方案网站设计与实现

博主介绍:✌擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案…

Bitbucket 新版本的安全限制

新版本的安全限制 是继续按照他给的第二个链接进入Bitbucket仓库后台添加App密码,也就是每个仓库需要单独的秘密码,这样的话就更加安全。 生产新密码: 这一坨务必要妥善保存,因为一旦点了关闭之后你就再也没有机会看到这个密码了…

Hive一分钟

分区和分桶 1.分区表是将大的表文件划分成多个小文件以利于查询,但是如果数据分布不均衡,也会影响查询效率。 2.桶表可以对数据进行哈希取模,目的是让数据能够均匀的分布在表的各个文件中。 3.物理上,每个桶就是表和分区目录里的…

14个在你的WordPress网站上使用OpenAI的最好方法(2003)

您是否想知道如何在您的WordPress网站上使用OpenAI和ChatGPT? OpenAI可以提供一切帮助,从为您的帖子生成元描述到撰写电子邮件销售文案。您可以在您的WordPress网站上使用OpenAI来节省时间、降低成本、改善您的搜索引擎优化和工作流程,并发展…

推荐大型电商项目【谷粒商城】

谷粒商城项目是尚硅谷研究院最新推出的完整大型分布式架构电商平台,技术全面、业务深入,全网无出其右。 技术涵盖:微服务架构分布式全栈集群部署自动化运维可视化CICD,对标阿里P6/P7,冲击40-60w年薪。 项目由业务集群…

吐血整理!可免费使用的国产良心软件分享,几乎满足你办公需求

在这个信息化时代,软件已经成为我们办公和生活的必备工具。然而,市面上的大部分国产软件都需要付费才能使用,给我们的经济负担增加了不少。幸运的是,国内有一些良心软件,它们质量上乘,功能强大,…

myCobot机器人ChatGPT应用:设计原则和模型能力

我们将 ChatGPT 的功能扩展到机器人,并通过语言直观地控制机器人手臂、无人机和家庭助理机器人等多个平台。 你有没有想过用你自己的话告诉机器人该怎么做,就像你对人类一样?只是告诉你的家庭助理机器人:“请加热我的午餐”&…

SpringBoot+ Dubbo + Mybatis + Nacos +Seata整合来实现Dubbo分布式事务

1.简介 “ 本文主要介绍SpringBoot2.1.5 Dubbo 2.7.3 Mybatis 3.4.2 Nacos 1.1.3 Seata 0.8.0整合来实现Dubbo分布式事务管理,使用Nacos 作为 Dubbo和Seata的注册中心和配置中心,使用 MySQL 数据库和 MyBatis来操作数据。 ” 如果你还对SpringBoot、Dubbo、Nacos…

数据湖真的能取代数据仓库吗?【SNP SAP数据转型 】

数据湖和数据仓库的存在并不冲突,也并不是取代的关系,而是相互的融合关系。 数据湖是近两年中比较新的技术在大数据领域中,对于一个真正的数据湖应该是什么样子,现在对数据湖认知还是处在探索的阶段,像现在代表的开源产…

(五)复函数积分的定义与性质

本文内容主要如下: 1. 复积分的概念1.1. 复积分的定义1.2. 复积分的存在性与计算1.3. 一个圆周上的重要积分公式1.4. 复积分的基本性质 1. 复积分的概念 1.1. 复积分的定义 定义: 如图,C为平面上一条光滑的简单曲线: z z ( t ) x ( t )…

GAD7980/CL1680/AD7980详解与开发说明

目录 1 概述2 GAD7980简介3 用法时序4 参数计算与参数解释4.1 采样率4.2 转换时间4.3 采集时间5 采样数值折算6 设计注意事项7 代码demo 1 概述 本文用于讲述GAD7980的功能与用法,以及其中一些参数的计算方法,用法时序,输出数值等等&#xf…

chatglm+langchain

目录 chatglmlangchain 1.1. 主要功能: 1.2. Langchain中提供的模块 1.3. Langchain应用场景 2.1. chatglm应用: 1.1. 基于单一文档问答的实现原理 chatglmlangchain GitHub - imClumsyPanda/langchain-ChatGLM: langchain-ChatGLM, local knowledge bas…

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 在线考试管理系统的设计与实现

一.项目介绍 学生在线考试系统分为三类角色 超管、老师、学生 超级管理员:维护考试管理、提供管理、成绩查询、学生管理以及教师管理 老师:维护考试管理、提供管理、成绩查询以及学生管理 学生:我的试卷…

Linux入门介绍-CentOS和VMware虚拟机下载安装

Linux 学自尚硅谷武晟然老师,结合老师课堂内容和自己笔记所写博文。 文章目录 Linux入门篇Linux概述Linux vs WindowsLinux安装CentOS的版本选择和下载VMware下载VMware安装创建虚拟机安装CentOS 入门篇 Linux概述 Linux是一个操作系统,一切皆文件&…

SpringMVC 程序开发:为什么要学SpringMVC?如何学SpringMVC?

文章目录 🎇前言1.MVC1.1 MVC 的定义1.2 MVC 与 Spring MVC的关系 2.为嘛要学Spring MVC?3.如何学习 Spring MVC?3.1 Spring MVC 创建和连接3.1.1 RequestMapping 注解介绍3.1.2 使用RequestMapping的参数修改请求方法3.1.3 GetMapping 和 Po…