jpeg压缩原理简述

news2024/11/17 3:50:16

一、色彩空间转换(RGB→YCrCb)
这一步没有数据删除,是可逆的步骤

YCbCr 是在世界数字组织视频标准研制过程中作为ITU - R BT1601 建议的一部分,其实是YUV经过缩放和偏移的翻版。其中Y与YUV 中的Y含义一致, Cb , Cr 同样都指色彩, 只是在表示方法上不同而已。在YUV家族中, YCbCr 是在计算机系统中应用最多的成员,其应用领域很广泛,JPEG、MPEG均采用此格式。一般人们所讲的YUV大多是指YCbCr。

Y = 0,299R + 0.587G + 0.114B

Cb = -0.1687R - 0.3313G + 0.5·B+128

Cr = 0.5R - 0.4187G - 0.0813B+128

注:有的地方写的Cb和Cr的转换不需要+128,亲测需要加,不然会出现色彩混乱

转换代码

二、色度缩减取样
YUV(YCbCr)采样格式:

(1)YUV444:没有缩减色度取样每四个像素中Y分量 U分量 V分量都是4,平均每个像素3字节(24位),相比RGB几乎没有压缩

(2)YUV422:每四个像素4个Y分量,2个U分量,2个V分量;采样时相邻两个像素一个丢弃U分量,一个丢弃V分量;平均每个像素2字节

(3)YUV420:每四个像素4个Y分量,1个U分量,1个V分量;采样时保留全部Y数据,一行丢弃全部V数据,保留一半U数据;下一行丢弃全部U数据,保留一半V数据

三、离散余弦变换(DCT)
DCT详解:后续编写

把整个图像分成若干个8*8的像素区域,称为区块,每个区块64个像素

在JPEG压缩过程中,经过颜色空间的转换,每一个8X8的图像块,在数据上表现为3个8X8的矩阵,紧接着我们对这三个矩阵(分别对应Y Cb Cr)做一个二维的DCT转换,二维的DCT转换公式为:
在这里插入图片描述

经过DCT变换这个8*8区域的能量(相对连续的像素)全部集中在了左上角,右下角是我们可以舍弃的部分(像素变化边缘部分)

注:这一步仍然是可逆的,我们虽然经过了DCT变换,但是并没有造成数据损失

四、量化
上一步DCT我们可以得到三个表,分别对应Y Cb 和Cr,接下来我们对这三个表进行量化,也就是舍去右下角的一部分数据

量化的过程我们需要用到标准量化表,亮度和色度的量化表不同,所以我们需要用到两张表
在这里插入图片描述

我们分别用第三步得到的表,去除以量化表对应位置的数据(取整)比如:一张亮度表可以量化成这样:

在这里插入图片描述

可以看到,一大部分数据变成了0,这非常有利于后面的压缩存储。

注:对量化表乘上不同的系数可以实现不同程度的量化

五、进行编码
把上一步得到的量化后的数据,进行Z字型编码:

在这里插入图片描述

这么做的好处是可以使我们编码的后半部分出现大量的连续的0,这样就可以使用游程编码简化

然后把我们得到的序列进行哈夫曼编码,编码后就可以进行传输了

六、重构图片
霍夫曼解码,解析获得常数表,把之前之字形得到的数据放到表内
将得到的数值乘以量化表,然后用得到的数据乘以对应的基础图象,基础图象的叠加的
把色度和亮度转换为RGB色彩空间

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

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

相关文章

Android本地服务器NanoHttpd配置Https双向认证

一、 了解数字证书 在HTTPS的传输过程中,有一个非常关键的角色——数字证书,那什么是数字证书?又有什么作用呢? 所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私…

超实用的办公小技巧,上班族必看

技巧一:使用“PS”来合并 这个方法大家是不是觉得有点出乎意料呢?虽然PS是一个图像处理的工具,但它总是有些我们想不到的功能。下面就给大家介绍一下究竟要怎么利用它来合并PDF文件。 使用感受:的确是可以合并多个PDF文件的&…

《啊哈算法》第二章栈,队列,链表(解析+代码)

从无到有学算法 吾日三省吾身,今天有写代码乎?🙄 🙄抠门渣男语录:我的果汁分你一半(月亮弯弯 绵绵绵绵缠缠) - 李金源 - 单曲 - 网易云音乐 千年之后的你在哪里:星月神话 - 我觉得我还能再吃…

CACHE 概念

CACHE 概念 CPU 读写指令或者数据,可能直接从寄存器查取,也可能经过 TLB ,经过 MMU,经过高速缓存,经过内存,经过外部存储器。这里面有一个 Cache 的概念,想多了解下了,于是有这这一…

【自定义类型】带你走进结构体、枚举、联合

欢迎来到小王学代码的博客 在字符型函数之后,我们接下来要学习的是自定义类型中的结构体、枚举、联合 目录 前言 一、结构体 1.1结构体的声明 1.2 特殊声明和结构自引用 1.4结构体的自引用 1.5结构体变量的定义和初始化 1.6 结构体内存对齐 1.7修改默认对齐…

【杂烩】Latex中的一些技巧备忘录

