图像处理总复习6、图像编码

图像压缩编码
数据压缩与信息论基础
图像压缩与编码基本概念
信息论基础
• 图像压缩编码
无损压缩
有损压缩
• 更多图像编码方法
LZW编码
预测编码

为什么要进行图像压缩
图像数据压缩的可能性
数据冗余
图像压缩的目的
图像数据压缩技术的重要指标
图像数据压缩的应用领域
图像编码中的保真度准则
信息论基础
图像压缩模型

1.为什么要进行图像压缩?
数字图像通常要求很大的比特数,这给图像的传输和存储带来相当大的困难。要占用很多的资源,花很高的费用。
如一幅512512的灰度图象的比特数为5125128=256k再如一部90分钟的彩色电影,每秒放映24帧。把它数字化,每帧512512象素,每象素的R、G、B三分量分别占8bit,总比特数为90602435125128bit=97,200M。
如一张CD光盘可存600兆字节数据,这部电影光图像(还有声音)就需要160张CD光盘用来存储。对图像数据进行压缩显得非常必要。

2.图像数据压缩的可能性
一般原始图像中存在很大的冗余度。
用户通常允许图像失真。
当信道的分辨率不及原始图像的分辨率时,降低输入的原始图像的分辨率对输出图像分辨率影响不大。
用户对原始图像的信号不全都感兴趣,可用特征提取和图像识别的方法,丢掉大量无用的信息。提取有用的信息,使必须传输和存储的图像数据大大减少

3. 数据冗余
1)数据冗余的基本概念
描述信源的数据是信息量(信源熵)和信息冗余量之和。
设:n1和n2是在两个表达相同信息的数据集中,所携带的单位信息量。
• 压缩率:——描述压缩算法性能CR = n1 / n2其中,n1是压缩前的数据量,n2是压缩后的数据量
• 相对数据冗余: RD = 1 – 1/CR
例:CR=20; RD = 19/20

2)常见的数据冗余
在数字图像压缩中,常有3种基本的数据冗余:编码冗余、像素间的冗余以及心理视觉冗余

A. 编码冗余:
为表达图像数据需要用一系列符号,用这些符号根据一定的规则来表达图像就是对图像编码。
对每个信息或事件所赋的符号序列称为码字,而每个码字里的符号个数称为码字的长度。
在这里插入图片描述
等长码:对于一个消息集合中的不同消息,用相同长度的不同码字表示,编解码简单,编码效率不高。
变长码:与等长码相对应,对于一个消息集合中的不同消息,也可以用不同长度的码字表示,编码效率高,编码解码复杂
如果一个图像的灰度级编码,使用了多于实际需要的编码符号,就称该图像包含了编码冗余。在这里插入图片描述

例:如果用8位表示该图像的像素,我们就说该图像存在着编码冗余,因为该图像的像素只有两个灰度,用一位即可表示。

B.像素冗余:
由于任何给定的像素值,原理上都可以通过它的邻居预测到,单个像素携带的信息相对是小的。对于一个图像,很多单个像素对视觉的贡献是冗余的。这是建立在对邻居值预测的基础上。原始图像越有规则,各像素之间的相关性越强,它可能压缩的数据就越多。

例:原图像数据:234 223 231 238 235 压缩后数据:234 11 3 -4 -1在这里插入图片描述
类似还有:
图像彩色光谱空间的冗余;
视频图像信号在时间上的冗余;在这里插入图片描述
4.图像压缩的目的
图像数据压缩的目的是在满足一定图像质量条件下,用尽可能少的比特数来表示原始图像,以提高图像传输的效率和减少图像存储的容量。在信息论中称为信源编码。图像从结构上大体上可分为两大类,一类是具有一定图形特征的结构,另一类是具有一定概率统计特性的结构。基于不同的图像结构特性,应采用不同的压缩编码方法。

5.图像数据压缩技术的重要指标
(1)压缩比:图像压缩前后所需的信息存储量之比,压缩比越大越好。
(2)压缩算法:利用不同的编码方式,实现对图像的数据压缩。
(3)失真性:压缩前后图像存在的误差大小。

