数字图像处理_图像压缩(霍夫曼编解码)

  • 1. 实验目的
  • 2. 实验流程
    • 2.1 图像熵的计算
    • 2.2 霍夫曼编码流程
    • 2.3 霍夫曼编码函数
    • 2.4 霍夫曼解码流程
  • 3. 实验代码
    • 3.1 计算图像熵
    • 3.2 霍夫曼编码
    • 3.3 霍夫曼编码函数
    • 3.4 霍夫曼解码
  • 4. 实验结果及分析
    • 4.1 图像熵的计算
    • 4.2 霍夫曼编码
    • 4.3 霍夫曼解码

1. 实验目的

  1. 掌握图像信息熵的计算方法。
  2. 理解霍夫曼编码和解码的基本步骤。
  3. 掌握霍夫曼编码和解码的操作,编程实现。

2. 实验流程

2.1 图像熵的计算

2.2 霍夫曼编码流程

2.3 霍夫曼编码函数

2.4 霍夫曼解码流程

3. 实验代码

3.1 计算图像熵

%% 计算熵
clear,clc,close ALL;
tic
f1=imread('task1/1.tif');
f2=imread('task1/2.tif');
f3=imread('task1/3.tif');
n=256;
%计算第一幅图的熵
x1=double(f1);
P1=hist(x1(:),n);
P1=P1/sum(P1(:));
i1=find(P1);
h1=-sum(P1(i1).*log2(P1(i1)));
%计算第二幅图的熵
x2=double(f2);
P2=hist(x2(:),n);
P2=P2/sum(P2(:));
i2=find(P2);
h2=-sum(P2(i2).*log2(P2(i2)));
%计算第三幅图的熵
x3=double(f3);
P3=hist(x3(:),n);
P3=P3/sum(P3(:));
i3=find(P3);
h3=-sum(P3(i3).*log2(P3(i3)));
figure;
subplot(131),imshow(f1),title(['图1的熵为:',num2str(h1)]);
subplot(132),imshow(f2),title(['图2的熵为:',num2str(h2)]);
subplot(133),imshow(f3),title(['图3的熵为:',num2str(h3)]);
toc

3.2 霍夫曼编码

%% 实现霍夫曼编码
clear,clc,close ALL;
tic
I=imread('task1/3.tif');
I=double(I);
[m,n]=size(I);m0=m/2;n0=n/2;
a=I(1:m0,1:n0);b=I(1:m0,n0:n);c=I(m0:m,1:n0);d=I(m0:m,n0:n);
j = 20;
I0=hist(I(:),j);I0=I0/sum(I0(:));
I1=hist(a(:),j);I1=I1/sum(I1(:));
I2=hist(b(:),j);I2=I2/sum(I2(:));
I3=hist(c(:),j);I3=I3/sum(I3(:));
I4=hist(d(:),j);I4=I4/sum(I4(:));
% 计算熵
i=find(I0);h = -sum(I0(i).*log2(I0(i)));
i1=find(I1);h1 = -sum(I1(i1).*log2(I1(i1)));
i2=find(I2);h2 = -sum(I2(i2).*log2(I2(i2)));
i3=find(I3);h3 = -sum(I3(i3).*log2(I3(i3)));
i4=find(I4);h4 = -sum(I4(i4).*log2(I4(i4)));
% 霍夫曼编码及计算编码效率
alph = huffman(I0);
alph1 = huffman(I1);
alph2 = huffman(I2);
alph3 = huffman(I3);
alph4 = huffman(I4);for i=1:length(I0)[m,n]=size(char(alph(i)));l(i)=n;
end
for i1=1:length(I1)[m1,n1]=size(char(alph1(i1)));l1(i1)=n1;
end
for i2=1:length(I2)[m2,n2]=size(char(alph2(i2)));l2(i2)=n2;
end
for i3=1:length(I3)[m3,n3]=size(char(alph3(i3)));l3(i3)=n3;
end
for i4=1:length(I4)[m4,n4]=size(char(alph4(i4)));l4(i4)=n4;
end
disp(['图像熵为:',num2str(h)]);
disp(['分块后图像熵分别为:',num2str(h1),' ',num2str(h2),' ',num2str(h3),' ',num2str(h4)]);
p = sum(I0.*l);p1 = sum(I1.*l1);p2 = sum(I2.*l2);p3 = sum(I3.*l3);p4 = sum(I4.*l4);
disp(['平均编码长度为:',num2str(p)]);
disp(['分块后每部分平均编码长度为:',num2str(p1),' ',num2str(p2),' ',num2str(p3),' ',num2str(p4)]);
n = h/p; n1 = h1/p1; n2 = h2/p2; n3 = h3/p3; n4 = h4/p4;
disp(['分块后每部分的编码效率为:',num2str(n1),' ',num2str(n2),' ',num2str(n3),' ',num2str(n4)]);
nla = (h1+h2+h3+h4)/(p1+p2+p3+p4);
disp(['编码效率为:',num2str(n)]);
disp(['分块后编码效率为:',num2str(nla)]);
toc