1. subfigure 和 minipage 环境的运用 首先是多张图组合到一起,左侧和下方备注列标题和行标题。 使用的时候需要的包: minipage不需要 \usepackage{subfigure} \usepackage{graphicx}代码1: \begin{figure*}[htbp]\centering%第一行图片展…

微信小程序怎么实现拍照功能,以及授权,拍完照保存到本地。

写微信小程序就是要不停的翻阅官方文档查阅所需要的需求。API的使用说明wx.getSetting 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限 scope.camera相机wx.authorize 提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获…

复盘!!指针 ,地址 ,数组之间的联系

文章目录前言一、直接看题二、直接上代码总结前言 工作摸鱼 闲来无事 一、直接看题 二、直接上代码 所以,这个题目答案是5. 我来盘给你:int a[5] {1,2,3,4,5}; 1数组名本身就是表示数组首元素地址 2对数组名取地址:表示的是整个数组的地址…

Android抓包Charles入门教程

Android抓包工具有很多,有轻量的如httpCanary直接安装在手机上通过代理进行抓包,有功能强大的WireShark PC 端的抓包工具(也要设置代理啦),还有老牌抓包工具Finder和Charles以及mitmproxy 。 手机上的抓包工具远离基本差不多&…

MAC(m1)-CentOS8 Docker设置MySQL数据持久化

Docker安装部署Mysql8的过程(以作数据持久化)_docker_脚本之家 Docker安装Mysql并映射_小小小果子的博客-CSDN博客_docker mysql 映射 Docker中安装mysql并把配置等挂载在外面(开启多个mysql)_遗忘de神话的博客-CSDN博客_dock中安装了mysql,还能在外部再安装一个mysql吗 mys…

Windows实时运动控制软核(五):LOCAL高速接口测试之VC6.0

今天,正运动小助手给大家分享一下MotionRT7的安装和使用,以及使用VC6.0对MotionRT7开发的前期准备。 01 MotionRT7简介 MotionRT7是深圳市正运动技术推出的跨平台运动控制实时内核,也是国内首家完全自主自研, 自主可控的Windows…

电脑怎么录制屏幕视频,3种方法,轻松弄懂

在日常生活当中,电脑录屏的使用场景也变得越来越多了起来,网课录制,微课录制,直播录制,会议录制等等。那么问题来了,电脑怎么录制屏幕视频呢?今天小编就向大家分享3个电脑录制屏幕视频的方法&am…

osg fbo(一),生成颜色缓冲区图片

由于工作需要&#xff0c;重新捡了下shader。很明显&#xff0c;fbo是重中之重。好记性不如烂笔头&#xff0c;先记录下 1&#xff0c;生成一个颜色纹理(为了省事&#xff0c;可以将纹理宽高屏幕宽高) osg::ref_ptr<osg::Texture2D> tex createFloatRectangleTexture(…

Linux安装Docker详细教程

文章目录Docker架构环境说明安装步骤阿里云镜像加速Docker底层原理Docker架构 镜像&#xff08;image&#xff09;: Docker 镜像&#xff08;Image&#xff09;就是一个只读的模板。镜像可以用来创建 Docker 容器&#xff0c;一个镜像可以创建很多容器。 就好似 Java 中的 类和…

Day857.高性能限流器Guava RateLimiter -Java 并发编程实战

高性能限流器Guava RateLimiter Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于高性能限流器Guava RateLimiter的内容。 Guava RateLimiter 是如何解决高并发场景下的限流问题的。 Guava 是 Google 开源的 Java 类库&#xff0c;提供了一个工具类 RateLimiter。先…

2022智能制造世界与中国十大科技进展内容小结

2022智能制造世界与中国十大科技进展内容小结1. 全断面隧道掘进装备行业工业互联网平台2. 大型复杂构件机器人原位高效高质量铣削加工技术及装备3. 西门子SNC—原生数字化工厂4. 亚马逊 数字孪生服务IoT TwinMaker5. Nvidia 新一代智能移动机器人仿真平台6. 北京奔驰的基于大数…

Excel特殊符号及用法

一、公式中常用符号 &#xff1a; 表示一个单元格区域&#xff0c;如A1:B10 - * / 加减乘除运算符> 大于号> 大于等于号< 小于号< 小于等于号<> 不等于号&#xff0c;如IF(A1<>"销售部",,)^数字 乘方运算&#xff0c;如…

第二章Mybatis进阶操作学习

文章目录特殊SQL的执行模糊查询批量操作动态设置表名添加功能获取自增的主键自定义映射resultMap处理字段和属性的映射关系在SQL语句中使用别名使用核心配置文件中的驼峰对应方法使用resultMap自定义映射处理一对一映射处理级联方式处理association标签分步查询分步查询的优点&…

【网安神器篇】——Sqlmap详解

作者名&#xff1a;白昼安全主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右铭&a…

C语言 自定义类型 之 【联合体(共用体)】

文章目录前言联合体(UNION)类型的定义联合体的特点联合体大小的计算联合体使用的典型例题 — 判断机器的大小端写在最后前言 联合体&#xff08;union&#xff09;在C语言中是不常用的&#xff0c;不过存在就必然有其有用之处&#xff0c;这里不深入探讨联合体用在何处有什么用…