📄 huffman.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 + -