当前位置: 首页 > news >正文

JPEG图像的压缩标准(1)

分3个博客详细介绍JPEG图像的压缩标准,包含压缩和解压缩流程,熵编码过程和文件存储格式。

一、JPEG压缩标准概述

JPEG压缩标准由国际标准化组织 (International Organization for Standardization, ISO) 制订,用于静态图像压缩。JPEG标准包含有损量化压缩和无损编码压缩两种压缩方式,利用了不同视觉信息在人眼中的敏感程度差异,在取得更高的压缩性能的同时,也有着良好的图像视觉质量。JPEG有基于预测编码技术的无损压缩和基于DCT变换的有损压缩两种压缩格式,有霍夫曼编码和算术编码两种编码算法,包含渐进编码、分层编码、无损压缩编码和基于DCT的顺序编码四种编码模式。实际应用中使用最为广泛的是基于霍夫曼编码算法,DCT顺序编码模式的有损压缩格式,也是JPEG标准的基线模式,后续介绍的内容所使用的JPEG图像都是由基线模式生成的。

下图展示了空域图像经JPEG标准的压缩和解压缩流程与JPEG图像相互转化的过程。彩色空域图像经颜色空间转换和像素采样,由RGB格式转化成YCbCr格式存储,经离散余弦变换 (DCT) ,量化表量化,得到频域的量化DCT系数矩阵,使用ZiaZag扫描,顺序熵编码成为JPEG图像文件。

1.1、颜色空间转换与采样

在计算机系统中,空域图像通常以像素值矩阵存储,使用的是RGB颜色空间,其中,R代表红色,G代表绿色,B代表蓝色。直接存储完整的矩阵信息需要占用较大的存储空间,研究者发现人眼视觉系统对图像的亮度和色度信息敏感程度存在差异,对亮度信息比色度信息更为敏感。基于图像视觉质量考虑,可以通过损失部分色度信息换取更好的压缩性能,这也是JPEG图像采用YCbCr格式的初衷。YCbCr颜色空间中,Y代表亮度,Cb,Cr分别代表色度和饱和度(也可将Cb, Cr两者统称为色度),三者通常以Y,U,V来表示,即用 U 代表Cb,用 V 代表Cr,后续本文将以YUV指代YCbCr。在空域图像向JPEG格式转换的第一步,会将RGB颜色通道根据式1转换成YCbCr格式,同理,在JPEG图像转换为空域图像的最后一步,会将YCbCr颜色空间转变为RGB格式,如式2所示。

Y=0.299R+0.587G+0.114B \\ Cb=-0.169R-0.331G+0.5B\\ Cr=0.5R-0.419G-0.081B            (1)

R=Y+1.402Cr\\ G=Y-0.344Cb-0.714Cr\\ B=Y+1.722Cb\\                    (2)

在转换为YUV格式后,为压缩存储的矩阵信息,会根据相应的采样因子对U,V通道下采样,这是彩色图像压缩的第一步。目前支持JPEG格式的软件通常提供YUV411 和 YUV422两种采样方式。以YUV411的采样为例,水平和垂直采样因子=2:2,在每个2*2的像素矩阵上,3个颜色通道都有4个像素值,采样前共需要12字节存储。使用4:1:1采样后,Y分量全采样,U,V分量上只采样1个像素,只需要6个字节存储,具体采样方式如下图所示。在JPEG转换回空域图像过程中,对U,V分量上采样,Y分量的四个像素Y1,Y2,Y3,Y4共用U,V分量的采样像素U1,V1。由此可见,向下采样会丢失部分色度分量数据,使得空域图像和JPEG图像的转换过程不是可逆的,但其能够在人眼不易察觉的视觉失真范围内取得良好的压缩性能,节省存储空间,因此广泛应用于压缩格式图像和视频中。

1.2、DCT变换

