⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huffman.asv

📁 基于matlab的图像或者序列的哈夫曼编码及解码程序
💻 ASV
字号:
%*************************************************
%   本程序实现图像或者序列的huffman编码
%     信号与信息处理  章国艺  YS068210
%              2007.6.3
%*************************************************
clear all
close all

I = imread('miss.bmp');
figure,imshow(I);
J = double(I);
[y x] = size(J);
q = zeros(1,256);
for j=1:y
    for i = 1:x
        q(I(j,i)) = q(I(j,i)) + 1; 
    end
end
q = q/sum(q);
%************************************************
% 若要实现输入序列的huffman编码只需输入序列的概率分布如:
%     q = [0.45 0.25 0.2 0.1];
%*********************************************** 
q = [0.1 0.45 0.2 0.25];
p = sort(q);
n = length(p);
for i = 1:n
    l(i) = i;
end
%*****************从概率大于0处开始编码************
for i=1:n-1
    if p(i)>0
        break;
    end
end
for k=1:n
    code(k).code = blanks(1*1);
end
%**********开始编码*****************
for i = i:n-1
    for k=1:n
        if l(k) == i;
            code(k).code = ['1' code(k).code]; 
        elseif l(k) == i+1
            code(k).code = ['0' code(k).code];
        end
    end
    p(i+1) = p(i) + p(i+1);
    for k=1:n
        if l(k)==i
            l(k) = i+1;
        end
    end
    %用冒泡法重新排序 改变映射表
    for j=i+1:n-1
        if p(j)>p(j+1)
            temp = p(j);
            p(j) = p(j+1);
            p(j+1) = temp;
            for k=1:n
                if l(k) == j
                    l(k) = j + 1;
               elseif l(k) == j+1
                    l(k) = j;
                end
            end
        else
            break;
        end
    end
end
[m,position] = sort(q);

clear m
position   % 表示编码结果对应的原始序列的位置
for i=1:n
    code(i).code
end

    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -