医学图像处理实验五

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[zip,info]=xcbm(I);%编码
unzip=dxcbm(zip,info);%解码
%显示原始图像和经编码解码后的图像,显示压缩比
subplot(1,2,1);imshow(I);
xlabel('原始图像');
subplot(1,2,2);imshow(unzip);
xlabel('行程编码');
《医学图像处理》实验报告
实验五医学图像压缩
专业班级
成绩
学号
评阅人
姓名
一、实验目的
1、掌握医学图像压缩编码的原理和基本方法;
2、掌握算术编码的原理及实现方法;
3、掌握行程编码的原理及实现方法。
二、实验内容及结果
1、算术编码
新建一个名称为ssbm.m的Matlab脚本文件。输入以下代码:
function ssbm(str)
'本示例只限定少数字符串;'
'本示例只说明一下算术编码的过程。'}
disp(about);
%程序限定字符为:a,b,c,d,e
p=[0.2 0.3 0.1 0.15 0.25];
%字符的概率分布,sum(p)=1
n=length(str);disp('a b c d e');disp(num2str(p));
disp(strr);disp(r);d=r-l;end
在Matlab命令行窗口输入:
>>ssbm(‘aedbeecead’)
观察运行结果。改变输入参数,观察并对比运行结果的变化。
实验结果:
a b c d e
0.2 0.3 0.1 0.15 0.25
2、行程编码
I=imread('kidney.jpg');
cr=info.ratiowhos I unzip zip
function [zip,info]=xcbm(vector)[m,n]=size(vector);vector=vector(:)';
vector=uint8(vector(:));L=length(vector);c=vector(1);e(1,1)=c;
for j=1:mpr=pr+p(j);end
%概率统计
l=l+d*pl;r=l+d*(pr-pl);
strl=strcat('输入第',int2str(i),'符号的间隔左边界:');
disp(strl);format longdisp(l);
strr=strcat('输入第',int2str(i),'符号的间隔右边界:');
2、进行实验内容2时,选择5~10幅不同的图像进行实验,观察压缩比的变换情况。总结行程编码的适用对象。
答:行程编码适用于具有连续灰度值并且灰度相同值很多的图像中。
3、算术编码是有损压缩还是无损压缩?行程编码呢?
答:算数编码是有损压缩;行程编码是无损压缩。
四、实验总结与体会
这次实验主要学习了用不同的编码方法对图像进行压缩,从中学习到了图像压缩的本质和方法,学会了对一幅图像进行简单的压缩。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%算术编码过程
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
l=0;r=1;d=1;
%初始间隔
about={ ...
'本实例说明:============'
'字符串不能太长,程序不加判断,请注意溢出;'
for i=1:n
switch str(i)
case 'a'
m=1;
case 'b'
m=2;
case 'c'
m=3;
case 'd'
m=4;
case 'e'
m=5;
otherwise
error('请不要输入其他字符!');end
%判断字符
pl=0; pr=0;for j=1:m-1
pl=pl+p(j);end
info.ratio=m*n/(info.rows*info.cols);
function unzip=dxcbm(zip,info)zip=uint8(zip);[m,n]=size(zip);
unzip=[];for i=1:msection=repmat(zip(i,1),1,double(zip(i,2)));
unzip=[unzip section];
endunzip=reshape(unzip,info.rows,info.cols);
运行runlength.m,观察压缩前后图像的变化。
实验结果:
三、思考题
1、算术编码和行程编码各有什么特点?
答:算数编码是对出现概率大的采用短码,出现概率小的采用长码。算术编码将不同的序列映射到0~1的区域内,该区域表示成可变精度(位数)的二进制小数,越不常见的数据需要的精度越高(更多的位数)。算术编码适合于由相同的重复序列组成的文件,更接近压缩的理论极限,并且不需要码表,只需编码一次就可以得到编码结果。行程编码将一个相同值的连续串用一个代表值和串长来代替。
e(1,2)=0;t1=1;for j=1:Lif((vector(j)==c))e(t1,2)=double(e(t1,2))+1;
Elsec=vector(j);t1=t1+1;e(t1,1)=c;e(t1,2)=1;end
Endzip=e;info.rows=m;info.cols=n;[m,n]=size(e);
相关文档
最新文档