数字图像处理实验6图像编码

一、实验目的

(1)了解图像编码的目的及意义,加深对图像编码的感性认识。

(2)熟练掌握哈夫曼编码的实现与应用。

(3)掌握行程长度编码的实现与应用,尤其是BMP和PCX文件的行程长度编码*。

二、实验内容

(1)选择图像,对其进行哈夫曼编码,总结哈夫曼编码的压缩思想。

(2)选择图像,对其进行行程编码,观察将图像保存为PCX文件后,图像占用空间的变化,并总结PCX的编码特点*三、实验代码及结果、分析

三、实验原理、代码、结果、分析

(1)哈夫曼编码

  • 原理:η

哈夫曼编码是一种无损编码,依据信源符号出现的概率来构造其码字,对出现概率大的字符使用较短的码字,对出现概率低的字符则使用较长的码字,从而达到压缩数据的目的,哈夫曼编码又称为最佳编码。

编码的基本步骤:

  1. 统计信源字符中各符号出现的概率,将各字符出现的概率由大到小的顺序排列;
  2. 将最小的两个概率相加,合并成新的概率,与其他概率重新按由大到小的顺序排列;
  3. 重新排列后将两个最小概率合并相加合并为新的概率,即重复步骤b),直到最后两个概率之和为1;
  4. 将每个相加的组合中,概率大的指定为0,概率小的指定为1,相等则任意指定
  5. 找出由每一个信源字符到达概率为1.0处的路径,顺序记录路径的每一个1和0的数字编码
  6. 反向写出编码,即为该信源字符的哈夫曼编码
  • 代码:

HuffmanCode.m:

I=imread('lena.jpg');

Gray=rgb2gray(I);

[zipped,info]=huffencode(Gray);%调用哈夫曼编码程序进行压缩

unzipped=huffdecode(zipped,info);%调用哈夫曼解码程序进行解码

disp('平均码长');L=info.avalen

disp('压缩比');CR=info.ratio

disp('信息熵');H=info.h

disp('编码效率');CE=info.ce

subplot(131);imshow(Source);title('原始图像');

subplot(132);imshow(Gray);title('灰度图像');

subplot(133);imshow(unzipped);title('哈夫曼编码并解码重构图像');

huffencode.m与huffdecode.m实际代码展示一部分:

info.zeropad=zp;%添加的比特数

info.huffcodes=huffcodes;

info.length=length(vector);%灰度图矩阵长度

info.rows=m;

info.cols=n;

info.avalen=avawordlen;%平均码长

info.ratio=8/avawordlen;%压缩比

info.h=H;

info.ce=H/avawordlen;%编码效率

  • 结果:

平均码长L = 7.4626

压缩比CR =1.0720

信息熵H =7.4384

编码效率CE =0.9968

  • 分析:

1、哈夫曼编码是无失真编码,则原始矩阵与解码之后的矩阵相同

 

 

  1. 哈夫曼编码的效率的计算公式:
  • 3、当图像灰度值分布不均匀时,哈夫曼编码效率比较高,如该题中,编码效率达到的99.7%

4、哈夫曼编码方法对图像数据进行编码时,须两次读取图像数据,第一次是为了计算每个数据出现的概率,并对各数据进行排序,第二次读取数据转换表格中的编码值代替图像数据存入图像编码文件中

(2)行程编码

  • 原理:

仅存储一个像素值以及具有相同颜色的像素数目的图象数据编码方式称为行程编码,或称游程编码,常用RLE(Run-Length Encoding)表示,是一种统计编码,该编码属于无损压缩编码,对于二值图有效。在此方式下每两个字节组成一个信息单元。第一个字节给出其后面相连的象素的个数,第二个字节给出这些象素使用的颜色索引表中的索引。游程编码所能获得的压缩比有多大,主要取决于图像本身的特点。如果图像中具有相同颜色的图像块越大,图像块数目越少,获得的压缩比就越高。反之,压缩比就越小

  • 代码:

clc;clear('all');close all;

Source=imread('lena.png'); %读入图像  

Gray=rgb2gray(Source);

%以下程序为对原图像进行行程编码,压缩  

Gray_Linear=Gray(:);  

Gray_Length=length(Gray_Linear);  

j=1;  index(1)=1;  

for z=1:1:(length(Gray_Linear)-1) %行程编码程序段  

    if Gray_Linear(z)==Gray_Linear(z+1);  

        index(j)=index(j)+1;  

    else  

        Encode(j)=Gray_Linear(z);

        j=j+1;  

        index(j)=1;

    end  

