第八章 图像压缩

news2024/11/15 21:37:41

文章目录

  • 第八章 图像压缩
    • 8.1基础知识
      • 8.1.1 编码冗余
      • 8.1.4图像信息的度量
      • 8.1.5保真准则
      • 8.1.6图像压缩模型
      • 8.17图像格式、容器和压缩标准
    • 8.2一些基本的压缩方法
      • 8.2.1霍夫曼编码
      • 8.2.2Golomb编码
      • 8.2.3算术编码
      • 8.2.4LZW编码
      • 8.2.5行程编码
      • 8.2.6基于符号的编码
      • 8.2.7比特平面编码
      • 8.2.8块变换编码
      • 8.2.9预测编码
      • 8.2.10小波编码

第八章 图像压缩

8.1基础知识

数据冗余R为 R = 1 − 1 C R=1-\cfrac1C R=1C1 C为压缩率,定义为 C = b b ′ C=\cfrac{b}{b'} C=bb

二维灰度阵列受如下可被识别和利用的三种主要类型的数据冗余的影响:

  1. 编码冗余。编码是用于表示信息实体或事件集合的符号系统(字母、数字、比特和类似的符号等)。每个信息或事件被赋予一个编码符号的序列,称之为码字。每个码字中的符号数量就是该码字的长度。在多数二维灰度阵列中,用于表示灰度的8比特编码所包含的比特数要比表示该灰度所需要的比特数多。
  2. 空间和时间冗余。因为多数二维灰度阵列的像素是空间相关的(即每一个像素类似于或取决于相邻像素),在相关像素的表示中,信息被没有必要地重复了。在视频序列中,时间相关的像素(即类似于或取决于相邻帧中的那些像素)也是重复的信息。
  3. 不相关的信息。多数二维灰度阵列中包含有一些被人类视觉系统忽略或与用途无关的信息。从没有被利用的意义上看,它是冗余的。

8.1.1 编码冗余

例子:
r k p r ( r k ) c o d e ( 1 ) l e n g 1 ( r k ) c o d e ( 2 ) l e n g 1 ( r k ) r 87 = 87 25 01010111 8 01 1 r 128 = 128 0.47 10000000 8 1 1 r 186 = 186 0.25 11000100 8 000 3 r 255 = 255 0.03 11111111 8 001 3 r i ≠ 87 , 126 , 186 , 255 0 − 8 − 0 \begin{gathered} \begin{array}{c|c|c|c|c|c} \hline {r_k}&{p_r(r_k)}&{\mathrm{code(1)}}&{\mathrm{leng_1(r_k)}}&{\mathrm{code(2)}}&\mathrm{leng_1(r_k)}\\\hline {r_{{87}}=87}&{25}&{01010111}&{8}&{01}&{1}\\ {r_{{128}}=128}&{0.47}&{10000000}&{8}&{1}&{1}\\ {r_{\mathrm{186}}=186}&{0.25}&{11000100}&{8}&{000}&{3}\\ {r_{\mathrm{255}}=255}&{0.03}&{11111111}&{8}&{001}&{3}\\ {r_{\mathrm{i}}\neq \mathrm{87},126,186,255}&{0}&{-}&{8} &{-}&{0}\\ \hline\end{array} \end{gathered} rkr87=87r128=128r186=186r255=255ri=87,126,186,255pr(rk)250.470.250.030code(1)01010111100000001100010011111111leng1(rk)88888code(2)011000001leng1(rk)11330

则压缩率和冗余为: C = 8 1.81 = 4.42 , R = 1 − 1 4.42 = 0.774 C=\cfrac{8}{1.81}=4.42,\quad R=1-\cfrac{1}{4.42}=0.774 C=1.818=4.42,R=14.421=0.774

8.1.4图像信息的度量

率过程建模,该过程可以用一种与直觉一致的方式加以度量。根据这一推测,一个具有概率 P(E)的随机事件E可被说成是包含 I ( E ) = log ⁡ 1 P ( E ) = − log ⁡ P ( E ) I(E)=\log\frac{1}{P(E)}=-\log P(E) I(E)=logP(E)1=logP(E)
从一个可能事件的离散集合{ a 1 , a 2 , … , a j a_1, a_2,\dots, a_j a1,a2,,aj},给定一个统计独立随机事件的信源,与该集合相联系的概率为{ P ( a 1 ) , P ( a 2 ) , … , P ( a j ) P(a_1), P(a_2),\dots, P(a_j) P(a1),P(a2),,P(aj)},则每个信源输出的平均信息称为该信源的嫡,即 H = − ∑ j = 1 j P ( a j ) log ⁡ P ( a j ) H=-\sum_{j=1}^{j}{P}(a_j)\log P(a_j) H=j=1jP(aj)logP(aj)

8.1.5保真准则

输入图 f ^ ( x , y ) \hat{f}(x,y) f^(x,y)和 近似 f ( x , y ) f(x,y) f(x,y) 的之间误差 e ( x , y ) e(x,y) e(x,y) e ( x , y ) = f ^ ( x , y ) − f ( x , y ) e(x,y)=\hat{f}(x,y)-f(x,y) e(x,y)=f^(x,y)f(x,y) 总误差为 ∑ x = 0 M − 1 ∑ y = 0 N − 1 [ f ^ ( x , y ) − f ( x , y ) ] \sum_{x=0}^{M-1}\sum_{y=0}^{N-1}\left[\hat{f}(x,y)-f(x,y)\right] x=0M1y=0N1[f^(x,y)f(x,y)] 均方根误差为 e rms = [ 1 M N ∑ x = 0 M − 1 ∑ y = 0 N − 1 [ f ^ ( x , y ) − f ( x , y ) ] 2 ] 1 / 2 e_{\text{rms}}=\left[\frac{1}{MN}\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}\left[\hat{f}(x,y)-f(x,y)\right]^2\right]^{1/2} erms=[MN1x=0M1y=0N1[f^(x,y)f(x,y)]2]1/2 均方差信噪比为 SNR ms = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ^ ( x , y ) 2 ∑ x = 0 M − 1 ∑ y = 0 N − 1 [ f ^ ( x , y ) − f ( x , y ) ] 2 \text{SNR}_{\text{ms}}=\cfrac{\displaystyle \sum_{x=0}^{M-1}\displaystyle \sum_{y=0}^{N-1}\hat{f}(x,y)^2}{\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}\left[\hat{f}(x,y)-f(x,y)\right]^2} SNRms=x=0M1y=0N1[f^(x,y)f(x,y)]2x=0M1y=0N1f^(x,y)2

