JPEG压缩基本原理

news2024/9/24 7:23:42

JPEG算法的第一步是将图像分割成8X8的小块。
在计算机中,彩色图像最常见的表示方法是RGB格式,通过R(Red)、G(Green)A和(Blue)组合出各种颜色。
在这里插入图片描述
除此以外,还有一种表示彩色图像的方法,称为YUV格式。Y表示亮度,U和V表示颜色。它也由三个分量构成,Y表示亮度,Cb表示色度蓝,Cr表示色度红。
JPEG的第二步就是将图像转化为YCbCr格式。
采用这种机制的原理是,人眼通过视锥细胞感知颜色,视杆细胞感知亮度。而视杆细胞的数量要多于视锥细胞,也就是说,人眼对亮度感知能力要高于对颜色的感知能力。如下图所示,仅保留亮度,我们也可以感知到该图像的大部分细节。(熄灯后人会慢慢看清事物,但看不轻颜色)
因此,我们可以保留图像的亮度信息,删减一部分色彩信息,对我们识别图像不会造成特别大的影响。
在这里插入图片描述
RGB到YCbCr变换公式如下:
Y=0.299R+0.587G+0.114B
Cb=-0.1687R-0,3313G+0.5B+128
Cr=0.5R-0.4187G-0.0813B+128
JPEG的第三步就是将图像进行离散余弦变换(Discrete cosine transform,DCT)。
将图像的低频信息集中在左上角,以方便后续处理。
在这里插入图片描述
任何8X8的像素块都可以通过以下64种频域块叠加而成。
在这里插入图片描述
在这里插入图片描述
下面的步骤是通过数据量化哈夫曼编码得到更高的压缩比。

参考文献:
[1]JPEG算法原理 jpeg图片是如何压缩的?
[2]JPEG不可思议的压缩率——归功于信号处理理论 @圆桌字幕组
[3]JPEG压缩原理
[4]JPEG压缩算法步骤原理
[5]音视频入门(四)-JPEG压缩算法原理
[6]JPEG 有损压缩 离散余弦变换 DCT 一条视频讲清楚
[7]JPEG ‘files’ & Colour (JPEG Pt1)- Computerphile

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

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

相关文章

【C++】一文带你吃透C++继承

🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 C/C专栏 🌙那些看似波澜不惊的日复一日,…

Docker attach VS exec

我们知道,进入容器常用的两种方式为:docker exec ...、docker attach ...,那这两者有什么区别呢? 首先,运行一个测试容器,并在启动容器时运行相关指令,如下: docker run --name te…

JVM学习笔记一

程序计数器是一块儿较小的内存, 请你谈谈你对JVM的理解?java8虚拟机和之前的有什么变化更新?什么是OOM?什么是栈溢出(StackOverFlowError)?怎么分析JVM的常用调优参数?内存快照如何抓取?怎么分析Dump文件?谈谈JVM中类加载器你的认识?JVM的位置JVM的体系结构类加载器双…

科研热点|科研人专属身份证来了,国产ORCID ID启动!

2023年6月1日,国家自然科学基金委员会发布了《国家自然科学基金委员会关于推广和发布基础研究科研人员标识(BRID)有关工作安排的通告》,宣布从即日起,国家自然科学基金委员会(以下简称自然科学基金委&#…

高完整性系统(4)Formal Logic (形式逻辑和 Alloy 简介)

文章目录 Story so far形式逻辑命题 proposition谓词 predicate连接词VariablesSet 集合Set operation 集合操作Set Relationship 集合关系Alloy Set alloy 的集合表示Quantification 量词Relations 关系案例Binary Relations 二元关系图Functions 函数Total v.s. Partial Func…

IO模型、select、poll、epoll

阻塞IO模型 阻塞IO是最通用的IO类型,使用这种模型进行数据接收的时候,在数据没有到之前程序会一直等待。例如,对于函数recvfrom(),内核会一直阻塞该请求直到有数据到来才返回。 非阻塞IO模型 当把套接字设置成非阻塞的IO,则对每次请求&…

Java网络开发(Tomcat)——遇到的 bug 汇总(持续更新)

目录 引出:bug::bug::bug:Tomcat开发的bug汇总项目启动就报错1.WebServlet()路径配置的问题2.由于之前的错误,Context[/day01]启动失败【困扰】3.启动过滤器异常---init方法 JSP使用相关报错1.后端传给jsp的数据,前端jsp不显示2.jsp的包没有导&#xff0…

6 vue

前端开发 1.前端开发 前端工程师“Front-End-Developer”源自于美国。大约从2005年开始正式的前端工程师角色被行业所认可,到了2010年,互联网开始全面进入移动时代,前端开发的工作越来越重要。 最初所有的开发工作都是由后端工程师完成的&…

‘jupyter‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

目录 0.问题背景环境介绍 1.解决步骤 2.测试步骤 0.问题背景环境介绍 1)环境:windows64 2)问题背景:在搭建jupyter notebook的过程中,想用windows的任务管理器启动jupyter notebook或者使用【jupyter notebook --…

