数字图像处理图像编码要点
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for i = 1:m for j = 1:n for k = 1:len if code(k).gray == data(i,j); outstream = [outstream,code(k).str]; break; end end
end end end
6.解码
function [data] = FanoDecoder(instream,code) len = length(instream); str = '';gray = 0;flag = 0;data = 0;
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) %FanoShano 码字初始化 [m,n] = size(p);
for i = 1:n code(i).gray = i - 1; code(i).p = p(i); code(i).str = '';
end
6
7.搜索码字
function [data,flag] = LookUp(code,str) len = length(code); flag = 0; data = 0; for i = 1:len
if isequal(str,code(i).str) data = code(i).gray; flag = 1; break;
%求编码效率
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
I = abs(p.*log2(p));
disp('图像的熵为:');
H = sum(I(:)) %计算熵
disp('图像的平局码长为:')
B = FanoCodeLength(code); %求平均长度
disp('编码冗余度为:');
r = B/H - 1 %求冗余
Байду номын сангаас
disp('编码效率为:')
e = H/B
end
4
%冒泡法排序 for i = 1:n
for j = 1:n-i if code(j).p > code(j+1).p temp = code(j); code(j) = code(j+1); code(j+1) = temp; end
end end
end
4.编码
function [pin] = FanoEncoder(pin) %FanoShano 编码 [m,n] = size(pin); flag = 1;
读入图像的 数据为a
根据编码的码字对 图像数据进行输出
计算图像的 平均码长
结束
统计各个灰度 值的概率
将码字初始化
解码
将解码后的数据 data变行为8*8
编码的编码效率 计算冗余度
2.编码程序框图 读入图像的直方图,将图像的灰度值按照概率大小排序,按照香农编码的规
则编码。 香农编码将概率由大到小,由上到下排成一排,然后分为两组。是将大的一
for i = 1:len
[gray,flag] = LookUp(code,[str,instream(i)]); if flag
dlen = length(data); data(dlen+1) = gray; str = ''; else str = [str,instream(i)]; end end dlen = length(data); data = data(2:dlen);
end end end
8.获得平均码长
function [len_ave] = FanoCodeLength(code) len = length(code); len_ave = 0; for i = 1:len
if stop ~= start pin = FanoCodeCat(pin,start,stop);
else if i == n-1 flag = 0; %退出 while(flag)的循环
5
end end end end
5.输出码流
function [outstream] = FanoCodeStream(data,code) [m,n] = size(data); len = length(code); outstream = '';
while (flag)
start = 1; stop = 1; temp = pin(1);
for i = 1:n-1 if isequal(temp.str,pin(i+1).str) stop = stop + 1; elseif stop == start
start = i + 1; stop = start; temp = pin(i+1); else break; end end
组概率赋值为 0,概率小的一组赋值为 1,这是赋值的原则。然后依次的重复, 直到每组只有一种输入元素为止。
2
3.解码程序框图
三.实现代码
1.脚本文件
clear all load mat p = impr(a); %统计概率 code = FanoCodeInit(p); %Fano 编码初始化
3
code = FanoEncoder(code);%Fano 编码 outstream = FanoCodeStream(a,code); %输出 data = FanoDecoder(outstream,code);%解码 data = reshape(data,8,8); %恢复 8*8 的形状 data = data'; %转置
数字图像处理上机实习报告 (DIP4----DIP7)
学生姓名: 班 级: 学 号: 指导老师:
杜坤 071123 20121003699 傅华明
1
DIP-4 图像编码
一.题目要求
对图实施费诺-香农编码和解码,计算图像熵,平均码长和冗余度。
二.算法设计
1.测试脚本的程序框图
开始
编码
计算图像的熵
校对编码前后的数 据
end end end
6.解码
function [data] = FanoDecoder(instream,code) len = length(instream); str = '';gray = 0;flag = 0;data = 0;
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) %FanoShano 码字初始化 [m,n] = size(p);
for i = 1:n code(i).gray = i - 1; code(i).p = p(i); code(i).str = '';
end
6
7.搜索码字
function [data,flag] = LookUp(code,str) len = length(code); flag = 0; data = 0; for i = 1:len
if isequal(str,code(i).str) data = code(i).gray; flag = 1; break;
%求编码效率
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
I = abs(p.*log2(p));
disp('图像的熵为:');
H = sum(I(:)) %计算熵
disp('图像的平局码长为:')
B = FanoCodeLength(code); %求平均长度
disp('编码冗余度为:');
r = B/H - 1 %求冗余
Байду номын сангаас
disp('编码效率为:')
e = H/B
end
4
%冒泡法排序 for i = 1:n
for j = 1:n-i if code(j).p > code(j+1).p temp = code(j); code(j) = code(j+1); code(j+1) = temp; end
end end
end
4.编码
function [pin] = FanoEncoder(pin) %FanoShano 编码 [m,n] = size(pin); flag = 1;
读入图像的 数据为a
根据编码的码字对 图像数据进行输出
计算图像的 平均码长
结束
统计各个灰度 值的概率
将码字初始化
解码
将解码后的数据 data变行为8*8
编码的编码效率 计算冗余度
2.编码程序框图 读入图像的直方图,将图像的灰度值按照概率大小排序,按照香农编码的规
则编码。 香农编码将概率由大到小,由上到下排成一排,然后分为两组。是将大的一
for i = 1:len
[gray,flag] = LookUp(code,[str,instream(i)]); if flag
dlen = length(data); data(dlen+1) = gray; str = ''; else str = [str,instream(i)]; end end dlen = length(data); data = data(2:dlen);
end end end
8.获得平均码长
function [len_ave] = FanoCodeLength(code) len = length(code); len_ave = 0; for i = 1:len
if stop ~= start pin = FanoCodeCat(pin,start,stop);
else if i == n-1 flag = 0; %退出 while(flag)的循环
5
end end end end
5.输出码流
function [outstream] = FanoCodeStream(data,code) [m,n] = size(data); len = length(code); outstream = '';
while (flag)
start = 1; stop = 1; temp = pin(1);
for i = 1:n-1 if isequal(temp.str,pin(i+1).str) stop = stop + 1; elseif stop == start
start = i + 1; stop = start; temp = pin(i+1); else break; end end
组概率赋值为 0,概率小的一组赋值为 1,这是赋值的原则。然后依次的重复, 直到每组只有一种输入元素为止。
2
3.解码程序框图
三.实现代码
1.脚本文件
clear all load mat p = impr(a); %统计概率 code = FanoCodeInit(p); %Fano 编码初始化
3
code = FanoEncoder(code);%Fano 编码 outstream = FanoCodeStream(a,code); %输出 data = FanoDecoder(outstream,code);%解码 data = reshape(data,8,8); %恢复 8*8 的形状 data = data'; %转置
数字图像处理上机实习报告 (DIP4----DIP7)
学生姓名: 班 级: 学 号: 指导老师:
杜坤 071123 20121003699 傅华明
1
DIP-4 图像编码
一.题目要求
对图实施费诺-香农编码和解码,计算图像熵,平均码长和冗余度。
二.算法设计
1.测试脚本的程序框图
开始
编码
计算图像的熵
校对编码前后的数 据