DCT变换实现了空域像素与频域系数的相互转换,包含二维正向离散余弦变换 (Forward Discrete Cosine Transform, FDCT) 和二维反向离散余弦变换 (Inverse Discrete Cosine Transform, IDCT) 。对采样后的空域图像,首先将像素矩阵分成8×8的图像块,根据式3进行FDCT变换,得到对应的8×8频域系数矩阵。DCT变换不会压缩图像,但能将图像重要和不重要的信息分离,即将图像块的大部分能量集中在频域矩阵的左上方。8×8矩阵的第一个系数是DC系数,包含了图像块的大部分能量,其余63个系数表示为AC系数,包含图像的纹理信息。FDCT和IDCT变换分别如式3和4所示。

F(u,v)=\frac{1}{4}c(u)c(v)\sum\limits_{i=0}^{7}{\sum\limits_{j=0}^{7}{f(i,j)\cos \frac{(2i+1)u\pi }{16}}}\cos \frac{(2j+1)v\pi }{16}  (3)

f(i,j)=\frac{1}{4}\sum\limits_{u=0}^{7}{\sum\limits_{v=0}^{7}{c(u)c(v)F(u,v)\cos \frac{(2i+1)u\pi }{16}}}\cos \frac{(2j+1)v\pi }{16}  (4)

其中,

第一个部分就介绍这些,下次再介绍其余部分,包括量化、熵编码等部分。

相关文章:

JPEG图像的压缩标准(1)

分3个博客详细介绍JPEG图像的压缩标准,包含压缩和解压缩流程,熵编码过程和文件存储格式。 一、JPEG压缩标准概述 JPEG压缩标准由国际标准化组织 (International Organization for Standardization, ISO) 制订,用于静态图像压缩。JPEG标准包…...

数解 transformer 之 self attention transformer 公式整理

句子长度为n;比如2048,或1024,即,一句话最多可以是1024个单词。 1, 位置编码 可知,E是由n个列向量组成的矩阵,每个列向量表示该列号的位置编码向量。 2, 输入向量 加入本句话第一个单词的词嵌入向量是, 第…...

ubuntu22.04@laptop OpenCV Get Started

ubuntu22.04laptop OpenCV Get Started 1. 源由2. 步骤3. 预期&展望4. 参考资料 1. 源由 OpenCV在学校的时候接触过,不过当时专注在物理、研究方面,没有好好的学习下。 这次借后续视频分析刚性需求,对OpenCV做个入门的学习和研读&#…...

【Java】苍穹外卖 Day01

苍穹外卖-day01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示: 管理端-外卖商家使用用户端-点餐用户使用当我们完成该项目的学习,可以培养以下能力: 1. 软件开发整体介绍 作为一名软件开…...

Ivanti Pulse Connect Secure VPN SSRF(CVE-2023-46805)漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…...

GPT-4:比ChatGPT3.5好得多,但它有多好你知道么?

GPT-4简介 GPT-4是一款由OpenAI开发的人工智能语言模型,它是ChatGPT3.5的升级版。GPT-4拥有更强大的学习能力、更高的生成质量和更广泛的知识覆盖范围,被誉为人工智能技术的重要突破。 GPT-4与ChatGPT3.5的对比 1. 学习能力 GPT-4采用了更多的神经网…...

测试:JMeter如何获取非json格式的响应参数

JMeter如何获取非json格式的响应参数 在 JMeter 中获取非 JSON 格式的响应参数通常涉及使用后置处理器来提取这些参数。以下是一些常见的方法来获取不同类型的响应数据: 正则表达式提取器: 适用于提取文本、HTML、XML 等格式中的特定文本。使用正则表达…...

2024年刘谦魔术大揭秘,其中竟用到了约瑟夫环?

目录 前言 魔术过程 揭秘过程 结尾 前言 不知道昨天春晚时刘谦的魔术大家看了没有,相信大家跟我一样也很疑惑,所以爆肝一天我得出了结论。如果你觉得还不错的话,记得点赞收藏,分享给更多的朋友看。 魔术过程 整个魔术可以分…...

