数字图像处理上机实习报告
(DIP4----DIP7)
学生姓名: 班 级:
杜坤
071123
华 明
学 号: 20121003699 指导老师: 傅
1
DIP-4 图像编码
一.题目要求
对图实施费诺-香农编码和解码,计算图像熵,平均码长和冗余度。
二.算法设计
1.测试脚本的程序框图
校对编码前后的数据开始编码计算图像的熵读入图像的数据为a根据编码的码字对图像数据进行输出计算图像的平均码长结束统计各个灰度值的概率解码编码的编码效率将解码后的数据data变行为8*8计算冗余度将码字初始化
2.编码程序框图
读入图像的直方图,将图像的灰度值按照概率大小排序,按照香农编码的规则编码。
香农编码将概率由大到小,由上到下排成一排,然后分为两组。是将大的一组概率赋值为0,概率小的一组赋值为1,这是赋值的原则。然后依次的重复,直到每组只有一种输入元素为止。
2
3.解码程序框图
三.实现代码
1.脚本文件 clear all load mat
p = impr(a); %统计概率
code = FanoCodeInit(p); úno编码初始化
3
code = FanoEncoder(code);úno编码 outstream = FanoCodeStream(a,code); %输出 data = FanoDecoder(outstream,code);%解码 data = reshape(data,8,8); %恢复8*8的形状 data = data'; %转置
I = abs(p.*log2(p)); disp('图像的熵为:'); H = sum(I(:)) %计算熵 disp('图像的平局码长为:')
B = FanoCodeLength(code); %求平均长度 disp('编码冗余度为:'); r = B/H - 1 %求冗余 disp('编码效率为:') e = H/B %求编码效率 if isequal(a,data)
msgbox('解码后的数据和输入的数据完全吻合'); end
2.统计灰度的概率
function [p]= impr(f) %概率统计
[m,n] = size(f);
graymax = max(f(:)); %找出灰度最大值,划定统计范围 p = zeros(1,graymax + 1); for i = 1:m for j = 1:n x = f(i,j) + 1; p(x) = p(x) + 1; end end
p = p/(m*n); End
3.码字的初始化
function [code] = FanoCodeInit(p) únoShano码字初始化 [m,n] = size(p);
for i = 1:n
code(i).gray = i - 1; code(i).p = p(i); code(i).str = ''; end
4