8.1.6图像压缩模型

在这里插入图片描述

8.17图像格式、容器和压缩标准

在这里插入图片描述

国际支持图像标准:

名称组织描述
二值静止图像
CCITT Group3ITU-T通过电话线传输二进制文档的传真方法,支持一维二维行程编码及哈夫曼编码
CCITT Group4ITU-TCCITT Group3的精简版,只支持二维行程编码
JBIG/JBIG1ISO/TEC/ITU-T联合二值图像专家组标准,适用于二值图像的渐进无损压缩。
JBIG2ISO/TEC/ITU-TJBIG1的后续版本,适用于桌面、互联网和传真应用中的二值图像,所用的压缩方法是基于内容的,对文本和半色调区域使用基于字典的方法,对其他图像内容使用哈夫曼编码或算术编码,该方法可以是无损的或有损的。
连续色调静止图像
JPEGISO/TEC/ITU-T针对图像质量的联合图片专家组标准。该标准的有损基线编码系统对图像块变换编码、哈夫曼编码和行程编码使用量化离散余弦变换,是在互联网上常用的图像压缩方法之一
JPEG-LSISO/TEC/ITU-T基于自适应预测,上下文建模、和Golomb码的一种无损或接近无损的压缩标准
JPEG-2000ISO/TEC/ITU-TJPEG的后续版本,使用算术编码和量化离散小波变换。压缩可以是有损的或无损的

其他图像标准:

