精华内容
下载资源
问答
  • 常用无损图像压缩编码
    千次阅读
    2021-04-23 08:58:27

    基于DCT的图像压缩编码算法的MATLAB实现_数学_自然科学_专业资料。. I 摘要 随着科学技术的发展,图像压缩技术越来越引起人们的关注。为此从众 多的图像压缩编码标准......

    MATLAB 及其图像处理工具箱 ...4 第 2 章 图像压缩编码理论算法 6...

    基于Matlab的JPEG图像压... 3页 免费 一种基于小波变换图像压... 5页 免费 基于DCT的图像压缩编码算... 33页 5下载券 基于小波变换的弹载图像........

    第3章图像编码 3.1 图像编码基础 3.2 信息论基础与熵编码 3.3 预测编码 3.4 变换编码 3.1 图像编码基础 3.1.1 图像压缩编码的必要性 3.1.2 图像压缩编码......

    图像压缩;Matlab;离散余弦变换;小波变换;索引图像 中图法分类号:TP391 文献标识码:A 文章编号:1000-7024(2009)12.2998.03 ImagecompressionanditscompletedbasedCAO......

    2. 图像的量化 ? 3. 图像变换 ? 4. 预测编码 基于MATLAB的数字图像压缩算法研究作者姓名:杨月桃 专业班级:数学与应用数学系1班 指导教师:陈辉 索引 ? 1. ......

    这样就达到图像压缩的目 的。 仅供参照! 5 1.3算法的matlab实现及其仿真结果 实验程序: 2.基于小波变换的图像压缩 2.1 基于小波的图像压缩编码思想 小波变换......

    . 一种基于 MATLAB 的 JPEG 图像压缩具体实现方法 说明:该方法主要是对 FPGA 硬件实现编码的一个验证,MATLAB 处理时尽量 选择了简单化和接近硬件实现需要。 JPEG......

    理解有损压缩和无损压缩的概 念,了解几种常用的图像压缩编码方式,利用 matlab 进行图像压缩算法验 . Matlab 的图像压缩技术 一.目的要求 掌握 Matlab 图像图像压缩......

    图像压缩与编码一、实验目的 1.了解图像压缩编码原理; 2.掌握常用的图像压缩算法及编程实现; 3.学会使用 MATLAB 软件中关于图像压缩编码的函数;二、实验设备联想......

    MATLAB图象压缩_计算机软件及应用_IT/计算机_专业资料。1. 图像压缩的...

    和掌握 MATLAB 程序设计方法; 2.3 设计要求现灰度图像的 Huffman 编码和解码恢复图像;处理结果要求最终图像显示,且计算图 像的信息熵,平均码字长度,编码效率,压缩......

    (:)).^2 ); SNR = original_image_energy/noise_energy; 以下是 1-9 号原图像,放到 matlab 的.m 文件目录里,重命名 9 个图像名为 1、2、3、4、5、......

    Key word:Image compression DCT transform MATLAB 基于 DCT 变换的图像压缩及 matlab 仿真一.图像压缩编码的概念 压缩的理论基础是信息论,从信息论的角度来看,压缩......

    .. 一种基于 MATLAB 的 JPEG 图像压缩具体实现方法 说明:该方法主要是对 FPGA 硬件实现编码的一个验证,MATLAB 处理时尽量 选择了简单化和接近硬件实现需要。 ...

    为此从众 多的图像压缩编码标准中选取了基于 DCT 变换的 JPEG 图像压缩编码算法 进行研究,并通过对比分析各种软件特性选取了 MATLAB 进行实验仿真。 首先说明了图像......

    数字图像处理及MATLAB实现7_数学_自然科学_专业资料。7.1 概述(Introduction) 7.2 无失真图像压缩编码(Lossless image compression) 7.3 有限失真图像压缩编码(......

    基于DCT的JPEG图像压缩编码算法的MATLAB实现_钱裕禄_信息与通信_工程...

    科技咨询导报 2007 NO.29ScienceandTechnologyConsultingHerald 高新技术 基于 MATLAB的JPEG 压缩编码朱孔亮 (辽宁大学信息科学与技术学院 110036)摘 要: JPEG 图像......

    更多相关内容
  • 霍夫曼图像压缩编码无损压缩,压缩率为2倍,压缩效果很好。
  • 哈夫曼编码的matlab代码无损图像压缩 霍夫曼编码应用于图像以获得无损图像压缩 Project使用Matlab库压缩图像,然后重建原始图像。 HuffmanImageCoding.m接收要压缩的图像的输入,然后使用霍夫曼编码压缩文件,并返回...
  • 理解有损压缩和无损压缩的概念;了解几种常用图像压缩编码方式。利用MATLAB程序进行图像压缩。
  • 系 信息与机电工程系 专业 电子信息工程 年级 2013 级 姓名 学号 136710093 实验课程 数字图像处理 实验室号_ 实验设备号 实验时间 2015.6.16 指导教师签字 成绩 ... 了解几种常用图像压缩编码方式 5. 进一步熟悉 DCT
  • 行程编码又名游程编码,是无损压缩的一种,本文件用于图像压缩及解压,压缩前后图像完全一样
  • 实用的全分辨率学习无损图像压缩 Fabian Mentzer,Eirikur Agustsson,Michael Tschannen,Radu Timofte,Luc Van Gool 苏黎世联邦理工学院 CVPR'19(口头报告) 抽象的 我们提出了第一个实用的学习无损图像压缩...
  • 编码图像数据总位数dataBitCount(4字节,即一个32为无符号整数) 原图像文件中不同的数据单元的数目weightMapValCount(4字节,即一个32为无符号整数) 权重映射表(表中每一项包含1个字节的原数据和4个字节即32...
  • 问题1: 实现行程编码压缩, 计算原图和压缩以后的尺寸,计算压缩率并比较分析; 问题2: 实现哈夫曼压缩, 计算原图和压缩以后的尺寸,计算压缩率并比较分析.
  • 自行设计预测算法实现一维无损预测压缩。将预测压缩后的一维向量(由预测误差组成),进行一维行程/游程编码。计算原图、最终行程/游程编码压缩后数据所需要的存储空间,计算压缩率。 2. 分析 对于灰度图像的任意...

    1. 要求

    选择灰度图像,按照行的方式展开像得到一维的向量。按照一维预测的公式:

    \widehat{x_{k}}=\sum_{i=1}^{k-1}a_{i}x_{i}

    自行设计预测算法实现一维无损预测压缩。将预测压缩后的一维向量(由预测误差组成),进行一维行程/游程编码。计算原图、最终行程/游程编码压缩后数据所需要的存储空间,计算压缩率。

    2. 分析

    对于灰度图像I的任意一行像素X,其表达式如下,其中n为灰度图像I的列数。

    X=[x_{1}, x_{2}, ..., x_{n}]

    给定系数A表达式如下

    A=[a_{1}, a_{2}, ..., a_{n-1}]

    X的第k个元素的预测值\hat{x_{k}}可表示为

    \widehat{x_{k}}=\sum_{i=1}^{k-1}a_{i}x_{i}

    预测误差e_{k}可表示为

    e_{k}=x_{k}-\hat{x_{k}}

    特别地,当k=1时,\hat{x_{k}}不存在,则e_{k}=x_{k}

    更一般地,用矩阵进行简化可得

    \hat{x_{k}}=[x_{1}, x_{2}, ..., x_{k-1}] * [a_{1}, a_{2}, ..., a_{k-1}]^{T}

    e_{k}=x_{k}-[x_{1}, x_{2}, ..., x_{k-1}] * [a_{1}, a_{2}, ..., a_{k-1}]^{T}

    则可以写作如下代码

    clear, close all
    I = imread('cameraman.tif');
    [row, col] = size(I); % 获取I的行数和列数
    a = rand(col-1, 1);   % col-1个系数
    e = zeros(size(I));   % 误差矩阵
    for i = 1: row        % 遍历所有行
        e(i,1) = I(i,j);  % 第i行的第1列元素误差等于实际值
        for j = 2: col    % 从第2列开始遍历
            e(i,j) = I(i,j) - I(i,1:j-1) * a(1:j-1);
        end
    end

    为了方便,我使用rand函数生成长度为col-1(对应于上述的n-1)的列向量,其中的元素为0~1之间的随机浮点数。

    实际运行上述代码的话,除了精度问题的报错,最大的问题是运行时间长。

    3. 编码阶段-矩阵优化

    可以观察到,上述循环的本质是逐列计算,因此我们可以从每一列入手,进行优化。

    对于灰度图像I的第j列像素Y_{j}, 其表达式如下,其中m为灰度图像I的行数,I_{i,j}表示第i行第j列的值。

    Y_{j}=[I_{1,j}, I_{2,j}, ..., I_{m,j}]^{T}

    于是可以得到 

    [\hat{I_{1,j}}, \hat{I_{2,j}}, ..., \hat{I_{m,j}}]^{T}=\begin{bmatrix} I_{1,1} & I_{1,2}& ...&I_{1,j-1} \\ I_{2,1} & I_{2,1}& ... &I_{2,j-1} \\ ... & ... & ... & ...\\ I_{m,1} & I_{m,2}&... & I_{m,j-1} \end{bmatrix} * [a_{1}, a_{2}, ..., a_{j-1}]^{T}

     即

    \hat{Y_{j}}=[Y_{1}, Y_{2}, ..., Y_{j-1}] * [a_{1}, a_{2}, ..., a_{j-1}]^{T}

    于是

    E_{j}=Y_{j}-[Y_{1}, Y_{2}, ..., Y_{j-1}] * [a_{1}, a_{2}, ..., a_{j-1}]^{T}

    其中E_{j}表示误差矩阵中的第j

    特别地,当j=1时,\hat{Y_{1}}不存在,则E_{1}=Y_{1}

    因此图像编码阶段的代码可写为

    clear, close all
    I = imread('cameraman.tif');
    [row, col] = size(I); % 获取I的行数和列数
    a = rand(col-1, 1);   % col-1个系数
    e = zeros(size(I));   % 生成误差矩阵
    e(:,1) = I(:,1);      % 第一列特殊计算
    II = double(I);       % I的副本,类型为double
    for j = 2:col         % 遍历列
        e(:,j) = II(:,j) - (II(:,1:j-1) * a(1:j-1));
    end
    e = round(e);         % 将误差矩阵取整

    这里说下要生成一个I的副本,且类型为double,这是因为在下面的矩阵乘法运算的时候,I的默认类型是uint8,范围在0~255,uint8的矩阵和任何矩阵进行乘法运算,结果仍为uint8,即超出255的变为255,低于0的变为0,浮点数自动取整。为了得到较为准确的误差矩阵,需要在double类型上进行运算,于是预先生成一个double类型的I的副本。

    4. 图像解码

    只需要将上述编码过程逆操作即可得到图像解码对应的代码

    J = zeros(size(e));
    J(:,1) = e(:,1);
    for j = 2: col
        J(:,j) = e(:,j) + (J(:,1:j-1) * a(1:j-1));
    end
    J = uint8(J); %解码图像

    至此,可以解释图像编码的应用场景。比如,张三需要将大量图像通过网络传输给李四,由于网络带宽限制,单张图像都无法直接传输,于是张三和李四事先约定了一个编码系数向量A。

    在发送端,每一张图片都使用A编码得到一个误差矩阵e;

    传输的过程中只需要传输误差矩阵e;

    在接收端,只需要用A对误差矩阵e进行解码即可得到原始图像。

    我们知道,这里的误差矩阵其实和图像的规模是一致的,即行数和列数都等于图像的行数和列数。

    灰度图像中的每一个像素都由8位2进制进行编码表示,实际范围在0~256。

    想要传输误差矩阵e,一个方法是使用调优过的系数向量A,使得生成的每一个误差矩阵中的任何一个元素,都可以用小于8位的2进制编码进行表示;另一个方法就是题目要求的,对误差矩阵进行游程编码。

    游程编码(Run Length Coding,RLC)是一种简单的熵编码(无损压缩编码)方法。其基本原理是,将具有相同数值的、连续出现的信源符号用“符号+符号出现次数”的形式表示。如“zzxxxxyyyyyzzz”将被编码为“2z4x5y3z”。

    这样就存在一个问题:假如图像中相邻的像素均不相等,那么游程编码非但起不到压缩作用,还会因为需要传输像素的出现次数,而使数据量增加一倍。因此,直接对图像进行编码时,游程编码只适用于有较多灰度相同的图像,也就是说图像最好包含大片的平坦区。

    想要得到效果出色的游程编码结果,就必须使误差矩阵中出现较多连续的值,而误差矩阵中值分布情况,只与图像本身和编码系数向量A有关。

    这里就有几个引人深思的问题:

    1. 能不能找出一个A,并且给出证明,任意的图像经过A编码得到的误差矩阵,均适合使用游程编码,或者误差矩阵中的每一个元素可以用7位2进制甚至6位2进制进行编码。
    2. 退而求其次,对于一个图像,能不能通过特定算法,花费较少计算代价计算出一个A,将这个特定的A和它对应的图像一起传输。

    5. 游程编码

    对于一个列向量K,对其游程编码后得到矩阵L,其中第一列表示值,第二列表示这个值连续出现的次数。

    K = \begin{bmatrix} 12\\ 12\\ 13 \\ 14 \\ 14 \\ 13 \\ 12 \end{bmatrix}\Rightarrow L=\begin{bmatrix} 12 & 2\\ 13 & 1\\ 14 & 2\\ 13 & 1\\ 12 & 1 \end{bmatrix}

     代码如下

    %% 游程编码
    function [L, size1, size2] = RLC(K)
    L = [K(1) 1];
    Lj = 1;
    for i = 2: length(K)
        if K(i) == L(Lj,1)
            L(Lj,2) = L(Lj,2) + 1;
        else
            Lj = Lj + 1;
            L(Lj,:) = [K(i) 1];
        end
    end
    L_1 = ceil(log2(max(L(:,1))-min(L(:,1))+1));
    L_2 = ceil(log2(max(L(:,2))-min(L(:,2))+1));
    size1 = L_1 * length(L);
    size2 = L_2 * length(L);
    end

    这里举例说明一下L_1的含义,如果矩阵L的第一列中最大值为260,最小值为20,则max(L(:,1))-min(L(:,1))+1的结果为260-20+1=241,显然20-260之间有241个连续的值,可以被8位2进制所编码表示,ceil(log2(X))计算的就是X能被几位二进制所表示。

    L_1和L_2分别表示第一列和第二列能被几位二进制表示,size1和size2分别表示第一列和第二列占用的总位数。

    size1+size2就是编码L矩阵所需要的总位数(总位数除以8就是总字节数)

    6. 完整代码

    clear, close all
    I = imread('cameraman.tif');
    subplot(1,3,1), imshow(I), title('原始图像')
    [row, col] = size(I);
    a = -1 + 2 * rand(col-1, 1);
    a = a / 200;
    e = zeros(size(I));
    %% encode
    %  由原图像I和预测系数a生成误差矩阵e
    e(:,1) = I(:,1);      % 第一列特殊计算
    II = double(I);       % I的副本,类型为double
    for j = 2:col         % 遍历列
        e(:,j) = II(:,j) - (II(:,1:j-1) * a(1:j-1));
    end
    e = round(e);         % 将误差矩阵取整
    subplot(1,3,2), imshow(uint8(e)), title('误差矩阵')
    %% decode 
    %  该过程只用到误差矩阵e和预测系数a
    J = zeros(size(e));
    J(:,1) = e(:,1);
    for j = 2: col
        J(:,j) = e(:,j) + (J(:,1:j-1) * a(1:j-1));
    end
    J = uint8(J);          % 解码图像
    subplot(1,3,3), imshow(J), title('解码图像')
    %% run length encode
    K = e';
    K = K(:);
    [L, size11, size12] = RLC(K);       % 对K进行游程编码
    [L2, size21, size22] = RLC(L(:,2)); % 对游程编码的矩阵的第二列再次进行游程编码
    total_size = 8 * length(I(:));
    % 图像压缩率 = 原始图像所需空间 / 压缩图像所需空间
    ratio = total_size / (size11+size21+size22);
    
    %% 游程编码函数
    function [L, size1, size2] = RLC(K)
    L = [K(1) 1];
    Lj = 1;
    for i = 2: length(K)
        if K(i) == L(Lj,1)
            L(Lj,2) = L(Lj,2) + 1;
        else
            Lj = Lj + 1;
            L(Lj,:) = [K(i) 1];
        end
    end
    L_1 = ceil(log2(max(L(:,1))-min(L(:,1))+1));
    L_2 = ceil(log2(max(L(:,2))-min(L(:,2))+1));
    size1 = L_1 * length(L);
    size2 = L_2 * length(L);
    end
    

    展开全文
  • 本文简要介绍了图像压缩的重要性和常用无损图像压缩算法,分析了快速高效无损图像压缩算法(FELICS)的优势,随后详细分析了该算法的编码步骤和硬件实现方案,最后公布了基于该方案的FPGA性能指标。和其他压缩算法...
  • 夫霍曼编码matlab代码实现图像压缩传输 Matlab 图像压缩中的无损图像压缩和传输是通过霍夫曼编码和解码算法完成的。 霍夫曼编码算法由优先队列实现。
  • 针对vga接口输出的雷达图像无损压缩编码算法。
  • 打开图像为Bmp图像文件: compdwt.m: 压缩图像的主要代码我们只运行 compdct.m decompdwt.m: 为了重建我们的图像,我们在这里的意思是如果我们想解压缩之前获得的文件(.Hdwt),只有我们运行此代码并选择感兴趣
  • matlab霍夫曼图像压缩方法
  • 无损编码/压缩算法: 问题1: 实现行程编码压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析; 问题2: 实现哈夫曼压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并...

    要求:

    无损编码/压缩算法:

    • 问题1: 实现行程编码压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析;
    • 问题2: 实现哈夫曼压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析;
    • 问题3: 实现一维无损预测压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析.

    1、问题及说明

    (1)实现行程编码压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析。

    基本思路是把数据看成一个线性序列,而这些数据序列组织方式分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于连续的重复数据块采用的压缩策略是用一个字节表示数据块重复的次数,然后在这个数据字节后面存储对应的数据字节本身;对于连续不重复的数据序列,表示方法和连续的重复数据块序列的表示方法一样,只不过前面的数据重数属性字节的内容为1。

    (2)实现哈夫曼压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析

    基本思路是给定有权重的一系列数据(带权重),从中挑选最小权重的两个数据,组成一棵树,得到的父节点再插入到数据系列当中。

    (3)实现一维无损预测压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析。

    基本思想是通过对每个像素中新增信息进行提取和编码,以此来消除像素间的冗余,这里新增信息是指像素当前实际值和预测值的差。也就是说,如果已知图像一个像素离散幅度的真实值,利用其相邻像素的相关性,预测它的可能数值,再求两者的差。利用这种具有预测性质的差值,再量化、编码传输,其效果更佳,这种方法称为DPCM法。

    2、效果展示

    (1)行程编码压缩

    (2)哈夫曼压缩

    (3)一维无损预测压缩

    3、实验结果分析

    1)RLE压缩方案是一种极其成熟的压缩方案,特点是无损失压缩,既节省了磁盘空间又不损失任何图像数据。RLE有一个缺点,如果内容像ABCABCABC的话使用这种算法文件会增大,就是1A1B1C1A1B1C1A1B1C了,更长,就达不到压缩的效果了。

    上面两张图片,由于其内容序列的优劣,它们的压缩比就不同。

    2)因为要用额外的位保存和传输Huffman树而消耗掉一些存储位,所以为了编解码的方便,本已经减少的数据量又增加了一些。

    如果文件比较大的话,这一点的数据根本不算什么,所占比例很小。但是,如果压缩的文件本来就很小的话,那么这就不少了。一般来说,经典的Huffman算法的压缩比不是很高,这是无损压缩的“通病”。

    4.完整代码

    (1)RLE

    clear
    I1=imread('lena.tiff');
     
    %转换为二值图像
    J=rgb2gray(I1);
    I2=J(:);
    I2length=length(I2);
    figure,imshow(J);
     
    for i=1:1:I2length
        if I2(i)>=127
            I2(i)=255;
        else I2(i)=0;
        end
    end
     
    I3=reshape(I2,512,512);         %重建二维数组图像
    figure,imshow(I3);
     
    %对原图像进行行程编码
    X=I3(:);                        %令X为新建的二值图像的一维数据组
    x=1:1:length(X);                %显示行程编码之前的图像数据
    figure,plot(x,X(x));
    j=1;
    I4(1)=1;
     
    %行程编码程序段
    for z=1:1:(length(X)-1)
        if X(z)==X(z+1)
            I4(j)=I4(j)+1;
        else data(j)=X(z);          %data(j)代表相应的像素数据
            j=j+1;
            I4(j)=1;
        end
    end
     
    data(j)=X(length(X));           %最后一个像素数据赋值给data
    I4length=length(I4);            %计算行程编码后的所占字节数
    y=1:1:I4length;                 %显示编码后数据信息
    figure,plot(y,I4(y));
    CR=I4length/I2length;           %比较压缩前后的大小
    disp(['原图 Bit:                  ',num2str(I2length),' bit']);
    disp(['压缩图像 Bit:               ',num2str(I4length),' bit']);
    disp(['压缩率:                     ',num2str(CR)]);

    (2)哈夫曼压缩

    clear;
    clear all;
    A=imread('baboon.tiff');
    I=rgb2gray(A);
     
    [M,N] = size(I);
    I1 = I(:);
    P = zeros(1,256);
    %获取各符号的概率;
    for i = 0:255
        P(i+1) = length(find(I1 == i))/(M*N);
    end
     
    k = 0:255;
    dict = huffmandict(k,P); %生成字典
    enco = huffmanenco(I1,dict); %编码
    deco = huffmandeco(enco,dict); %解码
    Ide = col2im(deco,[M,N],[M,N],'distinct'); %把向量重新转换成图像块;
     
    decolength=length(deco); 
    encolength=length(enco); 
     
    subplot(1,2,1);imshow(I);title('原图');
    subplot(1,2,2);imshow(uint8(Ide));title('压缩');
     
    OB=encolength;
    sumcode=decolength;
    CR=sumcode/OB;
    disp(['原图 Bit:                  ',num2str(OB),' bit']);
    disp(['压缩图像 Bit:               ',num2str(sumcode),' bit']);
    disp(['压缩率:                     ',num2str(CR)]);

    (3)一维无损预测压缩

    I=imread('baboon.tiff'); 
     
    I=rgb2gray(I);
    x=double(I);
    y=LPCencode(x);   
    xx=LPCdecode(y);
     
    figure(1);
    subplot(121);
    imshow(I);
    subplot(122);
    imshow(mat2gray(y));
     
    e=double(x)-double(xx);
    [m, n]=size(e);
    erms=sqrt(sum(e(:).^2)/(m*n))    
     
    figure(2);
    subplot(121);
    [h, f]=hist(x(:));    
    bar(f, h, 'k');
     
    subplot(122);
    [h, f]=hist(y(:));    
    bar(f, h,'k');

     

     

    展开全文
  • 使用霍夫曼编码进行图像压缩1952年,大卫·霍夫曼(David Huffman)是著名的麻省理工学院的研究生,他开发了一种优雅的算法来进行无损压缩,这是他学习的一部分。 该算法现在称为霍夫曼编码。 霍夫曼编码可用于压缩...
  • 实验五 图像编码压缩 ...巩固图像压缩编码的理论与方法; 加深对图像DCT变换的理解; 编程实现图像压缩,对比压缩前后图像的压缩比。 二、实验基础 图像编码压缩的主要目的是节省存储空间,提高传输速度,解

    实验五 图像编码压缩

    图像中存在多种冗余信息,包括编码冗余,像素间冗余和心里视觉冗余等,通过减少图像中的冗余信息可以减少图像数据量达到图像压缩的目的。图像编码压缩方法有很多种,从信息量的角度出发可分为有损编码压缩和无损编码压缩两种有损编码压缩以牺牲图像质量为代价来获得高压缩比。

    一、实验目的

    1. 进一步掌握MATLAB程序设计方法;
    2. 巩固图像压缩编码的理论与方法;
    3. 加深对图像DCT变换的理解;
    4. 编程实现图像压缩,对比压缩前后图像的压缩比。

    二、实验基础

    图像编码压缩的主要目的是节省存储空间,提高传输速度,解码图像和压缩编码前的图像严格相同不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比,解码图像和原始图像是有差别的,允许有一定的失真,这种压缩称为有损压缩,高压缩比是以牺牲图像质量为代价的,压缩的实现方法是对图像重新进行编码,希望用更少的树。数据表视图相高效编码的主要方式是尽可能去除图像中的冗余成分,从而使最小的码元包含最大的图像信息。
    本次实验借助离散余弦变换说明图像的编码压缩。DTC变换具有集中高度相关数据能量的优势,经过DTC变换后,矩阵的能量集中在矩阵的左上角,右下角大多数DTC系数值接近零,对于通常的图像来说,舍弃这些接近零的DTC系数值并不会造成重构图像的画面质量显著下降,所以利用DTC变换进行的。图像压缩可以节约大量的存储空间,压缩应在最合理的近似原图像的情况下使用最少的系数变换。使用系数的多少也决定了压缩比的大小。
    MATLAB中的相关函数有:
    dct2:二维离散余弦变换。
    Idct2:二维离散余弦反变换。
    dctmtx:计算DTC变换矩阵。
    blkproc:对图像进行分块处理。

    三、实验仪器及设备

    计算机、Matlab图像处理软件、待处理图像

    四、实验内容及步骤

    1. 熟悉MATLAB中相关函数的用法
      (1)dct2:二维离散余弦变换。
    语法
    B=dct2(A)
    B=dct2(A,m,n)
    B=dct2(A,[m,n])
    描述
    B=dct2(A)返回A的二维离散余弦变换。矩阵B和A的大小一样,并包含离散余弦变换系数
    B=dct2(A,m,n)是在变换以前用0对矩阵A进行填充,填充到m*n的大小。如果m或者n比A相应的小,dct2会将A缩短。
    B=dct2(A,[m,n])同上面一样。
    

    help dct
    dct Discrete cosine transform.
    Y = dct(X) returns the discrete cosine transform of vector X.
    If X is a matrix, the dct operation is applied to each
    column. For N-D arrays, dct operates on the first non-singleton
    dimension. This transform can be inverted using IDCT.

    Y = dct(X,N) pads or truncates the vector X to length N 
    before transforming.
    
    Y = dct(X,[],DIM) or Y = dct(X,N,DIM) applies the dct operation along
    dimension DIM.
    Y = dct(...,'Type',K) specifies the type of discrete cosine transform
    to compute.  K can be one of 1, 2, 3, or 4, to represent the dct-I,
    dct-II, dct-III, and dct-IV transforms, respectively.  The default
    value for K is 2 (the dct-II transform).
    

    (2)Idct2:二维离散余弦反变换。

    help idct2
    idct2 2-D inverse discrete cosine transform.
    B = idct2(A) returns the two-dimensional inverse discrete
    cosine transform of A.

    B = idct2(A,[M N]) or B = idct2(A,M,N) pads A with zeros (or
    truncates A) to create a matrix of size M-by-N before
    transforming. 
    
    For any A, idct2(DCT2(A)) equals A to within roundoff error.
    
    The discrete cosine transform is often used for image
    compression applications.
    

    (3)dctmtx:计算DTC变换矩阵。

    help dtcmtx
    dctmtx Discrete cosine transform matrix.
    D = dctmtx(N) returns the N-by-N DCT transform matrix. D*A
    is the DCT of the columns of A and D’*A is the inverse DCT of
    the columns of A (when A is N-by-N).

    If A is square, the two-dimensional DCT of A can be computed
    as D*A*D'. This computation is sometimes faster than using
    DCT2, especially if you are computing large number of small
    DCT's, because D needs to be determined only once.
    

    (4)blkproc:对图像进行分块处理。

    help blkproc
    blkproc Distinct block processing for image.

    blkproc is not recommended.  Use BLOCKPROC instead.
    
    B = blkproc(A,[M N],FUN) processes the image A by applying the function
    FUN to each distinct M-by-N block of A, padding A with zeros if
    necessary.  FUN is a FUNCTION_HANDLE that accepts an M-by-N matrix, X,
    and returns a matrix, vector, or scalar Y:
    
        Y = FUN(X)
    
    blkproc does not require that Y be the same size as X.  However, B is
    the same size as A only if Y is the same size as X.
    

    2.利用DCT变换进行简单的图像变换
    图像经过DCT变换后,其低频分量都集中在左上角,高频分量分布在右下角。
    (1)DCT变换
    在这里插入图片描述
    在这里插入图片描述

    图一 离散余弦变换图
    (2)DCT分块矩阵变换
    在这里插入图片描述

    在这里插入图片描述

    图二 离散余弦变换图

    思考:压缩后的图像数据量减少,图像高频信息丢失,图像边缘较为模糊,图像变得不清晰。
    压缩比:(7.0404-7.0115)/ 7.0404=0.4%
    

    五、实验心得体会

    1.学会了使用离散余弦函数进行数据压缩的两种方法。
    2.图像在进行压缩之前要进行相应的转换,比如归一化、灰度转换等处理工作。
    3.分区域压缩算法中大小写要对应正确。

    展开全文
  • 图像压缩编码基础——笔记整理

    千次阅读 2022-02-18 17:03:29
    图像压缩基础 1)压缩的原因:数字视频码率高达216Mb/s。数据量之大,无论是网络传输,还是存储都构成巨大压力。在保持信号质量的前提,要降低码率及数据量。 2)压缩的原理: 图像信息存在着大量的规律性或相关性,在...
  • #资源达人分享计划#
  • 行列缩减: 输入:8x8 块输出:行参考向量(逻辑)8x1 列参考向量(逻辑)1x8 简化矩阵行列扩展: 输入:行参考向量、列参考向量和缩减矩阵输出:8x8块参考:Saif Alzahir,“彩色地图和图形压缩”,国际图像处理...
  • 然后,对病变区域所选取的重要系数进行无损Huffman编码,同时对背景区域所得小波系数进行量化和多级树集合分裂算法(SPIHT)编码实现压缩;最后,融合各区域经解码和逆变换得到的图像获得整幅重构图像。实验结果表明,新...
  • 小波变换将图像分为不同但相互关联的多分辨率和多级子带,... 实验结果表明,IWLCA具有较高的编码效率,还可以有效降低无损图像压缩编码比特率。 与主流的无损算法JPEG-LS和JPEG 2000相比,压缩率得到了显着提高。
  • 针对离散色调彩色图像的数据冗余特点,在游程编码(RLE)与字典编码的基础上,提出一种混合编码方式,对离散色调彩色图像进行无损压缩.实验结果表明,该方法可以取得0.1~0.6bits/pixel的压缩后像素深度,压缩率明显优于JPEG...
  • 音视频-编解码-VDR雷达图像无损压缩编码技术研究.pdf
  • 在此基础上,根据最大预测残差值确定编码块各像素所属陪集的索引,通过传输每个像素所属陪集的索引代替预测残差,实现高光谱图像压缩。对星载可见/红外成像光谱仪(AVIRIS)获取的高光谱图像进行实验,并与已有的典型算法...
  • 基于matlab的无损压缩算法实验,实现差分脉冲编码调制算法的编码器与解码器,实现游长编码编码器与解码器
  • 在信息论中,数据压缩是数据处理的难题之一,尤其是图像无损压缩。...提出一种基于两步编码法的图像有效压缩算法,即建模和编码,算法与JPEG-LS灰度图像压缩标准进行对比实验,实验结果证明该算法提高了压缩效率。
  • 实验报告 课程名称 数字图像处理 实验名称 图像压缩编码技术 实验地点 明向校区 D001 机房 专业班级 测控 1401 班 学号 2014001796 学生姓名 郭佳鑫 ...了解几种常用图像压缩编码方式 4.利用 MATLAB 程序进行图像压
  • 简述了医学图像无损压缩的基本步骤,对差分脉冲编码调制(DPCM)在无损压缩中的作用进行了分析和实现,并在此基础上,提出将整数小波变换与DPCM相结合的医学图像无损压缩方法。通过对比和分析实验结果可知,采用该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,233
精华内容 4,493
热门标签
关键字:

常用无损图像压缩编码