精华内容
下载资源
问答
  • 基于DCT的图像压缩编码算法的MATLAB实现 摘要 随着科学技术的发展,图像压缩技术越来越引起人们的关注。为此从众多的图像压缩编码标准中选取了基于DCT变换的JPEG图像压缩编码算法进行研究,并通过对比分析各种软件...

    41528d3028836879cd698677c3999917.gif基于DCT的图像压缩编码算法的MATLAB实现

    摘要 随着科学技术的发展,图像压缩技术越来越引起人们的关注。为此从众多的图像压缩编码标准中选取了基于DCT变换的JPEG图像压缩编码算法进行研究,并通过对比分析各种软件特性选取了MATLAB进行实验仿真。 首先说明了图像压缩在现代通信中的必要性和可行性,然后讲述了MATLAB及其图像处理工具箱的相关知识,并对基于DCT变换的JPEG图像压缩算法进行了详细的研究,重点介绍了JPEG压缩编码的具体过程和方法 ,详细介绍了编码中DCT变换、量化、熵编码和霍夫曼编码等模块的原理和数学推导以及各模块的功能分析。最后应用MATLAB进行了实验仿真并分析结果得出结论。 实验结果表明基于DCT 变换的JPEG 图像压缩方法简单、方便,既能保证有较高的压缩比,又能保证有较好的图像质量,应用MATLAB仿真出来的结果较好的反应了其编码算法原理。 关键词 JPEG图像压缩;DCT;MATLAB;图像处理工具箱 目 录 摘要I Abstract错误!未定义书签。 第1章 绪论1 1.1 课题背景1 1.1.1 离散余弦变换2 1.1.2 预测技术3 1.2 图像压缩技术的发展和现状3 1.2.1 图像编码技术发展历史3 1.2.2 图像编码技术的现状4 1.3 MATLAB 及其图像处理工具箱4 第2章 图像压缩编码理论算法6 2.1 DCT变换的思想来源6 2.2 基于DCT的JPEG图像压缩编码步骤8 2.2.1 颜色空间的转换和采样8 2.2.2 二维离散余弦变换9 2.2.3 DCT系数的量化12 2.2.4 量化系数的编排13 2.2.5 DC系数的编码14 2.2.6 AC系数的编码15 2.2.7 组成位数据流16 2.2.8 DCT变换在图像压缩中的应用19 2.3代码实现错误!未定义书签。 第1章 绪论 1.1 课题背景 随着信息技术的发展,图像信息被广泛应用于多媒体通信和计算机系统中,但是图像数据的一个显著特点就是信息量大。具有庞大的数据量,如果不经过压缩,不仅超出了计算机的存储和处理能力,而且在现有的通信信道的传输速率下,是无法完成大量多媒体信息实时传输的,因此,为了更有效的存储、处理和传输这些图像数据,必须对其进行压缩,因此有必要对图像压缩编码进行研究。由于组成图像的各像素之间,无论是在水平方向还是在垂直方向上都存在着一定的相关性,因此只要应用某种图像压缩编码方法提取或者减少这种相关性, 就可以达到压缩数据的目的[1]。 数字图像的冗余主要表现在以下几种形式: 空间冗余:规则物体和规则背景的表面物理特性都具有相关性,数字化后表现为数字冗余。例如:某图片的画面中有一个规则物体,其表面颜色均匀,各部分的亮度、饱和度相近,把该图片作数字化处理,生成位图后,很大数量的相邻像素的数据是完全一样或十分接近的,完全一样的数据当然可以压缩,而十分接近的数据也可以压缩,因为恢复后人亦分辨不出它与原图有什么区别,这种压缩就是对空间冗余的压缩。 时间冗余:序列图像(如电视图像和运动图像)和语音数据的前后有着很强的相关性,经常包含着冗余。在播出该序列图像时,时间发生了推移,但若干幅画面的同一部位没有变化,变化的只是其中某些地方,这就形成了时间冗余。 统计冗余:空间冗余和时间冗余是把图像信号看作概率信号时所反应出的统计特性,因此,这两种冗余也被称为统计冗余。 编码冗余:同样长度的编码可以表示不同的信息。 结构冗余:相似的,对称的结构如果都加以记录就出现结构冗余。 知识冗余:由图像的记录方式与人对图像的知识差异而产生的冗余。人对许多图像的理解与某些基础知识有很大的相关性。许多规律性的结构,人可以由先验知识和背景知识得到。而计算机存储图像时还得把一个个像素信息存入,这就形成冗余。 视觉冗余:视觉系统对于图像场的注意是非均匀和非线性的,视觉系统不是对图像的任何变化都能感知。 所谓的图像压缩编码技术就是对要处理的图像数据按一定的规则进行变换和组合, 从而达到以尽可能少的数据流(代码)来表示尽可能多的数据信息。在众多的图像压缩编码标准中,JPEG(Joint Photographic Experts Group)格式是一种称为联合图像专家组的图像压缩格式,它适用于不同类型、不同分辨率的彩色和黑白静止图像[2]。 在JPEG图像压缩算法中,一种是以离散余弦变换(DCT,Discrete Cosine Trans)为基础的有损压缩算法,另一种是以预测技术为基础的无损压缩算法。 1.1.1 离散余弦变换 DCT变换利用傅立叶变换的性质。采用图像边界褶翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。 DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。在空间上具有强相关的信号,反映在频域上是在某些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。图像经DCT变换以后,DCT系数之间的相关性就会变小。而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。从原理上讲可以对整幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送者首先将输入图像分解为8*8或16*16块,然后再对每个图像块进行二维DCT变换,接着再对DCT系数进行量化、编码和传输;接收者通过对量化的DCT系数进行解码,并对每个图像块进行的二维DCT反变换。最后将操作完成后所有的块拼接起来构成一幅单一的图像。对于一般的图像而言,大多数DCT系数值都接近于0,所以去掉这些系数不会对重建图像的质量产生较大影响。因此,利用DCT进行图像压缩确实可以节约大量的存储空间。在实验中,先将输入的原始lena图像分为8*8块,然后再对每个块进行二维DCT变换。MATLAB图像处理上具箱中提供的二维DCT变换及DCT反变换函数如下。 dct2实现图像的二维离散余弦变换。其语法格式为: (1)B=dct2(A) 返回图像A的二维离散余弦变换值,其大小与A相同且各元素为离散余弦变换的系数B(K1,k2)。 (2)B=dct2(A,in,n)或B=dct2(A,[m,n]) 如果m和n比图像A大,在对图像进行二维离散余弦变换之前,先将图像A补零至m*n如果m和n比图像A小。则进行变换之前,将图像A剪切。 idct2可以实现图像的二维离散余弦反变换,其语法格式为: B=idct2(A);B=idct2(A,m,n)或B=idct2(A,[m,n])。 1.1.2 预测技术 它是利用空间中相邻数据的相关性,利用过去和现在出现过的点的数据情况来预测未来点的数据。通常用的方法是差分脉冲编码调制(DPCM)和自适应差分脉冲编码调制(ADPCM)。 1.2 图像压缩技术的

    展开全文
  • 压缩编码

    2021-02-21 08:09:07
    可以用 010101 串给这些单词编码,即将每个单词与一个 010101 串对应,使得任何一个单词的编码(对应的 010101 串)不是另一个单词编码的前缀,这种编码称为前缀码。 使用前缀码编码一段文字是指将这段文字中的每个...

    给定一段文字,已知单词 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an 出现的频率分别 t 1 , t 2 , … , t n t_1,t_2,…,t_n t1,t2,,tn

    可以用 01 01 01 串给这些单词编码,即将每个单词与一个 01 01 01 串对应,使得任何一个单词的编码(对应的 01 01 01 串)不是另一个单词编码的前缀,这种编码称为前缀码。

    使用前缀码编码一段文字是指将这段文字中的每个单词依次对应到其编码。

    一段文字经过前缀编码后的长度为:

    L = a 1 的 编 码 长 度 × t 1 + a 2 的 编 码 长 度 × t 2 + … + a n 的 编 码 长 度 × t n 。 L=a_1 的编码长度 ×t_1+a_2 的编码长度 ×t_2+…+a_n 的编码长度 ×t_n。 L=a1×t1+a2×t2++an×tn

    定义一个前缀编码为字典序编码,指对于 1 ≤ i < n 1≤i<n 1i<n a i a_i ai 的编码(对应的 01 01 01 串)的字典序在 a i + 1 a_{i+1} ai+1 编码之前,即 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an 的编码是按字典序升序排列的。

    例如,文字 E A E C D E B C C E C B D B E 中, 5 5 5 个单词 A 、 B 、 C 、 D 、 E A、B、C、D、E ABCDE 出现的频率分别为 1 , 3 , 4 , 2 , 5 1,3,4,2,5 1,3,4,2,5,则一种可行的编码方案是 A:000, B:001, C:01, D:10, E:11,对应的编码后的 01 01 01 串为 1100011011011001010111010011000111,对应的长度 L L L 3 × 1 + 3 × 3 + 2 × 4 + 2 × 2 + 2 × 5 = 34 3×1+3×3+2×4+2×2+2×5=34 3×1+3×3+2×4+2×2+2×5=34

    在这个例子中,如果使用哈夫曼( H u f f m a n Huffman Huffman)编码,对应的编码方案是 A:000, B:01, C:10, D:001, E:11,虽然最终文字编码后的总长度只有 33 33 33,但是这个编码不满足字典序编码的性质,比如 C C C 的编码的字典序不在 D D D 的编码之前。

    在这个例子中,有些人可能会想的另一个字典序编码是 A:000, B:001, C:010, D:011, E:1,编码后的文字长度为 35 35 35

    请找出一个字典序编码,使得文字经过编码后的长度 L L L 最小。

    在输出时,你只需要输出最小的长度 L L L,而不需要输出具体的方案。

    在上面的例子中,最小的长度 L L L 34 34 34

    输入格式
    输入的第一行包含一个整数 n n n,表示单词的数量。

    第二行包含 n n n 个整数,用空格分隔,分别表示 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an 出现的频率,即 t 1 , t 2 , … , t n t_1,t_2,…,t_n t1,t2,,tn

    请注意 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an 具体是什么单词并不影响本题的解,所以没有输入 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an

    输出格式
    输出一个整数,表示文字经过编码后的长度 L L L 的最小值。

    数据范围
    对 于 100 % 的 评 测 用 例 , 1 ≤ n ≤ 1000 , 1 ≤ t i ≤ 10000 对于 100\% 的评测用例,1≤n≤1000,1≤t_i≤10000 100%1n10001ti10000

    输入样例:

    5
    1 3 4 2 5
    

    输出样例:

    34
    

    样例解释
    这个样例就是问题描述中的例子。如果你得到了 35 35 35,说明你算得有问题,请自行检查自己的算法而不要怀疑是样例输出写错了。

    1. 区间DP
      哈夫曼树

    使得任何一个单词的编码(对应的 01 串)不是另一个单词编码的前缀

    看到这句话自然想到哈夫曼编码(想出用哈夫曼树解决是关键),但是题干下面又说了

    a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an 的编码是按字典序升序排列的

    这说明 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an需要按升序的顺序作为叶子节点出现在树中,既然 n n n个数的位置固定了我们就可以区间DP来解决这个哈夫曼树问题。

    经典哈夫曼树问题可以参考:148. 合并果子 (这道题目是直接用堆来解决,因为果子的位置随意)
    区间DP可以参考这题:282. 石子合并(这道题是裸区间DP)

    #include<bits/stdc++.h>
    
    using namespace std;
    const int inf = 0x3f3f3f3f;
    const int maxn=1e3+10;
    int f[maxn][maxn];
    int s[maxn];
    int n;
    
    int main() {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) {
            scanf("%d", &s[i]);
            s[i] += s[i - 1];
        }
        for (int len = 1; len <= n; len++) {
            for (int l = 1; l + len - 1 <= n; l++) {
                int r = l + len - 1;
                if (l == r) f[l][r] = 0;
                else {
                    f[l][r] = inf;
                    for (int k = l; k < r; k++) {
                        f[l][r] = min(f[l][r], f[l][k] + f[k + 1][r] + s[r] - s[l - 1]);
                    }
                }
            }
        }
        printf("%d\n", f[1][n]);
        return 0;
    }
    
    展开全文
  • 其目的是通过映射改变图像数据的特性,使之更有利于压缩编码。(2)量化器。在限失真编码中要对映射后的数据进行量化,若量化是对映射后的数据逐个的进行的,则称标准量化,若量化是成组的进行的,则称矢量量化,量化...

    图像压缩的过程可以概括成图所示的三个步骤,原始图像经映射变换后的数据再经量化器和熵编码器成为码流输出。

    (1)映射变换。其目的是通过映射改变图像数据的特性,使之更有利于压缩编码。

    (2)量化器。在限失真编码中要对映射后的数据进行量化,若量化是对映射后的数据逐个的进行的,则称标准量化,若量化是成组的进行的,则称矢量量化,量化总会造成某些信息丢失,形成失真,即量化失真或量化噪声,为使失真小,应量化的精细,但压缩比就高不了,这是一对矛盾,应选用恰当的量化级数和量化曲线形状来缓解这对矛盾,量化器的引入是图像编码产生失真的根源,在要求复原图像与原图完全一致的无失真编码器中必须不用量化器,但这样一来,压缩比难以提高,在多数应用中,存在少量失真并不可怕,只要把失真的程

    度和性质控制在允许的范围内,也就是把复原图像的主观质量控制在允许的程度内,就可以

    在满足应用要求的前提下提高压缩比,值得注意的是,对于同样的量化失真,不同的映射变

    换和反变换反映不同性质的复原图像的失真,人眼对某些性质的失真敏感而对另一些性质

    的失真不敏感。

    (3)熵编码器。这一步是用来消除符号编码冗余度的,它一般不产生失真,理想的情况

    是编出的码流的平均码长等于量化后数据的信息熵,常用的编码方法有许多种,例如分组

    码、行程码(RLC)和变长码(VLC)、不分组码以及算术码(Arithmatic Coing等)。行程码传输

    的是数据行程长度而不是数据本身,例如要传108个0,用行程码是改为传行程码标记和行程长度1080在变长码中最常用的是霍夫曼(Hufman)码,基本原则是对出现概率大的数值用短码来编,对出现概率小的数值用长码来编,从而使平均码长减小。降低码率,在实际编码器中常把RLc和Hufman码结合起来,称为霍夫曼行程码,在H.261,JPEG,啪PEG等国际昧准中用到它,而算术码则用于JPEG,H.263,JBIG等国际标准中。

    3) MATLAB仿真实现

    根据压缩编码算法,要将一幅灰度图像进行压缩编码,首先把图像分成8×8的像素块,分块

    进行DCT变换后,根据标准量化表Es]对变换系数进行量化后,再对直流系数(DC)进行预测编码,然后根据标准的Huffman码表蜘进行熵编码,输出压缩图像的比特序列,实现了图像压缩。在接收端,则经过Huffman熵解码、DC系数和AC系数可变长解码、反量化后,再进行反DCT变换得到重建图像。对一幅图像进行编解码的MATLAB程序流程图:

    2、离散余弦变换(DCT)

    2.1DCT的定义

    DCT变换利用傅立叶变换的性质.采用图像边界褶翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换,变后仅包含余弦项.所以称之为离散余弦变换。二维离散余弦变换DCT(DiscreteCosineTransform)的定为.假设矩阵A的大小为MxN。

    其中。Bpq称为矩阵A的DCT系数。在MATLAB中,矩阵的下标从l开始而不是从0开始的,所以MATLAB中的矩阵元素A(1,1)和B(1,1)分别对应于上面定义中的值A加和B。。,

    依此类推。DCT是一种可逆变换,离散反余弦变换定义如下:

    上式的含义是任何MxN的矩阵A都nJ以表示为一系列有下面形式的函数的和:

    这些函数称为DCT变换的基函数。这样.Bpq就可以看成是应用于每个基函数的加权。

    2.2DCT和图像压缩

    DCT编码属于正交变换编码方式.用于去除图像数据的空间冗余。变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。在空问上具有强相

    关的信号,反映在频域上是在某些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。图像经DCT变换以后,DCT系数之间的相关性已经很小。而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。从原理上讲可以对整幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送者首先将输入图像分解为8x8或16x16的块,然后再对每个图像块进行二维DCT变换,接着再对DCT系数进行量化、编码和传输;接收者通过对量化的DCT系数进行解码,并对每个图像块进行的二维DCT反变换.最后将操作完成后所有的块拼接起来构成一幅单一的图像。对于一般的图像而言,大多数DCT系数值都接近于0,町以去掉这些系数而不会对重建图像的质量产生霞大影响。此,利用DCT进行圈像压缩确实可以节约大量的存储空间在宴验中,先将输入的原始lena图像分为8x8的块,然

    后再对每个块进行二维DCT变换。MATLAB图像处理上具箱中提供的二维DCT变换及DCT反变换函数如下。

    2.2.1.dcL2

    dct2实现罔像的二维离散余弦变换.其语法格式为:

    (1)B=dct2(A)

    返回图像A的二维离散余弦变换值,其大小与A相同且各元素为离散余弦变换的系数B(K1,k2)。

    (2)B=dct2(A,in,n)或B=dct2(A,[m,n])

    如果m和n比图像A大,在对图像进行二维离散余弦变换之前,先将图像A补零至mxn如果m和n比图像A小。则进行变换之前,将图像A剪切。

    2.2.2 idct2

    idct2可以实现图像的二维离散余弦反变换,其语法格式为:

    B=idct2(A);B=idct2(A,m,n)或B=idct2(A,[m,n])。

    3图像编码

    3.1图像编码的分类

    图像编码压缩的方法目前有很多,其分类方法根据出发点不同而有差异。

    根据解压重建后的图像和原始图像之间是否具有误差(对原图像的保真程度),图像编码压缩分为无误差(亦称无失真、无损、信息保持)编码和有误差(有失真或有损)编码两大类。

    无损压缩(冗余度压缩、可逆压缩):是一种在解码时可以精确地恢复原图像,没有任何损失的编码方法,但是压缩比不大,通常只能获得1~5倍的压缩比。用于要求重建后图像严格地和原始图像保持相同的场合,例如

    复制、 保存十分珍贵的历史、文物图像等;

    有损压缩(不可逆压缩):只能对原始图像进行近似的重建,而不能精确复原,适合大数工用于存储数字化了的模拟数据。

    压缩比大,但有信息损失。

    3.2

    无损编码

    3.2.1行程编码(RLE)

    在一个逐行存储的图像中,具有相同灰度值的一些象素组成的序列称为一个行程。在编码时,对于每个行程只存储一个灰度值的码,再紧跟着存储这个行程的长度。这种按照行程进行的编码被称为行程编码(Run

    Length Encoding)。

    行程编码对于仅包含很少几个灰度级的图像,特别是二值图像,比较有效。

    3.2.2Huffman编码

    Huffman编码是50年代提出的一种基于统计的无损编码方法,它利用变长的码来使冗余量达到最小。通过一个二叉树来编码,使常出现的字符用较短的码代表,不常出现的字符用较长的码代表。静态Huffman编码使用一棵依据字符出现的概率事先生成好的编码树进行编码。而动态Huffman编码需要在编码的过程中建立编码树。

    由于Huffman编码所得到的平均码字长度可以接近信源的熵,因此在变长编码中是最佳的编码方法,故也称为熵编码。

    具体编码方法是:①把输入元素按其出现概率的大小顺序排列起来,然后把两个具有最小概率的元素之概率加起来;②把该概率之和同其余概率大小顺序排队,然后再把两个最小概率加起来,再重新排队;③重复②,直到最后得到和为1的根节点。

    3.3有损编码

    3.3.1量化

    将图像用较少的灰度级别来表示是最简单的减小数据量的方法,这种方法就是标量量化方法。更一般的情况是,针对连续量的采样过程,量化是用有限个状态来表示连续值。

    3.3.2预测编码

    预测编码根据数据在时间和空间上的相关性,根据统计模型利用已有样本对新样本进行预测,将样本的实际值与其预测值相减得到误差值,再对误差值进行编码。由于通常误差值比样本值小得多,因而可以达到数据压缩的效果。

    模拟量到数字量的转换过程是脉冲编码调制过程PCM

    ,也称PCM编码。对于图像而言,直接以PCM编码,存储量很大。预测编码可以利用相邻象素之间的相关性,用前面已出现的象素值估计当前象素值,对实际值与估计值的差值进行编码。常用的一种线性预测编码方法是差分脉冲编码调制DPCM。

    预测编码通常不直接对信号编码,而是对预测误差编码。当预测比较准确,误差较小时,即可达到编码压缩的目的。这种编码称之为差分脉冲编码调制(DPCM),上图是原理框图。在该系统中,xN为tN时刻的亮度取样值。预测器根据tN时刻之前的样本x1,x2,…,xN-1对xN作预测,得到预测值x'N。xN与x'N之间的误差为

    量化器对eN进行量化得到e‘N。编码器对e’N

    进行编码发送。接收端解码时的预测过程与发送端相同,所用预测器亦相同。接收端恢复的输出信号 是xN的近似值,两者的误差是

    当ΔxN足够小时,输入信号xN 和DPCM系统的输出信号几乎一致。

    3.3.3DCT编码

    DCT变换是图像压缩标准中常用的变换方法,如JPEG标准中将图像按8x8分块利用DCT变换编码实现压缩

    3.4保真度准则

    在图像压缩编码中,解码图像与原始图像可能会差异,因此,需要评价压缩后图像的质量。描述解码图像相对原始图像偏离程度的测度一般称为保真度(逼真度)准则。常用的准则可分为两大类:客观保真度准则和主观保真度准则。

    3.4.1客观保真度准则

    最常用的客观保真度准则是原图像和解码图像之间的均方根误差和均方根信噪比两种。令f(x,y)代表原图像,

    代表对f(x,y)先压缩又解压缩后得到的f(x,y)的近似,对任意x和y,f(x,y)和

    之间的误差定义为:

    若f(x,y)和 均为M×N,则它们之间均方根误差 为:

    如果将

    看作原始图f(x,y)和噪声信号e(x,y)的和,那么解压图像的均方信噪比

    为:

    如果对上式求平方根,就得到均方根信噪比

    3.4.2主观保真度准则

    尽管客观保真度准则提供了一种简单、方便的评估信息损失的方法,但很多解压图最终是供人观看的。事实上,具有相同客观保真度的不同图像,在人的视觉中可能产生不同的在视觉效果。这是因为客观保真度是一种统计平均意义下的度量准则,对于图像中的细节无法反映出来。而人的视觉系统具有独特的特性,能够觉察出来。这种情况下,用主观的方法来测量图像的质量更为合适。1种常用的方法是对1组(不少于20人)观察者显示图像,并将他们对该图像的评分取平均,用来评价一幅图像的主观质量。

    4 MATLAB仿真及效果

    4.1程序

    %程序功能:模拟DCT编码解码过程,生成带“块效应”的图像

    %步骤:灰度图像→DCT→量化→反量化→IDCT

    %下一步目标:实现对任意大小图象的处理。(判断图象大小,若不是2的整数次方,则补零)

    I=imread('cameraman.tif')

    I=im2double(I) %转换图像矩阵为双精度型。

    T=dctmtx(8)%产生二维DCT变换矩阵

    %计算二维DCT,矩阵T及其转置是DCT函数P1*X*P2的参数

    a1=[16 11 10 16 24 40 51 61;

    12 12 14

    19 26 58 60 55;

    14 13 16

    24 40 57 69 56;

    14 17 22

    29 51 87 80 62;

    18 22 37

    56 68 109 103 77;

    24 35 55

    64 81 104 113 92;

    49 64 78

    87 103 121 120 101;

    72 92 95

    98 112 100 103 99 ];

    for i=1:8:200

    for

    j=1:8:200

    P=I(i:i+7,j:j+7);

    K=T*P*T';

    I2(i:i+7,j:j+7)=K;

    K=K./a1;%量化

    K(abs(K)<0.03)=0;

    I3(i:i+7,j:j+7)=K;

    end

    end

    figure;

    imshow(I2);

    title('DCT变换后的频域图像');%显示DCT变换后的频域图像

    for i=1:8:200

    for

    j=1:8:200

    P=I3(i:i+7,j:j+7).*a1;%反量化

    K=T'*P*T;

    I4(i:i+7,j:j+7)=K;

    end

    end

    figure;

    imshow(I4);

    title('复原图像');

    imwrite(I4,'复原图像6.jpg');

    B=blkproc(I,[8,8],'P1*x*P2',T,T')

    %二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个

    mask=[1 1 1 1 0 0 0 0

    1 1 1 0 0 0 0 0

    1 1 0 0 0 0 0 0

    1 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0 ]

    B2=blkproc(B,[8

    8],'P1.*x',mask) %只保留DCT变换的10个系数

    I2=blkproc(B2,[8

    8],'P1*x*P2',T',T) %重构图像

    figure

    imshow(I)

    title('原始图像');

    figure

    imshow(I2);

    title('压缩图像');

    figure

    imshow(dct2(I));

    figure

    mesh(dct2(I))

    colorbar('horiz')

    展开全文
  • 语音压缩编码基本概念1、语音压缩编码2、ADPCM编码2.1、一阶预测与多阶预测2.2、DPCM编码2.3、ADPCM编码3、子带编码 SBC3.1、子带编码 (SBC) 概念3.2、子带编码 (SBC) 的带宽分配3.3、子带编码 (SBC) 的编码速率 ...

    数字通信系列文章:

    数字通信相关基本概念(一)

    数字通信之抽样(二)

    数字通信之量化(三)

    数字通信之编码(四)

    数字通信之语音信号编码主要内容简介(五)

    数字通信之语音压缩编码基本概念(六)

    数字通信之PCM 30/32 时分多路复用通信系统(七)

    1、语音压缩编码

        通常把低于 64kbit/s 速率的语音编码方法称为语音压缩编码技术。

        常见的话音压缩编码方法有:

    • 自适应差值脉冲编码调制(ADPCM)
    • 子带编码(SBC)
    • 参数编码
      语音信号压缩编码的国际标准
      移动通信中语音信号的压缩编码标准

    2、ADPCM编码

    2.1、一阶预测与多阶预测

       仅由前邻样值进行预测称为一阶预测;由多个过去样值进行预测称为多阶预测,预测表达式如下:
    一阶预测:
    S ( n T ) ^ = W 1 S ( n T − T ) \hat{S(nT)}=W_{1}S(nT-T) S(nT)^=W1S(nTT)
    多阶预测:
    S ( n T ) ^ = W 1 S ( n T − T ) + W 2 S ( n T − 2 T ) + . . . + W N S ( n T − N T ) = ∑ i = 1 N S ( n T − i T ) \hat{S(nT)}=W_{1}S(nT-T)+W_{2}S(nT-2T)+...+W_{N}S(nT-NT)=\sum_{i=1}^{N}S(nT-iT) S(nT)^=W1S(nTT)+W2S(nT2T)+...+WNS(nTNT)=i=1NS(nTiT)
    显然多阶预测的精度要高一些,但复杂度也高。

    2.2、DPCM编码

    1)基本原理
        差值脉冲编码调制 DPCM,是利用语音信号的相关性,对相邻样值的差值进行编码。
    d ( n T ) = S ( n T ) − S ( n T − T ) d\left ( nT\right )=S(nT)-S(nT-T) d(nT)=S(nT)S(nTT)
    其中, S ( n T ) S(nT) S(nT) n T nT nT时刻的样值, S ( n T − T ) S(nT-T) S(nTT)为前邻时刻的样值。
        对相邻样值的差值进行编码,实际是对**样值 S ( n T ) S(nT) S(nT)与过去的样值为基础得到的当前样值的估值(预测值) S ( n T ) ^ \hat{S(nT)} S(nT)^**之间的差值进行量化编码的。
    d ( n T ) = S ( n T ) − S ( n T ) ^ d\left ( nT\right )=S(nT)-\hat{S(nT)} d(nT)=S(nT)S(nT)^

    由输入信号进行预测的DPCM系统.png
    2)DPCM的编码速率
        样值差值的动态范围比样值本身的动态范围小得多,则量化电平较少,在保证话音质量要求下,可降低编码速率。相比8位码的1路数码率为64kbit/s的PCM编码,DPCM相对差值编4位码,编码速率为32kbit/s。

        为了容易实现,常采用固定预测器。输入信号与预测信号的差值大,从而造成误差增大,话音质量受影响。故为了提高DPCM方式的质量选择采用自适应措施。

    2.3、ADPCM编码

        在DPCM的基础上增加自适应预测自适应量化

    • 自适应预测的基本思想为,使均方预测误差为最小值,让预测系数的改变与输入信号幅值相匹配。
    • 自适应量化的基本思想为,使均方量化误差最小,让量化间隔 Δ ( t ) \Delta (t) Δ(t)随输入信号的方差而变化,量化间隔 Δ ( t ) \Delta (t) Δ(t)正比于输入信号的方差。即小信号采用小量化间隔,大信号采用大量化间隔。
         相比PCM、DPCM及APCM的话音质量,ADPCM由于采用了自适应量化和自适应预测,ADPCM的量化失真、预测误差均较小,因而它能在32kbit/s数码率的条件下达到PCM系统64kbit/s数码率的话音质量要求。

    3、子带编码 SBC

    3.1、子带编码 (SBC) 概念

       将输入的音频信号的频带分成若干个连续的频段,每个频带称为子带,然后针对各个子带中的音频信号采用不同的编码方案以降低码率,保证编码质量,但复杂度偏高。比如对于低频段采用较多的编码位数,对于高频段采用较少的编码位数,整体上降低码率。
       子带编码是波形编码和频域编码的结合,是属于混合编码。
    子带编码器的工作原理框图.png
       将信号分为若干个子带进行编码有以下两个优点:

    • 对不同的子带合理地分配比特数,可以分别控制各子带的量化电平数目以及相应的重建信号的量化误差值,使误差谱的形状适应人耳听觉特性,获得更好的主观语音质量。由于语声的基础和共振峰主要集中在低频段,则要求保留比较高的精度,所以对低频段的子带可以用较多的比特数来表示其样值,而高频段可以分配比较少的比特。
    • 各子带的量化噪声相对独立,被束缚在各自的子带内,这样就能避免输入电平较低的子带信号被其他子带的量化噪声所淹没。

    3.2、子带编码 (SBC) 的带宽分配

    • 等带宽子带编码
      Δ B k = Δ B = B / M \Delta B{_{k}}=\Delta B=B/M ΔBk=ΔB=B/M
      其中, Δ B k \Delta B{_{k}} ΔBk 为每个子带的频带宽度, B B B为信号的总宽带, m m m为划分子带的个数。
    • 变带宽子带编码
      Δ B k + 1 > Δ B k \Delta B{_{k+1}}> \Delta B_{k} ΔBk+1>ΔBk
         低频段的子带带宽较窄,高频段较宽。这样划分不仅和语音信号的功率相匹配,而且也和语音信号的可懂度或清晰度随频率变化的关系相匹配。

    3.3、子带编码 (SBC) 的编码速率

       子带编码中,编码所需要的总速率 I 为
    I = ∑ k = 1 m f s k R k I = \sum_{k=1}^{m}f_{sk}R_{k} I=k=1mfskRk
    其中, f s k = 2 Δ B k f_{sk}=2\Delta B_{k} fsk=2ΔBk 为第 k 个子带的抽样频率,每个样值采用 R k R_{k} Rk 位比特编码。
    比如若设等带宽子带宽编码的编码速率为
    Δ B k = B m \Delta B_{k}=\frac{B}{m} ΔBk=mB

    f s k = 2 Δ B k = 2 B m f_{sk}=2\Delta B_{k}=2\frac{B}{m} fsk=2ΔBk=2mB
    若各子带样值编码比特数的平均值为R
    则有:
    I = ∑ k = 1 m f s k R k = 2 B R I=\sum_{k=1}^{m}f_{sk}R_{k}=2BR I=k=1mfskRk=2BR

    例如,一个4个子带的SBC系统,子带分别为[0800],[8001600],[16002400],[24003200],即为等带宽子带编码且每个子带的带宽为800Hz,如果忽略同步的边带信息,子带的比特分配分别为3,2,1,0 比特/样值(即每个子带的编码位数 R k R_{k} Rk ),则SBC编码系统总的传输速率为
    I = ∑ k = 1 m f s k R k = 2 B m ∑ k = 1 m R k = 2 × 3200 4 × ( 3 + 2 + 1 + 0 ) = 9.6 k b i t / s I=\sum_{k=1}^{m}f_{sk}R_{k}=2\frac{B}{m}\sum_{k=1}^{m}R_{k}=2\times \frac{3200}{4}\times (3+2+1+0)= 9.6 kbit/s I=k=1mfskRk=2mBk=1mRk=2×43200×3+2+1+0=9.6kbit/s

    个人学习笔记,如有错误还请指正,谢谢。

    展开全文
  • 图像视频压缩编码概述图像视频的特点图像压缩图像编码方法统计编码的基本理论霍夫曼编码香农编码算术编码游程编码变换编码预测编码 图像视频的特点 首先,图像视频信号十分直观确切,其可以较为准确的表述信息,不...
  • 开发与应用 计算机与信息技术 ·23· 基于 Matlab 的图像压缩编码 杨晓 李悦 (贵州大学 计算机与信息学院,贵州 贵阳 550025) 摘 要 本文描述了图像编码压缩方法的主要分类,介绍了每个分类里面的典型算法的原理、...
  • 压缩编码又可以分为无损压缩,有损压损,混合压缩无损压缩编码有:莫尔斯哈夫曼游程编码RLC算术编码香农-费诺编码Lempel-Zir编码视频编码比语音编码描述更直观,本文以视频编码示例讲解主要的压缩编码原理.1....
  • 图像压缩的目的就是用尽量少的字节来表示图像,并且要求重建图像具有较好的质量。利用图像压缩, 可以减轻图像存储和传输的负担, 使得图像在网络上实现快速传输和实时处理成为现实。通常,图像中局部区域的像...
  • 音频压缩编码概述

    2021-11-18 17:47:57
    音频压缩编码概述什么是音频信号人耳听觉系统三特性音频编码技术概览波形编码参数编码混合编码感知编码 什么是音频信号 通常,将人耳可以听到的信号,叫做音频信号(20Hz-20kHz)。 人的发声器官能产生的频段在80-...
  • 1、视频压缩编码标准H.264基本概念 从0开始,以一个H.264码流分析器的形式,解析H.264的压缩算法 高层语言解析 NAL解析 各层语法元素解析 由语法元素重建图像 2、参考代码JM的研究:基本结构和实现方式 H.264\X...
  • 基于DCT变换的图像压缩编码的MATLAB实现今天是一个信息化、网络化的时代,通过Internet可以获取全面的文字、图像、声音等信息,但是,图像信息需要占据大量的存储空间,给原始数(本文共4页)阅读全文>>随着多媒体...
  • JPEG压缩编码流程

    2021-03-04 11:21:33
    JPEG压缩编码流程 基于离散余弦变换(DCT)的JPEG压缩编码过程: 1、正向离散余弦变换(FDCT) 2、量化(Quantization) 3、 Z字形编码(Zigzag Scan) 4、使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码 5...
  • 图像压缩编码实验报告一、实验目的1.了解有关数字图像压缩的基本概念,了解几种常用的图像压缩编码方式;2.进一步熟悉JPEG编码与离散余弦变换(DCT)变换的原理及含义;3.掌握编程实现离散余弦变换(DCT)变换及JPEG编码...
  • 编码:无损压缩的统称 常见熵编码: 1 哈夫曼编码 2 算术编码 3 香农编码 1 哈夫曼编码详解 平衡:按照左小右大来组织结构 哈夫曼:根据使用频率计算位置,出现频率高的就距离根节点近 编码具体方式举例: 比如有...
  • 图像压缩编码——香农/哈夫曼编码一、信息熵二、香农-范诺编码2.1 香农-范诺编码简述2.2 特例详解三、哈夫曼编码3.1 哈夫曼编码简述3.2 特例详解四、RGB图像压缩Ending、参考资料 一、信息熵 信息百度百科:信息,指...
  • jpeg是面向连续色调静止图像的压缩编码标准;其主要是采用预测编码、离散余弦变换以及熵编码的联合编码方式,以去除冗余的图像和彩色数据,属于有损压缩格式,它能够将图像压缩在很小的储存空间,一定程度上会造成...
  • 因为经常与量化一起使用,属于有损数据压缩。 其中包括以下几种形式:DFT变换、DCT变换、Walsh-Hadamard Transform、KL Transform。 图像变换编码是指将以空间域中像素形式描述的图像转换至变换域,以变换系数的...
  • OPUS:延迟小,压缩率高,实时通讯相关应用都在使用,在线教育,音视频会议;WebRTC当中默认使用OPUS,将来会取代掉AAC AAC:应用最广泛,ios/android都包含了硬件的AAC编解码,ffmpeg当中也有很多AAC编解码器,娱乐...
  • 有损:压缩之后无法还原,即为有损;保证不失真情况下尽可能压缩 1 音频压缩关注点: 1.1 消除冗余信息,比如20hz-20000hz之间,才是人敏感区域,其他音频需要过滤掉。 1.2 冗余信息定义:人听觉范围之外,以及遮蔽...
  • 1. 为什么要压缩 试想一下不压缩图像的情形:图像最基本的格式就是RGB,这里以24bit的RGB图像举例,也就是一个像素占3个字节。视频是一帧一帧的图像组成,假设现在的视频分辨率是1080p,帧率是15帧每秒。每秒需要的...
  • 文章编号:1671-2250(2002)01-0028-04基于DCT的JPEG图像压缩编码算法的MATLAB实现钱裕禄,周雪娇(浙江万里学院电子信息工程系,宁波315100)摘要:文章介绍了基于DCT变换的JPEG图像压缩编码算法,并应用MA T LA B影像处理...
  • 第四章多媒体数据压缩编码技术单项选择题1-7:1、下列哪些说法是正确的:答:(b)(1)冗余压缩法不会减少信息量,可以原样恢复原始数据。(2)冗余压缩法减少冗余,不能原样恢复原始数据。(3)冗余压缩法是有损压缩法。(4...
  • 目录一、什么是信息熵二、香农-凡诺编码与霍夫曼编码实例验证三、BMP文件字节计算 一、什么是信息熵 二、香农-凡诺编码与霍夫曼编码实例验证 三、BMP文件字节计算
  • %设置压缩比cr cr = 0.5; %读入并显示原始图像 I1 = imread('lena512.bmp'); figure(1); imshow(I1); %对图像进行FFT I1 = double(I1); fftcoe = blkproc(I1, [8 8], 'fft2(x)'); coevar = im2col(fftcoe, [8 8], '...
  • 【小蜗牛发飙之作】大家都知道,ASCII(不包括扩展ASCII)的最高位是0,所以,我们可以利用这一空位来存储数据,“7BIT压缩编码”就是这么做的。关于7BIT压缩编码的详细算法,可以在网上找到(Simple)。这里,我说一下...
  • 实验四图像压缩编码程序设计一、实验目的和要求本实验为设计性实验,其目的是理解有损压缩的概念,特别是通过K-L变换或DCT变换,掌握压缩编码的基本原理、算法,并通过编程给予实现,对原始图像数据和解压后的图像...
  • 基于小波变换的彩色图像压缩编码算法的MATLAB实现(2009届)本科毕业设计(论文)资料题 目 名 称:基于小波变换的彩色图像压缩编码 算法的MATLAB实现 学 院(部): 计算机与通信工程学院 专 业: 通信工程 ...
  • clear all clc format long; symbol = ['abcd']; pr = [0.1 0.4 0.2 0.3]; seqin = ['cadacdb']; codeword = arencode(symbol, pr, seqin) seqout = ardecode(symbol, pr, ...%给定字符概率的算术编码 %输出:symse.
  • 信息技术! ! 电! 子! 测! 量! 技! 术! ! "#"$%&’()$ *"+,-&"*"(% %"$.(’#’/0第12 卷第3 期4225 年3 月!... 要:首先介绍了基于离散余弦变换的67"/ 图像压缩编码算法,接着用* +%#+89 : ; 对标准灰度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 301,491
精华内容 120,596
关键字:

压缩编码