精华内容
下载资源
问答
  • 霍夫曼编码图像压缩

    2015-09-27 16:49:18
    一个运用霍夫曼编码对一幅灰度图像进行压缩的程序
  • 用MATLAB做的基于霍夫曼编码图像压缩,里面有个文件时专门的霍夫曼编码函数,自己写的。
  • 利用霍夫曼编码图像压缩、解压缩
  • 数字图像霍夫曼编码压缩编码MATLAB实现
  • 这是我从网上下载的一个huffman编码和解码的程序,哪位高手帮我解释一下是什么意思啊,我是个新手,看不懂代码,谢谢啊%编码clear;f0=imread('lena.jpg');subplot(121)imshow(uint8(f0));xlabel('\fontsize{16}原始...

    这是我从网上下载的一个huffman编码和解码的程序,哪位高手帮我解释一下是什么意思啊,我是个新手,看不懂代码,谢谢啊

    %编码

    clear;

    f0=imread('lena.jpg');

    subplot(121)

    imshow(uint8(f0));

    xlabel('\fontsize{16}原始图像');

    f=abs(f0/4)-10;

    [M,N]=size(f);

    p=zeros(1,61);

    for t=1:61

    count=0;

    for i=1:M

    for j=1:N

    if f(i,j)==t-1

    count=count+1;

    end

    end

    end

    p(t)=count;p0=p;

    end

    core=cell(61,1);

    sign=zeros(61);

    for hh=1:60

    re=M*N;

    for t=1:61

    if (p(t)0)

    re=p(t);

    end

    end

    t=1;

    while (p(t)~=re)&(t<61)

    t=t+1;

    end

    if sign(t,1)==0

    core{t}='0';

    else

    core{t}=['0',core{t}];

    i=1;

    while (sign(t,i)~=0)&(i<61)

    core{sign(t,i)}=['0',core{sign(t,i)}];

    i=i+1;

    end

    end

    p(t)=0;

    cou=t;

    re1=M*N;

    for t=1:61

    if (p(t)0)

    re1=p(t);

    end

    end

    t=1;

    while (p(t)~=re1)&(t<61)

    t=t+1;

    end

    if sign(t,1)==0

    core{t}='1';

    else

    core{t}=['1',core{t}];

    i=1;

    while (sign(t,i)~=0)&(i<61)

    core{sign(t,i)}=['1',core{sign(t,i)}];

    i=i+1;

    end

    end

    p(t)=p(t)+re;

    cou1=t;

    i=1;

    while (sign(t,i)~=0)&(i<61)

    i=i+1;

    end

    sign(t,i)=cou;

    i=i+1;

    j=1;

    while (sign(cou,j)~=0)&(j<61)

    sign(t,i)=sign(cou,j);

    i=i+1;

    j=j+1;

    end

    end

    fc=cell(M,N);

    for i=1:M

    for j=1:N

    if f(i,j)<61

    fc{i,j}=core{f(i,j)+1};

    else

    fc{i,j}='0';

    end

    end

    end

    imcore=char();

    for i=1:M

    for j=1:N

    imcore=[imcore,fc{i,j}];

    end

    end

    save picture imcore core;

    %解码

    clear;

    load  picture.mat %载入图片码流和编码对应表

    Nc=size(core);

    Nic=size(imcore);

    flag=0;

    i=1;

    j=1;

    n=1;

    cz=char();

    f=zeros(128);

    for n=1:400930

    if flag==0

    cz=[cz,imcore(n)];

    else

    cz=imcore(n);

    flag=0;

    end

    for t=1:61

    if strcmp(cz,core{t})

    f(j,i)=t;

    flag=1;

    if i>127;

    i=1;

    j=j+1;

    else

    i=i+1;

    end

    break;

    end

    end

    end

    f=uint8(f*4+35);

    subplot(122)

    imshow(f);xlabel('\fontsize{16}解码后的图像');

    展开全文
  • matlab上利用霍夫曼编码图像压缩、解压缩,给大家提供一个参考。
  • 哈夫曼编码实现图像压缩,是自己整理的讲稿,希望对大家有用
  • 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。
  • 基于matlab霍夫曼图像压缩重建,过程为:1.符号概率 2.合并概率 3.更新概率 4.分配码字 。 代码亲测可用,有很高的参考价值
  • 本文主要介绍了基于哈夫曼编码图像压缩技术的原理、算法、过程,并利用matlab作为编程开发工具,开发了一个对256色BMP图像进行压缩.解压缩的软件系统,验证了算法的合理性和可行性. 为了节省空间,在对数据进行编码时,...

    1 简介

    哈夫曼编码是一种数据编码方式,以哈夫曼树--即最优二叉树.用带杈路径长度最小的二叉树,对数据进行重编码,经常应用于数据压缩.在计算机信息处理中,"哈夫曼编码"是一种一致性编码法(又称"熵编码法"),用于数据的无损压缩.本文主要介绍了基于哈夫曼编码图像压缩技术的原理、算法、过程,并利用matlab作为编程开发工具,开发了一个对256色BMP图像进行压缩.解压缩的软件系统,验证了算法的合理性和可行性.

    为了节省空间,在对数据进行编码时,可以对那些经常出现的数据指定较少的位数表示, 而那些不常出现的数据指定较多的位数表示,从而降低冗余,这样从总的效果看就节省了存储空间。基于哈夫曼编码图像压缩的基本原理是频繁使用的数据用较短的代码代替,较少使用的数据用较长的代码代替,每个数据的代码各不相同,这是一种典型的无损编码方式。这些代码都是二进制码,且码字长度是不均匀的、平均码率可以接近信息源熵值的一种编码。编码过程是先对图像数据扫描一遍, 计算出各种像素出现的概率,按概率的大小建立最优二叉树(二叉树的叶子节点刚好表示的图像中的某种像素)并给二叉树的每个分支赋特定权值(0或1), 然后通过遍历二叉树读取从根节点到叶子节点的路径权值字符串,即给每种像素指定了不同长度的唯一编码, 由此得到一张该图像所有像素的哈夫曼编码表。编码后的图像数据记录的是每个像素的码字,而码字与实际像素值的对应关系记录在码表中,码表是附在图像文件中的。基于哈夫曼编码图像压缩技术借用了热力学中的名词“熵”(Entropy) 来表示一条信息中真正需要编码的信息量:如考虑用0 和1组成的二进制数码为含有n个符号的某条信息编码,假设符号En在整条信息中重复出现的概率为Pn,则该符号的熵也即表

    2 部分代码

    function varargout = MainForm(varargin)
    % MAINFORM MATLAB code for MainForm.fig
    %     MAINFORM, by itself, creates a new MAINFORM or raises the existing
    %     singleton*.
    %
    %     H = MAINFORM returns the handle to a new MAINFORM or the handle to
    %     the existing singleton*.
    %
    %     MAINFORM('CALLBACK',hObject,eventData,handles,...) calls the local
    %     function named CALLBACK in MAINFORM.M with the given input arguments.
    %
    %     MAINFORM('Property','Value',...) creates a new MAINFORM or raises the
    %     existing singleton*. Starting from the left, property value pairs are
    %     applied to the GUI before MainForm_OpeningFcn gets called. An
    %     unrecognized property name or invalid value makes property application
    %     stop. All inputs are passed to MainForm_OpeningFcn via varargin.
    %
    %     *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
    %     instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
    
    % Edit the above text to modify the response to help MainForm
    
    % Last Modified by GUIDE v2.5 19-May-2012 11:20:45
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
      'gui_Singleton', gui_Singleton, ...
      'gui_OpeningFcn', @MainForm_OpeningFcn, ...
      'gui_OutputFcn', @MainForm_OutputFcn, ...
      'gui_LayoutFcn', [] , ...
      'gui_Callback',   []);
    if nargin && ischar(varargin{1})
      gui_State.gui_Callback = str2func(varargin{1});
    end
    
    if nargout
      [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
      gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
    
    
    % --- Executes just before MainForm is made visible.
    function MainForm_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject   handle to figure
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to MainForm (see VARARGIN)
    
    % Choose default command line output for MainForm
    handles.output = hObject;
    clc;
    % axis(handles.axes1); cla reset; box on;
    % set(gca, 'XTickLabel', '', 'YTickLabel', '');
    %
    % axis(handles.axes2); cla reset; box on;
    % set(gca, 'XTickLabel', '', 'YTickLabel', '');
    handles.Img = 0;
    handles.ImgH = 0;
    handles.ImgL = 0;
    handles.strH = 0;
    handles.strL = 0;
    InitFig(hObject,handles);
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes MainForm wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = MainForm_OutputFcn(hObject, eventdata, handles)
    % varargout cell array for returning output args (see VARARGOUT);
    % hObject   handle to figure
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    
    % Get default command line output from handles structure
    varargout{1} = handles.output;
    
    
    % --------------------------------------------------------------------
    function File_Callback(hObject, eventdata, handles)
    % hObject   handle to File (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    
    
    % --------------------------------------------------------------------
    function OpenFile_Callback(hObject, eventdata, handles)
    % hObject   handle to OpenFile (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    % 打开
    warning off all;
    % 载入图像
    [FileName,PathName,FilterIndex] = uigetfile({'*.bmp;*.jpg;*.tif;*.png;*.gif', ...
      '所有图像文件';...
      '*.*','所有文件' },'载入图像',...
      '.\images\\lena.bmp');
    if isequal(FileName, 0) || isequal(PathName, 0)
      return;
    end
    InitFig(hObject, handles);
    Img = imread(fullfile(PathName, FileName));
    axes(handles.axes1);
    imshow(Img, []);
    handles.Img = Img;
    handles.ImgH = 0;
    handles.ImgL = 0;
    guidata(hObject, handles);
    
    
    function textInfo_Callback(hObject, eventdata, handles)
    % hObject   handle to textInfo (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'String') returns contents of textInfo as text
    %       str2double(get(hObject,'String')) returns contents of textInfo as a double
    
    
    % --- Executes during object creation, after setting all properties.
    function textInfo_CreateFcn(hObject, eventdata, handles)
    % hObject   handle to textInfo (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   empty - handles not created until after all CreateFcns called
    
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
      set(hObject,'BackgroundColor','white');
    end
    
    
    % --------------------------------------------------------------------
    function SnapImg_Callback(hObject, eventdata, handles)
    % hObject   handle to SnapImg (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    % 截图
    SnapImage();
    
    % --------------------------------------------------------------------
    function SaveImg_Callback(hObject, eventdata, handles)
    % hObject   handle to SaveImg (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    % 保存
    if isequal(handles.ImgH, 0) && isequal(handles.ImgL, 0)
      msgbox('请进行压缩处理!', '提示信息');
      return;
    end
    if ~isequal(handles.ImgH, 0)
      SaveImage(handles.ImgH);
    end
    if ~isequal(handles.ImgL, 0)
      SaveImage(handles.ImgL);
    end
    msgbox('处理结果保存成功!', '提示信息');
    
    % --------------------------------------------------------------------
    function Exit_Callback(hObject, eventdata, handles)
    % hObject   handle to Exit (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    close();
    
    
    % --------------------------------------------------------------------
    function CompressAlgorithm_Callback(hObject, eventdata, handles)
    % hObject   handle to CompressAlgorithm (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    
    
    % --------------------------------------------------------------------
    function Huffman_Callback(hObject, eventdata, handles)
    % hObject   handle to Huffman (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    if isequal(handles.Img, 0)
      msgbox('请载入图像!', '提示信息');
      return;
    end
    if isequal(handles.ImgH, 0)
      dataImg = handles.Img;
      if ndims(dataImg) == 3
          dataImg = rgb2gray(dataImg);%灰度化处理
            axes(handles.axes2); imshow( dataImg , []);%显示
      end
      sz = size(dataImg);
      [zipped,info] = Mat2Huff(dataImg);%霍夫编码
      unzipped = Huff2Mat(zipped, info);%霍夫解码
      dataImg = double(reshape(dataImg, sz));
      unzipped = double(reshape(unzipped, sz));
      info_dataImg = whos('dataImg');
      info_zipped = whos('zipped');
      info_unzipped = whos('unzipped');
      S = PSNR(dataImg, unzipped);
      str0 = sprintf('-----------------霍夫曼压缩-----------------\n');
      str1 = sprintf('原始数据维数为:%s,占用空间大小为:%d\n', num2str(info_dataImg.size), info_dataImg.bytes);
      str2 = sprintf('解压数据维数为:%s,占用空间大小为:%d\n', num2str(info_unzipped.size), info_unzipped.bytes);
      str3 = sprintf('压缩数据维数为:%s,占用空间大小为:%d\n', num2str(info_zipped.size), info_zipped.bytes);
      str4 = sprintf('压缩比为:%.3f%%\n', info_zipped.bytes/info_dataImg.bytes*100);
      str5 = sprintf('PSNR:%.3f\n', S);
      strH = [str0 str1 str2 str3 str4 str5];
      set(handles.textInfo, 'String', strH);
      tm = im2uint8(mat2gray(unzipped));
      axes(handles.axes3); imshow(tm, []);
      handles.strH = strH;
      handles.ImgH = tm;
      guidata(hObject, handles);
    else
      set(handles.textInfo, 'String', handles.strH);
      axes(handles.axes2); imshow(mat2gray(handles.ImgH), []);
    end
    
    
    % --------------------------------------------------------------------
    function Help_Callback(hObject, eventdata, handles)
    % hObject   handle to Help (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    
    
    % --------------------------------------------------------------------
    function HisteqContrast_Callback(hObject, eventdata, handles)
    % hObject   handle to HisteqContrast (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    % 直方图对比
    if isequal(handles.ImgH, 0) && isequal(handles.ImgL, 0)
      msgbox('请进行压缩处理!', '提示信息');
      return;
    end
    if ~isequal(handles.ImgH, 0)
      HisteqContrast(handles.Img, handles.ImgH);
    end
    if ~isequal(handles.ImgL, 0)
      HisteqContrast(handles.Img, handles.ImgL);
    end
    
    % --------------------------------------------------------------------
    function AlgorithmFlow_Callback(hObject, eventdata, handles)
    % hObject   handle to AlgorithmFlow (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    str = '图像压缩系统,首先载入图像,然后选择压缩算法,比较压缩效果,最后可以观察直方图对比效果。';
    msgbox(str, '提示信息');
    
    % --------------------------------------------------------------------
    function About_Callback(hObject, eventdata, handles)
    % hObject   handle to About (see GCBO)
    % eventdata reserved - to be defined in a future version of MATLAB
    % handles   structure with handles and user data (see GUIDATA)
    msgbox('图像压缩系统,采用霍夫曼算法', '提示信息');
    

    3 仿真结果

    4 参考文献

    [1]田端财, 殷晓丽. 基于哈夫曼编码的图像压缩技术研究[J]. 科技资讯, 2009(8):2.

    部分理论引用网络文献,若有侵权联系博主删除。

    5 MATLAB代码与数据下载地址

    见博客主页

    展开全文
  • 还可以,自己写的关于霍夫曼编码的MATLAB程序设计
  • 利用实现的最小堆实现霍夫曼编码,利用霍夫曼编码实现文件压缩和解压。 包括最小堆,霍夫曼编码,解压,压缩四个部分,代码功能完善,对ASCII码英文文本有1.8压缩率。使用C++编写。(现只能压缩文本文件)
  • 摘 要:哈夫曼编码是一种数据编码方式,以哈夫曼树——...夫曼编码图像压缩技术的原理、算法、过程,并利用VB6.0作为编程开发工具,开发了一个对256色BMP图像进行压缩/解压缩的软件系统, 验证了算法的合理性和可行性。
  • 图片压缩一:霍夫曼编码压缩算法

    千次阅读 2019-03-11 22:12:48
    我们直接来看示例,如果我们需要来压缩下面的字符串: “beep boop beer!” 首先,我们先计算出每个字符出现的次数,我们得到下面这样一张表 : 然后,我把把这些东西放到Priority Queue中(用出现的次数据当 ...

    原址:https://mp.weixin.qq.com/s/PjHuOv8FFHWVn37rKwVTiw
    我们直接来看示例,如果我们需要来压缩下面的字符串:

                “beep boop beer!” 
    

    首先,我们先计算出每个字符出现的次数,我们得到下面这样一张表 :
    在这里插入图片描述
    然后,我把把这些东西放到Priority Queue中(用出现的次数据当 priority),我们可以看到,Priority Queue 是以Prioirry排序一个数组,如果Priority一样,会使用出现的次序排序:下面是我们得到的Priority Queue:
    在这里插入图片描述

    接下来就是我们的算法——把这个Priority Queue 转成二叉树。我们始终从queue的头取两个元素来构造一个二叉树(第一个元素是左结点,第二个是右结点),并把这两个元素的priority相加,并放回Priority中(再次注意,这里的Priority就是字符出现的次数),然后,我们得到下面的数据图表:

    在这里插入图片描述

    同样,我们再把前两个取出来,形成一个Priority为2+2=4的结点,然后再放回Priority Queue中 :

    在这里插入图片描述

    继续我们的算法(我们可以看到,这是一种自底向上的建树的过程):

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    最终我们会得到下面这样一棵二叉树:

    在这里插入图片描述

    此时,我们把这个树的左支编码为0,右支编码为1,这样我们就可以遍历这棵树得到字符的编码,比如:‘b’的编码是 00,’p’的编码是101, ‘r’的编码是1000。我们可以看到出现频率越多的会越在上层,编码也越短,出现频率越少的就越在下层,编码也越长。

    在这里插入图片描述

    最终我们可以得到下面这张编码表:

    在这里插入图片描述

    这里需要注意一点,当我们encode的时候,我们是按“bit”来encode,decode也是通过bit来完成,比如,如果我们有这样的bitset “1011110111″ 那么其解码后就是 “pepe”。所以,我们需要通过这个二叉树建立我们Huffman编码和解码的字典表。

    这里需要注意的一点是,我们的Huffman对各个字符的编码是不会冲突的,也就是说,不会存在某一个编码是另一个编码的前缀,不然的话就会大问题了。因为encode后的编码是没有分隔符的。

    于是,对于我们的原始字符串 beep boop beer!

    其对就能的二进制为 : 0110 0010 0110 0101 0110 0101 0111 0000 0010 0000 0110 0010 0110 1111 0110 1111 0111 0000 0010 0000 0110 0010 0110 0101 0110 0101 0111 0010 0010 0001

    我们的Huffman的编码为: 0011 1110 1011 0001 0010 1010 1100 1111 1000 1001

    从上面的例子中,我们可以看到被压缩的比例还是很可观的。

    展开全文
  • 霍夫曼图像压缩算法

    2012-04-27 10:25:09
    霍夫曼图像压缩的算法,小波变换后的霍夫曼编码树,对图像压缩的学习有一定的帮助。
  • 信息熵与压缩编码基础

    一、关于信息熵

    基本内容:
    通常,一个信源发送出什么符号是不确定的,衡量它可以根据其出现的概率来度量。概率大,出现机会多,不确定性小;反之不确定性就大。
    不确定性函数f是概率P的减函数;两个独立符号所产生的不确定性应等于各自不确定性之和,即f(P1,P2)=f(P1)+f(P2),这称为可加性。同时满足这两个条件的函数f是对数函数,即。
    在信源中,考虑的不是某一单个符号发生的不确定性,而是要考虑这个信源所有可能发生情况的平均不确定性。若信源符号有n种取值:U1…Ui…Un,对应概率为:P1…Pi…Pn,且各种符号的出现彼此独立。这时,信源的平均不确定性应当为单个符号不确定性-logPi的统计平均值(E),可称为信息熵,即,式中对数一般取2为底,单位为比特。但是,也可以取其它对数底,采用其它相应的单位,它们间可用换底公式换算。
    最简单的单符号信源仅取0和1两个元素,即二元信源,其概率为P和Q=1-P,该信源的熵即为如图1所示。 由图可见,离散信源的信息熵具有:
    ①非负性:即收到一个信源符号所获得的信息量应为正值,H(U)≥0 ②对称性:即对称于P=0.5
    ③确定性:H(1,0)=0,即P=0或P=1已是确定状态,所得信息量为零
    ④极值性:因H(U)是P的上凸函数,且一阶导数在P=0.5时等于0,所以当P=0.5时,H(U)最大。
    对连续信源,香农给出了形式上类似于离散信源的连续熵,虽然连续熵仍具有可加性,但不具有信息的非负性,已不同于离散信源。不代表连续信源的信息量。连续信源取值无限,信息量是无限大,而是一个有限的相对值,又称相对熵。但是,在取两熵的差值为互信息时,它仍具有非负性。这与力学中势能的定义相仿。

    二、关于香农-范诺编码

    一串消息包含A,B,C,D,E共5类符号,其内容是AABBBBAAAACCCCCCCCCEEEEEEDDDDEEEEEEEEEEEEE,
    请问其信息熵是多少?

    在这里插入图片描述

    由上式可得:H(x)=2.043sh
    分析:A6;B5;C9;D4;E19;共43个,其信息熵由公式可求得2.069

    2.1 对香农-范诺编码的简单描述

    在数据压缩的领域里,香农-范诺编码(Shannon–Fano coding)是一种基于一组符号集及其出现的或然率(估量或测量所得),从而构建前缀码的技术。
    香农-范诺编码其名称来自于以克劳德·香农和罗伯特·法诺。在理想意义上,它与哈夫曼编码一样,并未实现码词(code word)长度的最低预期;然而,与哈夫曼编码不同的是,它确保了所有的码词长度在一个理想的理论范围 之内。这项技术是香农于1948年,在他介绍信息理论的文章“通信数学理论”中被提出的。这个方法归功于范诺,他在不久以后以技术报告发布了它。香农-范诺编码不应该与香农编码混淆,后者的编码方法用于证明Shannon’s noiseless coding theorem,或与Shannon–Fano–Elias coding(又被称作Elias coding)一起,被看做算术编码的先驱。
    Shannon-Fano的树是根据旨在定义一个有效的代码表的规范而建立的。实际的算法很简单:

    1. 对于一个给定的符号列表,制定了概率相应的列表或频率计数,使每个符号的相对发生频率是已知。
    2. 排序根据频率的符号列表,最常出现的符号在左边,最少出现的符号在右边。
    3. 清单分为两部分,使左边部分的总频率和尽可能接近右边部分的总频率和。
    4. 该列表的左半边分配二进制数字0,右半边是分配的数字1。这意味着,在第一半符号代都是将所有从0开始,第二半的代码都从1开始。
    5. 对左、右半部分递归应用步骤3和4,细分群体,并添加位的代码,直到每个符号已成为一个相应的代码树的叶。

    2.2 特例详解

    消息通讯字符集为S{A,B,C,D,E}
    它们出现的概率为P{0.14,0.12,0.21,0.09,0.44}
    累加概率为PA{0,0.14,0.26,0.47,0.56}
    计算对应概率的码长为N=ceil(-log2P){2,3,3,4,4}
    将累加概率转换为二进制后的码字{00,001,010,0111,1000}
    香农-范诺编码的平均码长为∑N*P=3.39;四位二进制数等长编码平均长度为4
    可以得出平均码长是等长码的3.39/4=85%,压缩率即为15%

    三、关于霍夫曼编码

    3.1 对霍夫曼编码的简单描述

    霍夫曼编码,是一种可以根据字符出现频率给其赋予编码定义的编码方式。也因其编码方式的奇特,故此拥有了最佳编码的称号。
    霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1L1+W2L2+W3L3+…+WnLn),N个权值Wi(i=1,2,…n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,…n)。可以证明霍夫曼树的WPL是最小的。

    3.2 特例详解

    消息通讯字符集为{A,B,C,D,E}
    它们出现的概率为{0.14,0.12,0.21,0.09,0.44}
    根据以上信息可得编码表A:110;B:1111;C:10;D:1110;E:0
    哈夫曼编码平均长度为2.069;三位二进制数等长编码平均长度为3
    可以得出平均码长是等长码的2.069/3=69%,压缩率即为31%

    四、RGB图像压缩


    一幅1024*768的24位RGB彩色图像一共在内存中占有多少字节? 如果将其保存为非压缩格式的BMP文件,文件有多少字节?请用实例验证。

    首先:

    8 bit(位)=1 Byte(字节)
    1024 Byte(字节)=1 KB
    1024 KB=1 MB
    由题

    1024 * 768 * 24
    =18874368(bit)
    =2359296(byte)
    =2304(KB)
    =2.25(MB)

    参考

    图像压缩与编码基本概念
    图像压缩编码——香农/哈夫曼编码
    信息熵与压缩编码基础

    展开全文
  • 本发明属于图片处理技术领域,尤其涉及一种基于Huffman编码的...图像压缩图像压缩就是用一些合理的科学方法把图像中的冗余量除去,进而达到减少图像存储量的一种技术。信源的信息量等于信息冗余部份和信息表达部分...
  • 图像压缩编码及MATLAB实现近年来,随着计算机通信技术的迅速发展,特别是多媒体网络技术的兴起,图像压缩编码已受到了人们越来越多的关注。 图像压缩编码从本质上来说就是对要处理的图像按一定的规则进行变换...
  • disp(strcat(['编码后传输的比特流长度为' num2str(encodedLen)])) disp(strcat(['原图片二进制编码比特长度为' num2str(imgLen)])) disp(strcat(['压缩率为' num2str(*(imgLen-encodedLen)/imgLen) '%'])) %...
  • 使用霍夫曼编码进行图像压缩 1952年,大卫·霍夫曼(David Huffman)是著名的麻省理工学院的研究生,他开发了一种优雅的算法来进行无损压缩,这是他学习的一部分。 该算法现在称为霍夫曼编码霍夫曼编码可用于压缩...
  • global Lendisp('计算机正在准备输出哈夫曼编码结果,请耐心等待……');%原始码字的灰度a=imread('kids.tif');%分区画出原始图像和灰度直方图figure;subplot(1,2,1)imshow(a);%取消坐标轴和边框axi...
  • 用哈夫曼编码压缩图像

    千次阅读 2020-06-15 10:09:47
    最近在上图像处理的课,要完成的一些作业就顺便分享到这上面来了。本来是编辑好了,就贴代码就好了,但由于新手操作,一放代码就出问题导致心态崩了。所以就不讲原理了,试试看代码怎么放吧。真的难受,我打了这么多...
  • 图像压缩编码(哈夫曼树)

    千次阅读 2019-01-16 12:13:28
    1.首先图片压缩编码对不同文件的压缩效率是不一样的  这也是我在最后发现自己的压缩比率超高(类似于未压缩)发现的。多次确认算法无误后终于在以为大佬的博客中找到了答案。此处感谢下面这位大佬的博客。 ...
  • 该文档包含数字图像处理(冈萨雷斯第三版)中的图像压缩实验(图像基本压缩、霍夫曼编码、霍夫曼解码)实验,包含整个实验过程和原理解释,以及详细的执行代码。代码复制后可在matlab中直接运行。
  • 内有exe可执行文件,可直接运行来观看效果,本人用VS2008编写
  • 利用霍夫曼编码原理对数字图像进行压缩处理
  • 大作业 .py程序完美 带报告 有说明 注释详细 没积分的可私信 也有直接购买的付费链接https://download.csdn.net/download/qq_44781688/20009579 不急的想白嫖也可以 请私信 如果能看见会回复的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,084
精华内容 833
关键字:

霍夫曼编码图像压缩