end

Encode(j)=Gray_Linear(length(Gray_Linear));   %最后一个像素数据

index=uint8(index);

k=1;

for i=1:1:j

    if index(i)==1

        Encode_hex(k)=Encode(i);   % 十六进制的次数或者灰度值

        k=k+1;

    else

        Encode_hex(k)=192+index(i);

        k=k+1;

        Encode_hex(k)=Encode(i);

        k=k+1;

    end

end

Encode_hex=dec2hex(Encode_hex);

Encode_hex_Length=size(Encode_hex,1);%计算行程编码后的所占字节数,Encode_hex_Length

index_Lenght=length(index);  

CR=Gray_Length/Encode_hex_Length;   %比较压缩前与压缩后的大小  

%行程编码解码  

l=1;  

for m=1:index_Lenght  

    for n=1:1:index(m)  

        Decode_temp(l)=Encode(m);

        l=l+1;  

    end  

end  

Decode=reshape(Decode_temp,500,500);    %重建二位图像数组  

figure(1);

subplot(121);imshow(Gray);title('原始灰度图');    %显示原图的二值图像  

subplot(122);imshow(Decode);title('解压缩恢复后的图像');  %显示解压缩恢复后的图像  

disp('压缩比:');  

disp(CR);  

disp('原图像数据的长度:');  

disp(Gray_Length);  

disp('压缩后图像数据的长度');  

disp(Encode_hex_Length);  

disp('解压缩后的数据长度');  

disp(length(Decode_temp));

  • 结果:

        

 

原图像数据的长度:250000

压缩后图像数据的长度:229014

解压缩后的数据长度:250000

压缩比:1.0916

  • 分析:
  1. reshape函数中的m*n需要重灰度变换后的Gray矩阵的维度获取

       2.行程编码的实验结果可根据以下三个图来得到:

index对应Encode相应列灰度值出现的次数,Encode_hex表示编码之后的十六进制

(2,162)-----(1100_0010,1010_0010)---(C2,A2)

(1,163)-----A3

(2,164)-----(1100_0010,1010_0100)---(C2,A4)

(1,163)-----A3

(2,162)-----(1100_0010,1010_0010)---(C2,A2)

(1,154)-----9A

(1,155)-----9B

(4,156)-----(1100_0100,1001_1010)---(C4,9C)......

行程编码则用(次数十六进制,灰度值十六进制)表示:

  • 当灰度值出现的次数大于1小于等于63时,前一个字节表示出现的次数,且前两位为11,后一个字节表示本来的数据;
  • 当灰度值出现的次数大于63时,将这个数据出现的数据分为几部分;
  • 当只出现1次时,数据大于或等于C0时,仍用两个字节表示,(C1,数据),小于C0时,直接用数据表示

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人日行十万步却无需动力源!究竟如何完美的机械结构让你开始怀疑人身...

来源:机器人大讲堂摘要:上图这个机器人可不简单,它是世界纪录的保持者,目前最新的纪录是连续步行27小时,总长72公里(相当于十万步还要多)。而最最关键的是,它完全凭借自己完美的机械…

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

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

MVVM模式的一个小例子

使用SilverLight、WPF也有很长时间了,但是知道Binding、Command的基本用法,对于原理性的东西,一直没有深究。如果让我自己建一个MVVM模式的项目,感觉还是无从下手,最近写了一个小例子,贴上代码,…

实现两个点集的欧式距离和cos距离和索引值寻找(含有两种解法,for循环和矩阵操作)