名称组织描述
BMPMicrosoftWindows位图。主要用于为压缩图像的一种文件格式
GIFCompuServe图形交换格式,对1-8位图像使用LZW编码
PDFAdobe SystemsPortable Document Format,可移植文档格式,以与设备和分辨率无关的方式来表示二维图像,可左右JPEG等图像格式的容器来使用,某些PDF版本已成为ISO标准
PNGW3CPortable Network Graphics,一种支持无损压缩的位图图形格式。一种说法是PNG is Not GIF,GIF当时受专利保护,PNG为替代GIF
TIFFAldus标记图像文件格式。一种灵活的文件格式,支持各种图像压缩标准,包括JPEG、JPEG-LS,JPEG-2000,JPIG2等
WebPGoogleWebP通过WebP VP8,使用空间预测和LZW反向引用的一个变体和哈夫曼编码来实现

国际支持视频标准:

名称组织描述
DVIEC数字视频(Digital Video),是由索尼、松下、JVC等多家厂商联合提出的一种家用数字视频格式,如电子新闻采集和摄像机。为简单编辑目的而单独压缩各帧
H.261ITU-T是1990年ITU-T制定的一个视频编码标准,属于视频编解码器,适用于ISDN综合业务数字网络线路的一种双向视频会议标准。设计的目的是能够在带宽为64kbps的倍数的综合业务数字网(ISDN for Integrated Services Digital Network)上传输质量可接受的视频信号
H.262ITU-TH.262是由ITU-T的VCEG组织和ISO/IEC的MPEG组织联合制定的,所以制定完成后分别成为了两个组织的标准,正式名称是"ITU-T建议H.262"和"ISO/IEC 13818-2"。这两个标准在所有的文字叙述上都是相同的(也许除了封面和标价之外)。大家所熟知的DVD就是采用了该技术。H.262在技术内容上和ISO/IEC的MPEG-2视频标准(正式名称是ISO/IEC 13818-2)一致。
H.263ITU-T由ITU-T用于视频会议的低码率影像编码标准。是适用于普通电话解调器的增强型H.261。它的第一版于1995年完成,在所有码率下都优于之前的H.261。之后还有在1998年增加了新的功能的第二版H.263+,或者叫H.263v2,以及在2000年完成的第三版H.263++,即H.263v3。
H.264ITU-T又称为MPEG-4第10部分,高级视频编码,是一种面向块,基于运动补偿的视频编码标准。第一版标准的最终草案于2003年5月完成。H.264由于算法优化,可以低于1Mbps的速度实现标清(分辨率在1280P*720以下)数字图像传送;
H.265/MPEG-H/HEVCITU-T/ISO/IEC高效视频编码,H。264的扩展,通常用于4K视频应用中。H.265则可以实现利用1~2Mbps的传输速度传送720P(分辨率1280*720)普通高清音视频传送。推出时间2013年2月。
MPEG-1ISO/IEC一种运动图像专家组标准,用于CD-ROM应用,是MPEG组织制定的第一个视频和音频有损压缩标准,也是最早推出及应用在市场上的MPEG技术,其原来主要目标是在CD光盘上记录影像,后来被广泛应用在VCD光盘。视频压缩算法于1990年定义完成。1992年底,MPEG-1正式被批准成为国际标准。
MPEG-2ISO/IEC是“运动图像和相关音频信息的通用编码”的标准。适用于传输速率高达15Mb/s的DVD应用。虽然MPEG-2的效率不如H.264/AVC和H.265/HEVC等新标准,但与现有硬件和软件的向后兼容性意味着它仍在广泛使用,例如在无线数字电视广播和DVD-Video中。在1996年7月最终批准。
MPEG-4ISO/IEC由国际标准化组织(ISO)和国际电工委员会(IEC)下属的“动态影像专家组”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通过,第二版在1999年12月通过。MPEG-4格式的主要用途在于网络上流、光盘、语音发送(视频电话),以及电视广播。
MPEG-4AVCISO/IEC与H.264相同

其他视频标准:

