首页 > 其他分享 >深入理解JPEG

深入理解JPEG

时间:2023-05-12 16:14:38浏览次数:33  
标签:Baseline 压缩 扫描 模式 理解 深入 JPEG DCT

ISO/IEC 10918-1标准定义了三种压缩模式:顺序DCT、逐行扫描DCT和逐列扫描DCT,每种模式下均有多个可选的压缩比。标准还定义了几个可选的基于区块的压缩模式和编码方案,如渐进扫描和多扫描。ISO/IEC 10918-1可以存储所支持的所有压缩模式的图像数据,并根据实际需要进行解码和显示。

  • 顺序DCT模式:顺序DCT模式包括 Baseline Sequential DCT Mode (Baseline)、Extended Sequential DCT Mode (Extended Baseline)和Spectral Selection Processing (Progressive DCT Mode)三种压缩模式。其中Baseline模式是最常用的压缩模式,包含对图像的一次单遍扫描,从图像的左上角到右下角进行扫描。Extended Baseline模式是Baseline模式的扩展,采用更复杂的算法来进行图像压缩。Spectral Selection Processing 是一种渐进式压缩模式,图像数据按照 DCT 系数高到低的顺序排序。

  • 逐行扫描DCT模式:逐行扫描DCT模式仅支持一种渐进式压缩模式,即Progressive DCT Mode。在这个模式下,JPEG图像被分成多个扫描线,每个数据组按照 DCT 系数高到低的顺序排序。每个扫描线被分割成多个数据段,被分为多次扫描和压缩。

  • 逐列扫描DCT模式:逐列扫描DCT模式也仅支持Progressive DCT Mode。它将JPEG图像按列分割成若干数据段,按照 DCT 系数从高到低的顺序排序。每个数据段被分为多次扫描和压缩。

除了以上三种压缩模式,ISO/IEC 10918-1还定义了多扫描渐进式压缩、分层压缩、可逆压缩(Lossless compression)等可选的压缩模式和编码方案。这些模式和编码方案提供了更多的压缩选项和更高的压缩率,但一般需要更多的时间进行图像压缩和解压缩。

实现这三种压缩模式的JPEG开源库有很多。下面是其中几种常见的库:

  • libjpeg:它是最经典和广泛使用的JPEG库之一,是用 C 语言实现的,支持ISO/IEC 10918-1中定义的三种压缩模式。libjpeg的设计十分简洁,有效地利用了DCT及哈夫曼编码算法,可以在不占用太多内存的情况下实现高效的压缩和解压缩。libjpeg是一种基于MIT许可证的自由软件,可以在不受限制的情况下使用。

  • TurboJPEG:它是一种高性能的JPEG库,由libjpeg-turbo项目开发,是libjpeg的改进版。TurboJPEG支持ISO/IEC 10918-1中定义的三种压缩模式,还提供了多线程支持、位图压缩,以及基于SSIM算法的图像质量评估等高级功能。TurboJPEG是一种自由软件,授权方式是3条款BSD许可证。

  • MozJPEG:它是Mozilla开发的一种JPEG优化库,是多种JPEG开源库的集成和改进。MozJPEG支持ISO/IEC 10918-1中定义的三种压缩模式,而且基于适应性量化、(AQ) 差异、颜色转换等算法进行了优化和改进,可以在尽可能减小压缩体积的前提下保持图像质量。MozJPEG是一种自由软件,授权方式是3条款BSD许可证。

标签:Baseline,压缩,扫描,模式,理解,深入,JPEG,DCT
From: https://www.cnblogs.com/lwp-nicol/p/17394473.html

相关文章

  • VMware Aria Suite 8.12 - 云管理解决方案 (下载索引)
    VMwareAriaSuite8.12-云管理解决方案(下载索引)请访问原文链接:https://sysin.org/blog/vmware-aria-suite/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org云管理套包VMwareAriaSuite(以前称为vRealizeSuite)和vCloudSuiteVMwareAriaSuite(vRealizeSu......
  • cookie session token 发展史(便于理解jwt)
    目录一、cookiesessiontoken发展史(彻底理解cookie,session,token,便于理解jwt)1、Cookie,Session,Token发展史2、Cookie,Session解释2.1Cookie2.2Session2.3cookie和session的区别3、Token介绍3.1传统方式——基于服务器的验证3.2基于服务器验证方式的问题3.2.1Seesions3.2.2......
  • Java内存模型原理,你真的理解吗?(转载)
    内存模型产生背景在介绍Java内存模型之前,我们先了解一下物理计算机中的并发问题,理解这些问题可以搞清楚内存模型产生的背景。物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物理机的解决方案对虚拟机的实现有相当的参考意义。物理机的并发问题硬件的效率问题计算机处......
  • BEV专栏(一)从BEVFormer深入探究BEV流程(上篇)
    前言 本文提出了一种基于Transformer和时间结构的Bird's-Eye-View(BEV)编码器,称为BEVFormer。该编码器可以有效地聚合来自多视角摄像机和历史BEV特征的时空特征。本教程禁止转载。同时,本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习。欢迎关注公众号CV技术指南,专注......
  • chargpt对于gstreamer的tee的理解
    问:gstreamer中的tee有什么用[GPT]在GStreamer中,tee是一个元素,它的作用是将一个输入流分配到多个输出流中,使得同一个输入数据可以同时传输到多个不同的处理过程中。它的作用类似于电视信号中的“分配器”,可以将一个信号分配到多个电视上。在实际应用中,tee通常用于多个处理过程需......
  • 深入浅出pageage
    package.json就是一个json文件,除了能够描述项目的包依赖外,允许我们使用“语义化版本规则”指明你项目依赖包的版本,让你的构建更好地与其他开发者分享,便于重复使用。package.jsonpackage.json常用属性package.json环境相关属性package.json依赖相关属性package.json......
  • 【pytorch】理解张量,了解张量的创建和操作
    深度学习的核心是卷积,卷积的核心是张量(Tensor)理解TensorTensor可以简单理解为是标量、向量、矩阵的高维扩展。你可以把张量看作多维数组,但相较于ndarray,Tensor包含了grad、requires_grad、grad_fn、device等属性,是为服务于神经网络而设计的类型,标量可以看作是零维张量、......
  • JS单线程的理解
    一、首先需要区分几个概念:1. 进程和线程的概念:进程:指在系统中运行的一个应用程序,目的就是担当分配系统资源(CPU时间、内存等)的基本单位线程:系统分配处理器时间资源的基本单元,建立在进程的基础上,一个进程至少要有一个线程。2. 浏览器是多进程,多线程的,而JS是单线程的:......
  • 【备忘】go build 使用代理解决部分模块或依赖无法下载的问题
    1、查看go版本goversion2、如果版本为1.13及以上goenv-wGO111MODULE=ongoenv-wGOPROXY=https://goproxy.io,direct低于1.13版本$env:GO111MODULE="on"$env:GOPROXY="https://goproxy.io"......
  • Vue MVVM理解
    1MVVM,是Model-View-ModelView的简写在Vue中:Model:模型层,用于存储当前状态(data)View:视图层,用于向用户展示data被渲染后的UIModelView:视图模型层,监听、渲染等功能v-bind:监听Model中的data,在data变化时按照逻辑(Vue原理)进行渲染,再根据映射表找到依赖该状态的View进行更新。......