图像数据压缩技术的重要指标
全面评价一种编码方法的优劣,除了看它的编码效率、实时性和失真度以外,还要看它的设备复杂程度,是否经济与实用。
常采用混合编码的方案,以求在性能和经济上取得折衷。随着计算方法的发展,使许多高效而又比较复杂的编码方法在工程上有实现的可能。

6 图像数据压缩的应用领域
1)办公自动化;
2)医学图像处理;
3)卫星遥感遥测系统;
4)高清晰度电视HDTV; 5)可视电话、会议电视;
6)移动多媒体图像及视频传输:
彩信业务,手机视频;……凡是涉及到图像数据的传输、交换与存储的领域均要求进行图像数据的压缩。

7.图像编码中的保真度准则

图像信号在编码和传输过程中会产生误差,尤其是在有损压缩编码中,产生的误差应在允许的范围之内。在这种情况下,保真度准则可以用来衡量编码方法或系
统质量的优劣。通常,这种衡量的尺度可分为客观保真度准则和主观保真度准则。

(1) 客观保真度准则
通常使用的客观保真度准则有输入图像和输出图像的均方根误差;输入图像和输出图像的均方根信噪比两种。
均方根误差: 设输入图像是由N×N个像素组成,令其为f (x ,y),其中x ,y=0,1,2,…,N-1。这样一幅图像经过压缩编码处理后,送至受信端,再经译码处理,重建原来图像,这里令重建图像为g (x ,y)。它同样包含N×N个像素,并且x ,y=0,1,2,…,N-1。在0,1,2,…,N-1范围内x,y的任意值,输入像素和对应的输出图像之间的误差可用下式表示:在这里插入图片描述
如果把输入、输出图像间的误差看作是噪声,那么,重建图像g(x,y)可由下式表示:
在这里插入图片描述

(2) 主观保真度准则
图像处理的结果,大多是给人观看,由研究人员来解释的,因此,图像质量的好坏,既与图像本身的客观质量有关,也与视觉系统的特性有关。有时候,客观保真度完全一样的两幅图像可能会有完全不相同的视觉质量,所以又规定了主观保真度准则,这种方法是把图像显示给观察者,然后把评价结果加以平均,以此来评价一幅图像的主观质量。

另外一种方法是规定一种绝对尺度,如:电视图像质量评价尺度
在这里插入图片描述
8.信息理论
(一)信源空间概述
1、信息:事物运动状态或存在方式的不确定性的描述;
2、信源空间:随机符号及其出现概率的空间;
3、信源的分类:
(1)连续信源—离散信源—混合信源;
(2)无记忆信源—有记忆信源(相关信源)—有限长度记忆信源(Markov
信源)

(二)信息的度量
1、信息公理
(1)信息由不确定性程度进行度量;
确定事件的信息量为零。 (2)不确定性程度越高信息量越大;
(3)相互独立性与信息量可加性;独立事件的联合信息等于两个独立事件的信息总和。
满足上述公理的函数为:在这里插入图片描述

其中a为信源信号,满足随机性
2、离散无记忆信源(DNMS)的信息量度量:
(1)信源符号 ai的自信息量定义为:
在这里插入图片描述