名称组织描述
AVSMII中国开发的音视频标准,为中国第二代信源编码标准。第三代AVS标准的制定工作已经完成。为了推动AVS标准的开发和推广,华为、TCL、创维等公司成立了中关村视听产业技术创新联盟(简称:AVS产业联盟),致力于AVS标准的开发和推广。
HDV公司联盟高清视频、高清电视的DV扩展
M-JPEG多家公司Motion JPEG,Motion Joint Photographic Experts Group,其中每一帧图像都分别使用JPEG编码。M-JPEG常用在数字相机和摄像头之类的图像采集设备上,非线性剪辑系统也常用这种格式。QuickTime播放器和包括Mozilla Firefox,Google Chrome,Safari在内许多网页浏览器原生支持M-JPEG
Quick-TimeApple Computer由苹果公司开发的支持DV等其他音视频格式的媒体容器
VC-1
WMV9
SMPTE
Microsoft
互联网上最通用的视频格式。适用于高清和蓝光高清DVD
WebP
VP8
GoogleWebP最初在2010年9月发布,其支持库于2018年4月发布1.0版本。截至2021年5月,已有94%的浏览器支持此格式,Google于2010年9月30日首次公布WebP格式,它派生自影像编码格式VP8[12],被认为是WebM多媒体格式的姊妹项目,是Google在购买On2

8.2一些基本的压缩方法

8.2.1霍夫曼编码

霍夫曼方法的第一步是通过对所考虑符号的概率进行排序并将具有最小概率的符号合并为一个符号来替代下次信源化简过程中的符号,从而创建一个简化信源系列。下图针对二进制编码说明了这种处理(也可以构造K元霍夫曼编码)。在最左边,一组虚构的信源符号集合及它们的概率根据概率值的减少从上到下排列。为形成第一次信源简化,底部的两个概率0.06和0.04 合并,形成了一个概率值为0.1的“复合符号”。这个复合符号及其对应的概率被置于第一个信源简化列中,以便简化后信源的概率仍按其值从最大到最小排列。这个过程一直重复持续到信源只有两个符号的简化信源(在最右边)为止。
在这里插入图片描述
平均长度: L a r g = ( 0.4 ) ( 1 ) + ( 0.3 ) ( 2 ) + ( 0.1 ) ( 3 ) + ( 0.1 ) ( 4 ) + ( 0.06 ) ( 5 ) + ( 0.04 ) ( 5 ) = 2.2 L_{\mathrm{arg}}=(0.4)(1)+(0.3)(2)+(0.1)(3)+(0.1)(4)+(0.06)(5)+(0.04)(5)=2.2 Larg=(0.4)(1)+(0.3)(2)+(0.1)(3)+(0.1)(4)+(0.06)(5)+(0.04)(5)=2.2 在这里插入图片描述

8.2.2Golomb编码