openssl3.2 - update debian12‘s default openssl to openssl3.2

文章目录 openssl3.2 - update debian12s default openssl to openssl3.2概述笔记回到debian12自带的openssl版本从源码编译安装最新版的openssl配置ssl访问END openssl3.2 - update debian12’s default openssl to openssl3.2 概述 在debian12虚拟机中编译了openssl3.2(ope…...

VUE2和VUE3区别对比一览

## Vue3总结 ### 官方文档 * [Vue3](https://v3.cn.vuejs.org/api/options*data.html) * [Vue2](https://vuejs.bootcss.com/api/) ### Vue3相对于Vue2的语法特性#### 1.获取数据 * vue2 javascript export default {data() {return {name: myName,}},mounted() {console.log(t…...

Linux - updatedb 命令

1. 功能 updatedb 命令用来创建或更新slocate命令所必需的数据库文件。updatedb 命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入 slocate 数据库文件中。 补充说明:slocate 本身具有一个数据库&#xff…...

云计算市场分析

目录 一、云计算市场概述 1.1 概述 二、国外云计算厂商 2.1 亚马逊AWS 2.2 微软AzureAzure 2.3 Apple iCloud 三、国内云计算厂商 3.1 阿里云 3.2 腾讯云 3.3 华为云 3.4 百度智能云 一、云计算市场概述 1.1 概述 云计算从出现以来,其发展就非常迅速。以…...

前端JavaScript篇之call() 和 apply() 的区别?

目录 call() 和 apply() 的区别? call() 和 apply() 的区别? 在JavaScript中,call()和apply()都是用来改变函数中this指向的方法,它们的作用是一样的,只是传参的方式不同。 call()方法和apply()方法的第一个参数都是…...

Java设计模式大全:23种常见的设计模式详解(三)

本系列文章简介: 设计模式是在软件开发过程中,经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合,可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在设计和编码过程中的指导,它用于…...

汇编语言程序设计(二)十六位汇编框架、子程序与堆栈

寄存器 如下是16位通用寄存器,存储在cpu硬件中 AX 返回值 AX寄存器分为两部分 AH和AL AH 高8位 存储功能号 AL 低8位 存储返回码 以下是一个AX寄存器应用: mov ax,4c00h 4c给高位AL,00低位AL,16进制要以h结尾 BX CX 计数…...

K8S之标签的介绍和使用

标签 标签定义标签实操1、对Node节点打标签2、对Pod资源打标签查看资源标签删除资源标签 标签定义 标签就是一对 key/value ,被关联到对象上。 标签的使用让我们能够表示出对象的特点,比如使用在Pod上,能一眼看出这个Pod是干什么的。也可以用…...

网络请求库axios

一、认识Axios库 为什么选择axios? 功能特点: 在浏览器中发送 XMLHttpRequests 请求在 node.js 中发送 http请求支持 Promise API拦截请求和响应转换请求和响应数据 补充: axios名称的由来? 个人理解没有具体的翻译. axios: ajax i/o system 二、axios发送请求 1.axios请求…...

程序设计语言的组成

程序设计语言的组成 程序设计语言基本上由数据、运算、控制、传输组成 数据成分 数据是程序操作的对象,具有存储类别、类型、名称、作用域和生存期等属性 从不同角度可将数据进行不同的划分。 数据类型的分类如下: 按程序运行过程中数据的值能否改…...

论文精读的markdown模板——以及用obsidian阅读网页资料做笔记

# The Investigation of S-P Chart Analysis on the Test Evaluations of Equality Axiom Concepts for Sixth Graders Tags: #/unread 本体论: 背景起源和发展 包含要素 # # # 可关联要素 # # # 逻辑 意义: 方法论: 方法论是一…...

LCP 30. 魔塔游戏

LCP 30. 魔塔游戏 难度: 中等 题目: 小扣当前位于魔塔游戏第一层,共有 N 个房间,编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪物造…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...