(2)信源平均自信息量(信息熵)
离散无记忆信源A的平均自信息量(信息熵)定义为:
在这里插入图片描述
例 :设8个随机变量具有同等概率为1/8,计算信息熵H。 解 :根据公式可得:
H=8*[-1/8*(log2(1/8))=8*[-1/8*(-3)]=3
图像熵指该图像的平均信息量,即表示图像中各个灰度级比特数的统计平均值,等概率事件的熵最大
在这里插入图片描述
3、平均码字长
借助熵的概念可以定义量度任何特定码的性能的准则,即平均码字长度。

在这里插入图片描述
其中bi为灰度级di所对应的码字长度。 的单位也是比特/字符。

4、编码效率
在这里插入图片描述
根据信息熵编码理论,可以证明在N/ ≥H条件下,总可以设计出某种无失真编码方法。
• 若编码结果使N/ 远大于H,表明这种编码效率很低,占用的比特数太多。
• 若编码结果使 等于或接近于H,这种状态的编码方法称为最佳编码。
• 若要求编码结果使N/ <H,则必然丢失信息而引起图像失真。这就是在允许失真条件下的一些失真编码方法。在这里插入图片描述
在这里插入图片描述
5、压缩比
• 压缩比是衡量数据压缩程度的指标之一。目前常用的压缩定义为
在这里插入图片描述
其中LB为源代码长度,Ld为压缩后代码长度,Pr为压缩比。
• 压缩比的物理意义是被压缩掉的数据占据源数据的百分比。当压缩比Pr接近100%时压缩效果最理想

9.图像的压缩模型在这里插入图片描述
源数据编码:完成原数据的压缩。
通道编码: 为了抗干扰,增加一些容错、校验位,实际上是增加冗余。
通 道: 如Internet、广播、通讯、可移动介质在这里插入图片描述
在这里插入图片描述
1.无损压缩编码
无损压缩算法中删除的仅仅是图像数据中冗余的信息,因此在解压缩时能精确恢复原图像,无损压缩的压缩比很少有能超过3:1 的,常用于要求高的场合。

在这里插入图片描述
2.有损压缩编码
有损压缩是通过牺牲图像的准确率以实现较大的压缩率,如果容许解压图像有一定的误差,则压缩率可显著提高。有损压缩在压缩比大于30:1时仍然可重构图像,而如果压缩比为10:1到20:1,则重构的图像与原图几乎没有差别
在这里插入图片描述
无损压缩之变长编码
等长码:对于一个消息集合中的不同消息,用相同长度的不同码字表示,编解码简单,编码效率不高。
变长码:与等长码相对应,对于一个消息集合中的不同消息,也可以用不同长度的码字表示,编码效率高,编码解码复杂。

在这里插入图片描述
费诺编码方法认为:在数字形式的码字中的0和1是相互独立的,因而其出现的概率也应是相等的(为0.5或接近0.5),这样就可确保传输的每一位码含有1比特的信息量。
若设输入的离散信源符号集为X={x0, x1, …, xn},其出现概率为P(xi),欲求的费诺码为W={w0, w1, …, wn},则费诺码编码方法的步骤为∶
费诺码编码方法的步骤:

(1)把输入的信源符号和其出现的概率按概率值的非递增顺序从上到下依次并列排列。
(2)按概率之和相等或相近的原则把X分成两组,并给上面或概率之和较大的组赋值1,给下面或概率之和较小的组赋值0。
(3)再按概率之和相等或相近的原则把现有的组分成两组,并给上面或概率之和较大的组赋值1,给下面或概率之和较小的组赋值0。
(4)重复(3)的分组和赋值过程,直至每个组只有一个符号为止。
(5)把对每个符号所赋的值依次排列,就可得到信源符号集X的费诺码。

无损压缩之变长编码-费诺编码
例:设有信源符号集X={x1, x2, …, x8} ,其概率分布为P(x1)=0.25,
P(x2)=0.25,P(x3)=0.125,P(x4)=0.125, P(x5)=0.0625,P(x6)=0.0625,
P(x7)=0.0625,P(x8)=0.0625,求其费诺码w={w1, w2, …, w8}。
即有:
P(x1)=0.25=1/4
P(x2)=0.25=1/4
P(x3)=0.125=1/8
P(x4)=0.125=1/8
P(x5)=0.0625=1/16
P(x6)=0.0625=1/16
P(x7)=0.0625=1/16
P(x8)=0.0625=1/16

在这里插入图片描述
哈夫曼编码是一种利用信息符号概率分布特性的变字长的编码方法。对于出现概率大的信息符号编以短字长的码,对于出现概率小的信息符号编以长字长的码。
编码步骤:
I. 将信源符号按出现概率从大到小排成一列,然后把最末两个符号的概率相加,合成一个概率。
II. 把这个符号的概率与其余符号的概率按从大到小排列,然后再把最末两个符号的概率加起来,合成一个概率。
III. 重复上述做法,直到最后剩下两个概率为止。
IV. 从最后一步剩下的两个概率开始逐步向前进行编码。每步只需对两个分支各赋予一个二进制码,如对概率大的赋予码0,对概率小的赋予码1。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中:P1=0.21, P2=0.09, P3=0.11, P4=0.13, P5=0.07, P6=0.12, P7=0.08, P8=0.19;将该信源进行哈夫曼编码。
2. 设一幅灰度级为8(分别用S0、S1、S2、S3、S4、S5、 S6、S7表示)的图像中,各灰度所对应的概率分别为0.40、0.18、 0.10、0.10、 0.07、 0.06、 0.05、0.04;现对其进行哈夫曼编码,并计算其信源熵、平均码字长度和编码效率

霍夫曼编码的优点:
1)当对独立信源符号进行编码时,霍夫曼编码可对每个信源符
号产生可能是最少数量(最短)码元的码字。
2)霍夫曼编码是所有变长编码中平均码长最短的。如果所有信源符号的概率都是2的指数,霍夫曼编码的平均长度将达到最低限,即信源的熵。 3)对于二进制的霍夫曼编码,平均码字的平均长度满足关系:
H<L<H+1
从理论上分析,采用哈夫曼编码可以获得最佳信源字符编码效果;
实际应用中,由于信源字符出现的概率并非满足2的负幂次方,因此往往无法达到理论上的编码效率和信息压缩比;