给定一个非负整数n和一个正整数除数m>0后,表示为Gm(n)的n关于m的Golomb编码是商[n/m]的一元编码和n modm的二进制表示的一个合并。G(n)的构建如下:

  1. 形成商 ⌊ n / m ⌋ \lfloor n/m\rfloor n/m的一元编码(整数q的一元编码定义为q个1紧跟着一个0)。
  2. k = ⌈ log ⁡ 2 m ⌉ , c = 2 k − m , r = n   m o d   m k=\lceil\log_{2}m\rceil,c=2^{k}-m,r=n\bmod m k=log2m,c=2km,r=nmodm,并计算截短的余数r’,例如,使其满足 r ′ = { r 截短至 k − 1 比特 , 0 ≤ r < c r + c 截短至 k 比特 , e l s e r'=\left\{\begin{array}{l } r截短至k-1比特,&0\leq r<c\\ r+c截短至k比特,&\mathrm{else}\\ \end{array}\right. r={r截短至k1比特,r+c截短至k比特,0r<celse
  3. 连接步骤1和步骤2的结果。
    在这里插入图片描述

8.2.3算术编码

与前两节的变长编码不同,算术编码生成的是非块码。信源符号和码字之间不存在一一对应的关系。相反,算术编码给信源符号(或消息)的整个序列分配了一个单一的算术码字。这个码字本身定义了一个介于0和1之间的实数间隔。当消息中的符号数量增加时,用于表示消息的间隔会变小,而表示该间隔所需的信息单位(假设为比特)的数量则会变大。消息的每个符号根据其出现的概率来减小该区间的大小。

图8.12说明了算术编码的基本过程。这里,对来自一个四符号信源的五符号序列或消息 a 1 a 2 a 3 a 3 a 4 a_1a_2a_3a_3a_4 a1a2a3a3a4进行编码。在编码处理的开始,假设消息占据整个半开区间 [ 0 , 1 ) [0,1) [0,1) a 1 a_1 a1 [ 0 , 0.2 ) [0,0.2) [00.2)相联系。与在下图中、区间 [ 0 , 0.2 ) [0,0.2) [00.2)就被扩展到该图形的全高度,且其端点用该窄区间的值来标注。然后,这个缩窄的区间根据原始信源符号的概率进行细分,并继续对下一个消息符号进行这种处理。采用这种方式,符号 a 2 a_2 a2将该子区间变窄为 [ 0.04 , 0.08 ) [0.04,0.08) [0.04,0.08),符号 a 3 a_3 a3进一步将该子区间变窄为 [ 0.056 , 0.072 ) [0.056,0.072) [0.056,0.072),依次类推。必须保留最后的消息符号,以作为特定的消息结束指示符,它将子区间变窄为 [ 0.06752 , 0.0688 ) [0.06752, 0.068 8) [0.06752,0.0688)。当然,在这个子区间内的任何数字(如 0.068)都可以用来表示该消息。
在这里插入图片描述

8.2.4LZW编码

在这里插入图片描述
在这里插入图片描述
LZW编码在概念上非常简单。在编码过程的开始阶段,先构建一个包含被编码信源符号的码书或字典。对于8比特单色图像,字典中的前256个字被分配给灰度值0,1,2,…, 255,。当编码器顺序地分析图像像素时,不在字典中的灰度序列被放置在算法确定的位置(即下一个未用的位置)。例如,如果图像的前两个像素为39 39,则序列“39-39”可能被分配到256的位置,该位置后面的地址保留给灰度级0到255。下次遇到两个连续的39 39时,就用码字256——即包含序列39-39的位置的地址——来表示它们。如果在编码过程中采用一个9比特、512字的字典,则最初用于表示这两个像素的(8+8)比特被单个9比特码字替代。

8.2.5行程编码

通常可用相同灰度的行程表示为行程对来压缩,其中每个行程对指定一个新灰度的开始和具有该灰度的连续像素的数量。这种称为行程编码的技术,是20世纪50年代发展起来的,连同其二维扩展一起,已成为传真编码标准的压缩方法。压缩是通过消除空间冗余的一种简单形式(即一组相同的灰度)来实现的。当相同像素的行程较小(或没有)时,行程编码会导致数据扩展。

8.2.6基于符号的编码

在基于符号或基于记号的编码中,一幅图像被表示为多幅频繁发生的子图像的一个集合,称为符号。每一个这样的符号都存储在一个符号字典中,且该图像以一个三元组{(xi,y,t), (x,y,t),…}的集合来编码,其中,每个(x,y)对规定了图像中一个符号的位置,而记号t,是该符号或子图像在字典中的地址。也就是说,每一个三元组表示图像中一个字典符号的一个实例。通过仅存储一次重复的符号,可以有效地压缩图像通,特别是在文档存储和检索应用中,在这种情况下,符号通常是重复多次的字符位图。如下图所示,符号a和符号n多次出现,可采用符号编码将其压缩。
在这里插入图片描述

8.2.7比特平面编码

由于灰度图像的压缩效果更好,所以我们可以采用将m比特分层。一幅m比特单色图像的灰度可以用如下形式的基2的多项式来表示: a m − 1 2 m − 1 + a m − 2 2 m − 2 + ⋯ + a 1 2 1 + a 0 2 0 a_{m-1}2^{m-1}+a_{m-2}2^{m-2}+\cdots+a_{1}2^{1}+a_{0}2^{0} am12m1+am22m2++a121+a020
缺点在于灰度较小变化时比特平面也可能产生巨大变化,如127(01111111)和128(10000000)之间的变化,改进方法是采用格雷码。格雷码相邻数字之间仅有一个比特位的变化。

8.2.8块变换编码

在这里插入图片描述
在这一节,我们考虑一种压缩技术,该技术把图像分成大小相等(如8×8)且不重叠的小块,并使用二维变换单独地处理这些块。在块变换编码中,用一种可逆线性变换(如傅里叶变换)把每个块或子图像映射为变换系数集合,然后,对这些变换系数进行量化和编码。对于大多数图像,大量系数都有较小的幅度值,并且可被粗糙地量化(或完全抛弃)而几乎没有多少图像失真。

上图显示了一个典型的块变换编码系 统。解码器执行(除了量化功能外)与编码器相反顺序的步骤。编码器执行4种相对简单的操作:子图像分解、 变换、量化和编码。一幅大小为M×N的输人图像首先被分解为大小为 n ∗ n n*n nn的子图像,然后变换这些子图以生成 M ∗ N / n 2 M*N /n^2 MN/n2个子图像变换阵列,每个阵列的大小为 n ∗ n n *n nn。变换处理的目的是对每幅子图像中的像素进行去相关,或用最少数量的变换系数包含尽可能多的信息。然后,在量化阶段,以一种预定义的方式有选择性地消除或更粗略地量化那些携带最少信息的系数(本节稍后会讨论一些方法)。这些系数对重建的子图像质量的影响最小。通过对量化后的系数进行编码(通常使用变长编码)结束编码过程。任何或所有的变换编码步骤都可以根据局部图像内容进行适应性调整,这称为自适应变换编码,而如果这些步骤对所有子图像都是固定的,则称为非自适应变换编码。

8.2.9预测编码

无损预测编码
消除紧邻像素在空间和时间上的冗余来实现的,它仅对每个像素中的新信息进行提取和编码。一个像素的新信息定义为该像素的实际值与预测值之间的差。

在这里插入图片描述

上图显示了一个无损预测编码系统的基本组成。该系统由一个编码器和一个解码器组成,编码器和解码器中均包含有一个相同的预测器。离散时间输人信号f(n)的连续样本被传入编码器,预测器根据指定数量的以往样本来生成每个样本的预期值。然后,预测器的输出被四舍五人为最接近的整数,表示为f(n),并使用这个整数来形成差值或预测误差 e ( n ) = f ( n ) − f ^ ( n ) e(n)=f(n)-\hat{f}(n) e(n)=f(n)f^(n) 使用变长码来对这个误差进行编码(用符号编码器),以生成压缩数据流的下一个元素。上图 中的解码器根据接收到的变长码字重建e(n),并执行反操作 f ( n ) = e ( n ) + f ^ ( n ) f(n)=e(n)+\hat{f}(n) f(n)=e(n)+f^(n) 以解压缩或重建原始输入序列。

有损预测编码
在这里插入图片描述
在无损预测编码模型中加入一个量化器,并在关于空间预测器的上下文中,探讨重建精度和压缩性能间的折中。如上图所显示,代替无误差编码器的取最接近整数功能的量化器被插入到了符号编码器和形成预测误差的那一点之间。该量化器将预测误差映射为有限范围内的输出,表示为 e ˙ ( n ) \dot{e}(n) e˙(n),它确定了压缩量和产生的失真量。为了接纳量化步骤的加入,必须更改图中的无误差编码器,以便由编码器和解码器产生的预测相等。如图所示,这是通过在反馈环中放置一个有损编码器的预测器来完成的,其中,表示为 f ˙ ( n ) \dot{f}(n) f˙(n) 的输入是过去的预测函数与相应的量化误差产生的,即 f ˙ ( n ) = e ˙ ( n ) + f ^ ( n ) \dot{f}(n)=\dot{e}(n)+\hat{f}(n) f˙(n)=e˙(n)+f^(n)其中, f ^ ( n ) \hat{f}(n) f^(n)同以前所定义的一样。这个闭环结构可以防止在解码器的输出处形成误差。

8.2.10小波编码

在这里插入图片描述
小波编码基于以下概念:对图像的像素解除相关的变换系数进行编码比对原图像像素本身进行编码的效率更高。如果变换的基函数——此时为小波函数——将大多数重要的可视信息包装到少量系数中,则剩下的系数可被粗略地量化或截取为零,而图像几乎没有失真。
上图显示了一个典型的小波编码系统。为了对一幅大小为 2 J ∗ 2 J 2^J*2^J 2J2J的图像进行编码,选择一种分析小波 ψ \psi ψ和最小分解级别 J − P J-P JP,并用于计算图像的离散小波变换。如果小波具有互补的尺度函数 φ \varphi φ,则可以使用快速小波变换。不论哪种情况,计算出来的变换会将原图像的大部分转换为水平的、垂直的和对角分解系数,这些系数具有零均值和类似拉普拉斯分布。由于许多计算的系数携带很少的视觉信息,这些系数可以最小的系数和编码冗余来量化和编码。此外,量化可以自适应地越过Р分解级别而利用任何位置相关。一种或多种无损编码方法,如行程编码、霍夫曼编码、算术编码和比特平面编码等,都可以应用到最后的符号编码步骤中。解码可以用与编码相反的操作来实现。

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

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

相关文章

JVM调优常用的工具JPS、JMAP、JSTAT、JSTACK和JCMD的使用详解

查看PID信息 首先启动一个服务 使用jps 和 jps -l 的区别&#xff0c;使用jps -l 能够显示出服务的名称 熟悉JVM调优中常用的工具JMAP、JSTAT和JSTACK JMAP、JSTAT和JSTACK是Java开发中常用的工具&#xff0c;用于分析和调试Java应用程序。它们的使用场景如下&#xff1a; JMA…

S7 1200 CM1241组态modbus rtu

S7 1200 V4.5版本 CM1241 V2.0版本 1 一开始遇到问题 CM1241 绿色灯一直闪烁, PLC 显示LED红色错误 网上查找可能固件不匹配 我一开始选的V2.2 最后选到V2.0才行 如果CM1241 绿灯变为常亮, 这样才是正确组态 如果不是常亮,那么是没有输出的 2 程序 弄了M1.0来启动配置m…

K-means算法

文章目录 1. K-means算法简介2. K-means算法原理2.1 算法具体步骤2.2 k取值方法2.2.1 手肘法2.2.2 轮廓系数法 2.3 K-means2.4 算法终止条件 3. K-means算法特点4. K-means算法应用场景5. K-means算法的Python应用5.1 K-means算法的Python实现5.2 sklearn.cluster.Kmeans函数的…

【Linux】timerfd——定时器

文章目录 前言认识 timerfdAPI timerfdAPI clock 官方示例简单使用epoll实现 前言 在 Linux 系统编程中&#xff0c;使用 timerfd 实现定时器功能是一种更加可靠、高效、灵活的方式。本文是对 timerfd 的简单使用&#xff0c;不涉及太过深入知识&#xff0c;熟练掌握几个常用 …

该死的科斯定理和三条保命原则

* * * 原创&#xff1a;刘教链 * * * 号外&#xff1a;今天在“刘教链”公众号次条发表了《内参&#xff1a;美联储下半年加息时间表和路径》&#xff0c;一号两文无法直接链接&#xff0c;请大家点击公众号卡片进入文章列表打开阅读。星球会员可以直接打开知识星球或discord …

企业级微服务架构实战项目--xx优选3-mq+nacos+es实现上下架

一 nacosmqes实现上下架 1.1 架构图 1.2 工程结构 1.3 核心代码流程 1.3.1 请求product模块 2.修改数据库&#xff0c;推送rabbitmq中 1.3.2 rabbitmq的工具类 1.3.3 search模块中rabbit客户端订阅信息 1.监听器监听信息 2.调用相应的上下架方法 2.1 调用product模块&…

c#网编实验五--WCF和TCP消息通信实验

分别编写服务端和客户端程序&#xff0c;利用基于WCF的TCP技术&#xff0c;实现在线聊天功能&#xff0c;完成在线用户列表管理&#xff0c;消息发送、接收的功能。 在同一个解决方案中&#xff0c;分别编写服务端程序和客户端程序&#xff0c;利用TCP实现简单的群聊功能。 具…

【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(构建领域知识)

一文带领你透视DDD领域驱动模型的本质和设计原理分析指南 前提介绍传统的软件设计方案瀑布设计方法敏捷方法学敏捷方法学的问题和局限性 构建领域知识认识和了解领域内容实体模型介绍分析飞行计划路线(route)路线(route) 领域专家进行交流&#xff0c;相互交换知识挖掘出关键的…

一台服务器最大能支持多少条 TCP 连接

一、一台服务器最大能打开的文件数 1、限制参数 我们知道在Linux中一切皆文件&#xff0c;那么一台服务器最大能打开多少个文件呢&#xff1f;Linux上能打开的最大文件数量受三个参数影响&#xff0c;分别是&#xff1a; fs.file-max &#xff08;系统级别参数&#xff09;&a…

npm发布自己的包

按照上面流程操作

基于Echarts构建停车场数据可视化大屏

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

XSS—存储型xss

xss >跨站脚本攻击>前端代码注入>用户输入的数据会被当做前端代码执行。 原理&#xff1a;使用者提交的XSS代码被存储到服务器上的数据库里或页面或某个上传文件里&#xff0c;导致用户访问页面展示的内容时直接触发xss代码。 输入内容后直接在下方回显&#xff0c;回…

【Python 随练】今天是哪一天?

题目&#xff1a; 输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff1f; 简介&#xff1a; 在本篇博客中&#xff0c;我们将使用Python代码解决一个日期相关的问题&#xff1a;如何确定某一天是给定年份的第几天。我们将提供问题的解析&#xff0c;并给出一…

领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!

“ 接口自动化测试是指通过编写代码或使用工具&#xff0c;模拟用户发送请求&#xff0c;验证接口是否符合设计规范和功能需求的过程。” 如何用 python ddtexcel 实现接口自动化测试 接口自动化测试可以提高测试效率和质量&#xff0c;节省测试成本和时间&#xff0c;保证测试…

使用PyTorch执行特征提取和微调的迁移学习来进行图像分类

使用PyTorch执行特征提取和微调的迁移学习来进行图像分类 1. 效果图2 项目结构3 什么是迁移学习4 如何使用PyTorch进行迁移学习&#xff1f;5 花朵数据集源码train_feature_extraction.pyfine_tune.pyinference.py 参考 这篇博客将介绍如何使用PyTorch深度学习库执行图像分类的…

U盘重装系统Win10详细步骤和方法

当前超多的用户都在使用Win10系统&#xff0c;有些用户想使用U盘来重装一下Win10系统&#xff0c;但不知道具体怎么操作&#xff0c;其实操作起来难度不会很大&#xff0c;可以按照以下小编给大家分享的U盘重装系统Win10详细步骤和方法&#xff0c;就能轻松顺利完成U盘重装系统…

Jetson TX2 NX的GPIO引脚使用方式

Jetson TX2 NX是一款高性能的嵌入式AI计算平台&#xff0c;其中引脚的设计和使用对于开发人员来说非常重要。在本文中&#xff0c;我们将会介绍Jetson TX2 NX的引脚并说明其功能和使用方式。 官方文档官方文档 引脚概述 Jetson TX2 NX具有许多不同类型的引脚&#xff0c;包…

C++ 类的构造函数和析构函数

目录 类的构造函数和析构函数构造函数声明构造函数定义构造函数使用构造函数默认构造函数 析构函数析构函数的声明析构函数的定义 改进Stock类(加入构造函数和析构函数) 类的构造函数和析构函数 构造函数 常规的初始化语法不适用类的初始化 例如&#xff1a; int a 10;//整…

Deepin20.9 安装Mysql

文章目录 mysql下载查看 mysql 状态卸载卸载mysql&#xff1a;清理残留数据检查是否删除完毕 mysql Deepin 安装 下载 从网上下载 https://dev.mysql.com/get/mysql-apt-config_0.8.23-1_all.deb 安装 mysql-apt-config 下载文件名: mysql-apt-config_0.8.23-1_all.deb …

PoseiSwap IDO 即将开启,一览 $POSE 经济模型

以太坊创始人 Vitalik Buterin 曾在今年以太坊黑山大会上&#xff0c;进行了以“以太坊的三个技术挑战&#xff1a;扩容、隐私和用户安全”为主题的演讲&#xff0c;阐明了具有隐私性、可扩展性和安全性的且易访问的区块链生态将是行业发展趋势&#xff0c;或许重复造轮子正在变…