一.计算欧式距离 1,直接for循环 两个点集points1,points2,用dist来存储距离 points1np.array([[1,2],[3,4]]) points2 np.array([[5, 6],[7,8]]) dist np.zeros(shape[points1.shape[0],points2.shape[0]]) for i in range(points1.sha…

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

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

卡耐基梅隆大学专家谈核心技术市场化:「AI 周边相关机遇最大」

来源:ZDnet、机器之能编译 | 张玺摘要:技术市场化之难在哪?创业家最常犯什么错误?每位立志创业的朋友都应该研究下这篇对卡耐基梅隆 (CMU) 大学专家的采访。CMU 是全美技术转移最成功的机构之一,斥巨资帮助全校师生实现…

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

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

matplotlib与seaborn的一些使用

1.plt.plot画线画点 a np.array([[1, 2], [3, 4]]) print(a[:, 0]) plt.plot(a[:, 0], a[:, 1]) plt.show() plt.plot(a[:, 0], a[:, 1], o,colorred) plt.show()#添加风格 plt.plot(x,y,colorred,linewidth1.0,linestyle--) #设置x轴范围 plt.xlim((-1,2)) # …

无人驾驶汽车想要“普渡众生”,还要经历15个磨难

来源:Forbes 、网易智能摘要:无人驾驶汽车的未来与电动平衡车的历史有什么关系吗?电动平衡车也曾被预言将彻底改变交通。史蒂夫•乔布斯曾经说,城市将围绕这一设备重新设计;约翰•杜尔说,它将比互联网更大…

SQL的各种使用方法

一、Select语句例子 使用子查询查询employees表中,属于某一部门员工的姓名、职位、工薪、部门编号的信息 提示: 1)、需要关联employees表、departments表 2)、已知的信息为部门名称,部门名称由用户自己给出 按照要求写出SQL语句。 答案及…

正常矩形计算IOU与与NMS,多边形计算IOU

一.计算IOU def intersect(box_a, box_b):max_xy np.minimum(box_a[:, 2:], box_b[2:])min_xy np.maximum(box_a[:, :2], box_b[:2])inter np.clip((max_xy - min_xy), a_min0, a_maxnp.inf)return inter[:, 0] * inter[:, 1]def jaccard_numpy(box_a, box_b):&…

产业互联网受瞩目:互联网主战场从To C转向To B | 企鹅经济学

来源:科技日报摘要:最近,要论在互联网圈最火的词,非“产业互联网”莫属。如今,言必提产业互联网,已成为互联网圈的一种风潮。互联网的“上半场”已接近尾声,“下半场”的序幕正被拉开&#xff0…

json的用法

json格式 JSON格式:http://www.json.org/ python和JSON的关系请参考:http://docs.python.org/library/json.html JSON建构有两种结构: 1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中&#…

数据库设计方法

一、延续训练题 假设你是一个小的录影带出租店的老板。你的出租店里面有3000部电影。每部电影都有DVD或VHS录像带号码。对于每部电影,需要知道它的标题和类别(如,喜剧,悬疑,剧情,动作,战争&…

谷歌首席科学家:搞研究的痛苦,搞工程的人不懂

来源:量子位作者:Vincent Vanhoucke谷歌首席科学家、谷歌大脑技术负责人Vincent Vanhoucke(万努克)最近发出的一篇“劝退文”,引发海外科研学者的热议。在这博客中,万努克直言以研究为业,固然令…

L1/L2/smooth_l1_loss/center_loss+Dice Loss+focal loss+各种IOU loss+kl散度

一.L1/L2/smooth_l1_loss/center_loss公式与代码 1.公式 L2公式: smooth_L1公式: 2.三种函数numpy代码实现 import numpy as np import matplotlib.pyplot as plt#y |x| def L1():x np.arange(-2, 2, 0.01)y abs(x)plt.figure()plt.plot(x, y, …

虚拟机中Linux安装Tools

1. 插入光盘后将文件拷贝到常用放置软件的目录 2. 解压文件 3. 然后进入解压后的文件夹里找到安装文件进行安装(注意使用root权限安装) 4. 安装时也是一个交互的过程 5. 完成安装 转载于:https://www.cnblogs.com/ywj2013/p/3578931.html

世界创新竞争力发展报告:中美日创新产出竞争力居前三

来源:皮书说11月21日,由福建师范大学、中国科学技术交流中心联合攻关,具体由全国经济综合竞争力研究中心福建师范大学分中心组织研究的《世界创新竞争力黄皮书:世界创新竞争力发展报告(2011~2017&#xff0…

二分法查找+树

一,查找存在的一个数,该数在列表中唯一 二分法查找是针对有序数据的查找方法,时间复杂度是O(logn)。。 其中 n/2^k1 时,k 的值就是总共缩小的次数。而每一次缩小操作只涉及两个数据的大小比较,所以, 经过了…

Oracle 软件的安装

1、在oracle主页上注册登录 2、下载64位,将我接受许可协议,下载1of2和2of2,并解压到同一个文件夹 3、安装oracle软件 双击database文件夹里面的setup.exe,启动OUI去掉:我希望通过....只安装软件,不创建数据库选择语言…