以信源字符序列{x,y}为例:

设字符序列{x,y}对应的概率为{1/3,2/3},Nx和Ny分别表示字符x和y的最佳码长,则根据信息论有:
在这里插入图片描述
• 字符x、y的最佳码长分别为1.58bit和0.588bit;
• 这表明,要获得最佳编码效果,需要采用小数码字长度,这是不可能实现的;
• 即采用哈夫曼方法对{x,y}的码字分别为0和1,也就是两个符号信息的编码长度都为1。对于出现概率大的字符y并未能赋予较短的码字;
• 实际编码效果往往不能达到理论效率;
• 为提高编码效率,Elias等人提出了算术编码算法。

算术编码的定义
算术编码将整个输入序列的符号依据它们的概率映射为实数轴上区间[0,1)内的一个小区间,再在该小区间内选择一个代表性的二进制小数,作为实际的编码输出。
例如:算术编码对某条信息的输出为 1010001111,那么它表示小数 0.1010001111,也即十进制数 0.64。

编码原理
算术编码方法是将被编码的信源消息表示成0-1之间的一个间隔,即小数区间,消息越长,编码表示它的间隔就越小;
以小数表示间隔,表示的间隔越小所需的二进制位数就越多,码字就越长。反之,间隔越大,编码所需的二进制位数就少,码字就短。
算术编码将被编码的图像数据看作是由多个符号组成的字符序列,对
该序列递归地进行算术运算后,成为一个二进制分数;
接收端解码过程也是算术运算,由二进制分数重建图像符号序列

编码过程

  1. 建立概率模型,即通过扫描统计,获得各信源符号的概率大小
  2. 编码过程,即扫描符号序列,依次分割相应的区间,最终得到符号序列所对应的码字
  3. 编码过程的数学描述
    设由m个信源符号X=x1,…,xm组成的长度为N的输入符号序列中,各信源符号的概率分布为Pj(j=1,2,…,M;k=1,2,…,N;M≤N ) , [0,1)为对输入符号序列进行算术编码的初始区间,则对第k个输入符号进行算术编码的子分区间[StartN,EndN)定义为:
    在这里插入图片描述
    编码举例
    例:设某信源取自符号集S={a,b,c,d,e,!},!表示编码结束(终止符),各符号概率和初始子区间如下,设待编码的为“dead!”,编码器和解码器的初值区间[0,1)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    经过上述计算 , 字符集 ={a,b,c,d,e,!} 被描述在实数[0.612868,0.61288)子区间内,即该区间内的任一实数值都惟一对应该符号序列{a,b,c,d,e,!} ,譬如0.61288,转化成二进制小数0.1001110,最后编码输出1001110表示字符集{a,b,c,d,e,!} 。

在这里插入图片描述
算术编码解码
解码器首先输入符号及区间,重构表1.然后输入其余码字。比如第一个数字是“6”,解码器立即知道是形如0.6…的数字。该数字位于d的子区间[0.4, 0.7)中,所以第一个符号就是d。然后从该数字中减去d子区间的低端值0.4,再除以d子区间宽度
0.3,以消除符号d对码字的影响。结果是0.727667,告诉解码器下一个符号是 e (因为e的子区间是[0.7, 0.9))。