降低成本,快速搭建企业帮助文档的方法盘点

企业帮助文档是企业为了解决客户疑问和提高客户满意度而制作的一种文档,通常包括产品的使用指南、故障排除、常见问题解答等内容。一个好的帮助文档可以帮助企业降低客服成本、提高客户满意度,进而提高产品销量和企业品牌形象。但是,有些企业…

基于html+css的图展示108

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

MFC(十二)多个对话框

我们来制定多个对话框,每个对话框都有不同的功能,单击下一步,即可跳转到下一个对话框 1.新建一个启动按钮 2.在资源视图,Dialog里面,右键-->添加资源---->dialog>选择IDD PROPPAGE_SMALL新建 属性页&#…

「移动机器人行业应用分析」锂电行业

锂电池作为目前一种比较成熟和先进的电池,因其质量轻,储电量大等特点,受到了人们的广泛应用。中国作为全球最大的锂电生产和消费国,也是全球最大的电动汽车市场,随着“碳中和”这一目标的提出,锂离子电池技…

陶瓷板检测系统在工业质检领域的前景

陶瓷是一种重要的工业材料,广泛应用于建筑、电子、航空航天、医疗等领域。在生产过程中,陶瓷制品需要经过多道工序,其中检测环节是非常重要的一环。传统的陶瓷板检测方式主要依赖人工目视检测,效率低下且容易出错。随着人工智能技…

5年Java经验字节社招:15天3次面试,成功拿下Offer

背景经历 当时我工作近5年,明显感觉到了瓶颈期。具体来说,感觉自己用过很多框架、做过一些技术设计、也有过一些产出,但是从技术深度上感觉不足,到后期时做事也没有明显挑战,完全适应了公司节奏,说句不好听…

企业做直播如何选择好的直播平台?需要考虑哪些方面?

企业做直播如何选择好的直播平台?需要考虑哪些方面?我将从功能需求、可靠性与稳定性、用户体验、技术能与售后服务能力等方面进行综合考虑,帮助您做出明智的决策,或是说提供选型方面的参考。 企业在选择一家直播平台时应考虑以下因…

Vue.js 中的过滤器是什么?如何使用过滤器?

Vue.js 中的过滤器是什么?如何使用过滤器? 在 Vue.js 中,过滤器是一种以函数为基础的可重用代码片段,用于对数据进行格式化和处理。通过使用过滤器,我们可以在模板中对数据进行简单的转换,以便更好地呈现给…

chatgpt赋能python:Python在主函数中调用函数:提高代码可读性和降低重复性工作

Python在主函数中调用函数:提高代码可读性和降低重复性工作 在Python编程中,我们常常需要将代码分解成多个函数来实现各种功能。而主函数则是整个程序的执行入口。调用函数可以降低代码的复杂度和耦合性,并且使得代码更容易维护和重用。 基…

开源赋能 普惠未来|元遨/CARSMOS诚邀您参与2023开放原子全球开源峰会

元遨/CARSMOS定位于面向全球国际合作的平等自治的智能驾驶开源社区,秉持“走出去,引进来”的双向开放策略,通过互联网技术和开源社区模式相结合,建立和发展开源智能驾驶的科研、教育、产业化起步平台,包括开源软件、开…

centos7下svnserve方式部署subversion/SVN服务端(实操)

一般来说,subversion服务器可以用两种方式架设: 一种是基于svnserve,svnserve作为服务端; 一种是基于Apache,用apache作为服务端。 这里采用第一种方式部署。 执行如下命令,安装SVN。 yum install sub…