3.3 霍夫曼编码函数

function CODE = huffman(p)
error(nargchk(1,1,nargin));
if(ndims(p) ~= 2) || min(size(p)) > 1 || ~isreal(p) ||~isnumeric(p)error('P must be a real numeric vector.');
end
global CODE
CODE = cell(length(p),1);
if length(p) > 1p = p/sum(p);s = reduce(p);makecode(s,[]);
elseCODE = {'1'};
end
function s = reduce(p)
s = cell(length(p),1);
for i = 1:length(p)s{i} = i;
end
while numel(s) > 2[p,i] = sort(p);p(2) = p(1) + p(2);p(1) = [];s = s(i);s{2} = {s{1},s{2}};s(1) = [];
end
function makecode(sc,codeword)
global CODE
if isa(sc,'cell')makecode(sc{1},[codeword 0]);makecode(sc{2},[codeword 1]);
elseCODE{sc} = char('0'+ codeword);
end

3.4 霍夫曼解码

%% 霍夫曼解码
clear,clc,close ALL;
tic
I = imread('task1\2.tif');
[M,N] = size(I);
I1 = I(:);
P = zeros(1,256);
%获取各符号的概率
for i = 0:255P(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'); %把向量重新转换成图像块;
figure('Name','霍夫曼编解码效果图','NumberTitle','off');
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(uint8(Ide));title('解码图');
toc

4. 实验结果及分析

4.1 图像熵的计算

1、实验结果:

2、结果分析:
由上图,共图3.1(a)——图3.1©三幅图。
其中熵的计算结果即如上表示,分别为0,8和7.3177。由上图可反应熵的概念,当灰度完全相同时,也就说明了熵值为零。

4.2 霍夫曼编码

1、实验结果

灰度级为20时,编码结果显示如下:

2、结果分析

本实验中,主要对图像进行了霍夫曼编码的实现和结果输出。
根据图3.2,可看出图像的熵、平均码长等信息,也反应出了分块前后编码效率的差异。
根据各个分块的导出信息,可以看出分块后的编码效率基本上都有所提高。在分块前编码效率为98.8%,分块编码后的效率为99.2%。也在一定程度上说明了分块编码能够解决的提高效率的问题。
霍夫曼编码结果如图3.3所示,可以看出编码的长度大小和之间的不同,也说明了程序运行的正确性,显示了霍夫曼树和霍夫曼编码的特点。

4.3 霍夫曼解码

1、实验结果

2、结果分析
本实验主要对编解码前后的图像进行了对比。如图3.4所示,两幅图相同。
通过实验的操作,编解码的实现。发现编码解码后的图像与原图相同,也就说明了霍夫曼编码为无损压缩,说明了霍夫曼编码的编码特点。

数字图像处理实验之图像压缩相关推荐

  1. 计算压缩比的程序matlab,数字图像处理实验5 图像压缩

    实验5 图像压缩 一.实验目的: 1.掌握图像压缩的原理--编码冗余,压缩比C R的计算等. 2.了解并掌握霍夫曼编码的原理.实现步骤. 3.掌握JPEG标准--通用的图像压缩/解压缩编码标准. 二. ...

  2. 数字图像处理——实验一 Python中数字图像处理的基本操作

    数字图像处理--实验一 Python中数字图像处理的基本操作 一.实验目的 二.实验主要仪器设备 三.实验原理 3.1 数字图像的表示和类别 3.2 opencv-python图像文件格式 四.实验内 ...

  3. 数字图像处理实验七--图像压缩编码

    数字图像处理实验七 (图像压缩编码) 实验内容: 基于游程编码的图像压缩 基于离散余弦变换的图像压缩 实验步骤: 使用给定的图像lena做实验,采用im2bw把灰度图像转换为二值图像,试计算二值化时阈 ...

  4. 数字图像处理实验(总计23个)汇总

    以下这些实验中的代码全部是我自己编写调试通过的,到此,最后进行一下汇总. 数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Half ...

  5. 数字图像处理matlab实验对图像复原,数字图像处理实验07图像的复原处理

    数字图像处理实验 一.数字图像处理实验 实验七 图像的复原处理 一.实验目的 熟悉几种在实际应用中比较重要的图像复原技术,学会用MATLAB复原函数对退化图像进行复原处理. 二.实验内容 1.用点扩散 ...

  6. 数字图像处理实验——Python语言实现

    数字图像处理实验--Python语言实现 实验一:数字图像处理入门 实验二:直方图均衡 实验三:线性平滑和锐化--掩模法 实验四:非线性平滑--中值滤波 实验五:非线性锐化--梯度法 GitHub地址 ...

  7. 数字图像处理实验三图像增强

    一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的 感性认识,巩固所学的图像增强的理论知识和相 关算法. (2)熟练掌握直方图均衡化和直方图规定化的计算过 程. (3)熟练掌握空域滤波中常 ...

  8. 数字图像处理实验四图像频域增强

    一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学的图像增强的理论知识和相关算法. (2)熟练掌握低通.高通.带通.同态滤波器的使用方法,明确不同性质的滤波器对图像的影响 ...

  9. 数字图像处理实验5图像复原

    一.实验目的 (1)了解图像复原的目的及意义,加深对图像复原理论的认识. (2)掌握维纳滤波复原基本原理. (3)掌握约束最小二乘方复原方法. (4)掌握盲解卷积复原方法 二.实验内容  (1)维纳滤 ...

最新文章

  1. python调用js库中的函数_Python 调用JS文件中的函数
  2. Ubuntu 下面部署Django 项目
  3. Xamarin图表开发基础教程(6)OxyPlot框架
  4. 消息中间件之JMS实践(ActiveMQ)
  5. update 两个表关联_你真的了解全量表,增量表及拉链表吗?
  6. iphone4s解锁_苹果手机忘记密码怎么办?iPhone忘记密码解锁恢复方法
  7. TVS 击穿电压和钳位电压的区别
  8. 1.IDA-基本操作(改变Image Base地址、打开、保存IDA的不同方式)
  9. python全排列_全排列算法python实现
  10. mysql基础和高级整理_mysql基础整理01
  11. pycharm+pyqt5配置
  12. C语言程序设计第二次作业1
  13. java实现调查问卷_智能办公进行时丨富士施乐邀您参与有奖问卷调查
  14. 小程序坑-canvas
  15. 拼多多的硬核逆生长!
  16. Android窗口被隐藏了怎么办,Android studio中IDE窗口怎么显示或者隐藏?
  17. [译] 为什么你要学习 Go?
  18. 软件测试自学网站有哪些?不妨一探究竟
  19. Nachos操作系统synch(lab3)
  20. 面试了15位来自985/211高校的2020届研究生之后的思考

热门文章

  1. eNSP实验五:RIP路由协议
  2. HQL和Criteria
  3. GitLab的安装及使用教程(超级详细)
  4. Google数字图书馆
  5. 自组网(Adhoc)和基础网(Infra)
  6. Autolabor Simulator激光雷达导航与避障(模拟平台)
  7. git fetch学习之旅
  8. ESP32开发(一):搭建windows开发环境--ESP-IDF工具命令提示符操作
  9. 如何使用 CSS 定位 HTML 元素
  10. Hive2.1函数列表