算数编码解码
为了从码字中消除符号x的影响,解码器执行Code = (Code - LowRange(x) ) / L
的操作,L是符号x的子区间宽度。下总结了本例解码步骤。
在这里插入图片描述
课堂作业:
1、假设信源符号为{a, b, c, d},这些符号的概率分别为{0.1, 0.4, 0.2, 0.3 },对输入消息序列cadacdb进行算术编码。
2、已知符号a, e, i, o, u, x的出现概率分别是0.1, 0.3, 0.1, 0.2, 0.1, 0.2,对0.23355进行算术解码。

无损压缩之变长编码-算术编码
1、假设信源符号为{a, b, c, d},这些符号的概率分别为{ 0.1, 0.4, 0.2, 0.3 },对输入消息序列cadacdb进行算术编码。

解:根据这些概率可把间隔[0, 1)分成4个子间隔:[0, 0.1), [0.1, 0.5), [0.5, 0.7), [0.7, 1) 。信息可综合在表中。
在这里插入图片描述

编码时首先输入的符号是c,找到它的编码范围是[0.5, 0.7)。由于消息中第二个符号a的编码范围是[0, 0.1),因此它的间隔就取[0.5, 0.7)的第一个十分之一作为新间隔[0.5, 0.52)。依此类推,编码第3个符号d时取新间隔为[0.514, 0.52),… 。消息的编码输出可以是最后一个间隔中的任意数
在这里插入图片描述
静态模型如何实现?
对信息 bccb 中只有两个字符,概率分布为Pb = 0.5,Pc = 0.5。压缩中不必更新概率分布,每次区间的划分都按此分布
在这里插入图片描述
静态模型缺点(即为什么用自适应模型?)

静态模型无法适应信息的多样性
必须消耗一定的空间保存静态模型统计出的概率分布 静态模型需要在压缩前对信息内字符的分布进行统计,这一统计过程将消耗大量的时间,使得本来就比较慢的算术编码压缩更加缓慢。
对较长的信息,静态模型统计出的符号概率是该符号在整个信息中的出现概率,而自适应模型可以统计出某个符号在某一局部的出现概率或某个符号相对于某一上下文的出现概率。

考虑某条信息中可能出现的字符仅有a b c三种,我们要压缩保存的信息为bccb。
假设我们对a b c三者在信息中的出现概率一无所知(我们采用的是自适应模型),不妨设字符出现概率相等 {Pa, Pb, Pc} = {1/3, 1/3, 1/3}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自适应算术编码的解压
解压缩之前仍设三个字符的概率相等,并得出第一幅分布图。先在二进制流数据前面加上0和小数点把它变成小数 0.1010001111,也就是十进制 0.64。发现 0.64 在分布图中落入字符 b 的区间内,输出字符b,并得出三个字符新的概率分布。类似压缩时采用的方法,按照新的概率分布划分字符b的区间。在新的划分中0.64落入
了字符 c 的区间,则输出字符c。同理类推,完成全部解压缩过程 。在这里插入图片描述
1、假设信源符号为{a, b, c, d},对输入消息序列cadacdb进行自适应算术编码。
2、已知信源符号{ a, e, i, o, u, ! },对0.23355进行自适应算术解码

算术编码的特点:
算术编码是信息保持型编码,它不像哈夫曼编码,无需为一个符号设定一个码字
算术编码分为固定方式和自适应方式两种编码;
选择不同的编码方式,将直接影响到编码效率;
自适应算术编码的方式,无需先定义概率模型,适合于无法知道信源字符概率分布的情况;
当信源字符出现的概率比较接近时,算术编码效率高于哈夫曼编码的效率,在图像通信中常用它来取代哈夫曼编码;
实现算术编码算法的硬件比哈夫曼编码复杂。

等长码:对于一个消息集合中的不同消息,用相同长度的不同码字表示,编解码简单,编码效率不高。
等长编码:游程编码

把具有相同属性值的邻近栅格单元合并在一起,合并一次称为一个游程。游程用一对数字表达,其中,第一个值表示游程长度,第二个值表示游程属性值。每一个新行都以一个新的游程开始
在这里插入图片描述
无损压缩之等长编码-行程编码
概念:
行程:具有相同灰度值的像素序列。
• 编码思想:去除像素冗余。
用行程的灰度和行程的长度代替行程本身。 
例:设重复次数为 iC, 重复像素值为 iP
编码为:iCiP iCiP iCiP
编码前:aaaaaaabbbbbbcccccccc
编码后:7a6b8c

在这里插入图片描述
只在各行(或列)数据的代码发生变化时依次记录该代码以及相同代码重复的个数;在这里插入图片描述
在这里插入图片描述
块式编码是将游程扩大到两维情况,把多边形范围划分成若干具有同一属性的正方形,然后对各个正方形进行编码。 • 块式编码的数据结由初始位置(行列号)、半径和属性代码组成在这里插入图片描述
分析:
对于有大面积色块的图像,压缩效果很好
直观,经济,是一种无损压缩
对于纷杂的图像,压缩效果不好,最坏情况下,会加倍图像在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
无损压缩之等长编码-四叉树编码

是根据栅格数据二维空间分布的特点,将空间区域按照4个象限进行递归分割(2n×2n,且n>1),直到子象限的数值单调为止,最后得到一棵四分叉的倒向树。根结点:最上面的一个结点,它对应于整个图形。
非叶节点:指含有不同像元值的象限。
叶子结点:不能再分的结点,可能落在不同的层上。在这里插入图片描述
在这里插入图片描述
• 位于结点层次较高的子象限尺寸较大,说明其分解深度小,也即分割次数少,而低层次上的象限尺寸就较小,反映其分解深度大即分割次数多
• 这样编码后,可反映出整个图形区域的空间地物分布情况,在某些位置上单一地物分布较广,则采用较少的分割次数。在地物较复杂,变化较大的区域,则用加深分解深度,增加分割次数的方式编码

图像变换编码-小波变换编码

小波变换压缩编码的基本思想是利用小波变换将原图像转换为小波域上的系数,由于小波变换的能量集中作用,会使原图像的绝大部分能量集中在少量小波系数上,通过量化处理,忽略一些能量很小的系数,只保留那些能量较大的系数进行编码,就可达到图像压缩的目的

小波变换编码具备如下的特点:
(1)小波变换能将一信号分解成同时包含时域和频域局部特性的变换系数,但传统变换(如DFT和DCT等)会失去信号在时域的局部特性。
(2)小波变换能兼顾不同应用中对时、频不同分辨率的要求,具有“数学显微镜”的美称,但传统变换(DFT和DCT 等)虽然在频域具有最高分辨率,但在时域无分辨率而言
(3)小波变换和传统正交变换都有能量守恒和能量集中的作用,但小波变换能有效消除传统变换的分块效应的存在以及分块效应对图像编码的影响。
(4)小波变换能根据图像特点自适应地选择小波基,从而既能保证解压后图像的质量,又能提高压缩比。而DCT则不具备自适应性。
(5)通过小波变换可以充分利用变换系数之间的空间相关性对系数建模,进一步提高压缩比。鉴于小波变换编码的上述优点,小波变换已成为图像压缩领域的
研究和应用热点,并取代DCT而成为JPEG2000、MPEG4和MPEG7等新的图像编码标准中的变换方法。

图像的小波变换编码
当图像经小波变换后,能量进行了重新分配,绝大多数能量集中在低频,这样就可根据人的视觉生理和心理特点,对不同的小波图像采取不同的量化和编码处理,以达到压缩的目的。

1. 利用小波变换进行图像压缩的步骤
一般来说,利用小波变换进行图像压缩需要经过以下步骤:
(1)利用离散小波变换分解原图像,即将原图像分解为小波子图像。
(2)对所得到的四个小波子图像,根据人的视觉生理和心 理特点分别作不同策略的量化和编码处理。这一步的核心是去除系数间的相关性。
(3)在接收方对不同的编码采用不同的解码方法。
(4)通过小波反变换还原原图像,整个过程如下图所示。由于量化的不可逆,小波变换编码是属于有损压缩编码在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 常见的数据冗余;
  2. 数据压缩的评价指标;
  3. 哈夫曼编码的计算;
  4. 行程编码;
  5. 算术编码;
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

位沁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值