iftmin>FFT_f3(x,y)tmin=FFT_f3(x,y);
end
end
enddelta=tmax-tmin;forx=1:
181fory=1:
181
FFT_f3(x,y)=255*(FFT_f3(x,y)-tmin)/delta;end
endsubplot(2,2,4);imshow(FFT_f3);xlabel('(d)f3(x,y)的频谱');
axison;
实验二图像的均衡化处理
一、实验目的及要求
1.学习Matlab软件的使用和编程
2.掌握图像的均衡化处理算法原理及步骤;
3.要求对明暗不同的图像分别作均衡化处理。
4.分析图像的均衡化处理结果;二、实验环境
Windows2003或WindowsXP,Matlab编程环境
三、实验内容
分别选用如下三幅较暗、动态范围较窄和较亮的图像,分别进行直方图均衡化处理,并对处理结果作分析;
(a)较暗的图像elaindark(b)动态范围较窄的图像elainnarrow
(c)较亮的图像elainbright
四、参考程序
%(a)对较暗的图像elaindark直方图均衡化处理
clcclearallclosealla1=imread('elaindark.bmp');figure
(1);subplot(2,2,1);imshow(a1);title('
(1)较暗的原图像elaindark');
subplot(2,2,2);imhist(a1);axisoff
title('
(2)原图像elaindark的直方图');
a2=histeq(a1);subplot(2,2,3);imshow(a2);
title('(3)直方图均衡化后的图像');
subplot(2,2,4);imhist(a2);axisoff
title('(4)均衡化后的直方图');
%(b)对动态范围较窄的图像elainnarrow直方图均衡化处理
b1=imread('elainnarrow.bmp');figure
(2);subplot(2,2,1);imshow(b1);
title('
(1)动态范围较窄的原图像elainnarrow');
subplot(2,2,2);imhist(b1);axisoff
title('
(2)原图像elainnarrow的直方图');
b2=histeq(b1);subplot(2,2,3);imshow(b2);
title('(3)直方图均衡化后的图像');
subplot(2,2,4);imhist(b2);axisoff
title('(4)均衡化后的直方图');
%(c)对较亮的图像elainbright直方图均衡化处理
c1=imread('elainbright.bmp');figure(3);subplot(2,2,1);imshow(c1);title('
(1)较亮的原图像elainbright');
subplot(2,2,2);imhist(c1);axisoff
title('
(2)原图像elainbright的直方图');c2=histeq(c1);subplot(2,2,3);imshow(c2);
title('(3)直方图均衡化后的图像');
subplot(2,2,4);imhist(c2);axisoff
title('(4)均衡化后的直方图');
实验三图像的锐化处理
一、实验目的及要求
1.学习Matlab软件的使用和编程
2.理解图像增强中的模板锐化法
3.对图像进行a=1和a=2的锐化处理,实现教材中图4.4.2的效果
4.验证教材中提出的锐化实质,实现教材中图4.4.3的效果,对实验结果进行分析二、实验环境
Windows2003或WindowsXP,Matlab编程环境
三、实验内容
1)选择两幅图像,对其进行a=1和a=2的锐化处理,实现教材中图4.4.2的效果,并分析实验结果。
2)选择一幅图像,验证教材中提出的锐化实质,实现教材中图
4.4.3的效果,并分析实验结果。
四、参考程序
%选择两幅图像,对其进行a=1和a=2的锐化处理,实现教材
中图4.4.2的效果
clearall;closeall;f1=imread('D:
/lena1.bmp');subplot(2,3,1);imshow(f1);
a=1;
G1=[0-a0;-a1+4*a-a;0-a0];f2=imfilter(f1,G1,'symmetric','conv');subplot(2,3,2);imshow(f2);
a=2;
G1=[0-a0;-a1+4*a-a;0-a0];f2=imfilter(f1,G1,'symmetric','conv');subplot(2,3,3);imshow(f2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f1=imread('D:
/442.bmp');subplot(2,3,4);imshow(f1);xlabel('(a)原图像');
a=1;
G1=[0-a0;-a1+4*a-a;0-a0];f2=imfilter(f1,G1,'symmetric','conv');subplot(2,3,5);imshow(f2);xlabel('(b)a=1时的锐化图像');
a=2;
G1=[0-a0;-a1+4*a-a;0-a0];f2=imfilter(f1,G1,'symmetric','conv');subplot(2,3,6);imshow(f2);xlabel('(c)a=2时的锐化图像');
%择一幅图像,验证教材中提出的锐化实质,实现教材中图4.4.3的效果
clearall;closeall;f1=imread('D:
/lena1.bmp');subplot(1,3,1);imshow(f1);xlabel('(a)原图像');
a=2;
G1=[0-a0;-a4*a-a;0-a0];f2=imfilter(f1,G1,'symmetric','conv');subplot(1,3,2);imshow(f2);xlabel('(b)加重的边缘');
a=2;
G1=[0-a0;-a1+4*a-a;0-a0];f2=imfilter(f1,G1,'symmetric','conv');subplot(1,3,3);imshow(f2);xlabel('(c)锐化结果图像');
实验四图像的哈夫曼编码
一、实验目的及要求
1.学习Matlab软件的使用和编程
2.掌握哈夫曼编码算法的基本原理
3.要求对屏幕输入的信符概率向量进行哈夫曼编码二、实验环境
Windows2003或WindowsXP,Matlab编程环境
三、实验内容
1)对屏幕输入的信符概率向量例如‘[0.40.20.160.120.060.04
0.02]’,进行哈夫曼编码。
2)计算计算信源的熵,哈夫曼编码的平均码字长及其编码效率。
3)显示哈夫曼编码与相应计算结果。
四、参考程序
clcclearall
p=input('请输入信符的概率向量:
');
n=length(p);
fori=1:
nifp(i)<0
fprintf('\n输入的概率必须大于0!
\n');
endend
%ifsum(p)-1>0
%fprintf('\n输入的概率非法:
其概率和大于1\n');
%p=input('请输入信符的概率向量:
');
%end
q=p;a=zeros(n-1,n);fori=1:
n-1fprintf('第%d次排序\n',i);
[q,l]=sort(q)%q为排好序的原据,l为q中数据在原数据中的存储位置
a(i,:
)=[l(1:
n-i+1),zeros(1,i-1)]%矩阵a记录n-1次排序的过程fprintf('\n第%d次排序后合并生成的数据',i);
q=[q
(1)+q
(2),q(3:
n),1]end
%//////////////新生成一个n-1行n列,并且每个元素含有n个字符
(n位)的空白矩阵c,用来进行huffman编码:
fori=1:
n-1c(i,1:
n*n)=blanks(n*n);end
c(n-1,n)='0';%根据概率小的编码为0,概率大的编码为1的原则进行编码,c(n-1,2*n)='1';%矩阵c最后一行的第一个元素编码为0,第二个元素编码为1,
fori=2:
n-1
c(n-i,1:
n-1)=c(n-i+1,n*(find(a(n-i+1,:
)==1))-(n-2):
n*(find(a(n-i+1,:
)==1)
))
%c/////////的第n-i行中第一个元素的第1:
n-1位赋值:
根据矩阵a中第n-i+1行中1的位置k,找到c(n-i+1,(k-1)n+2:
nk)的
%//////////编码值进行赋值;c(n-i,n)='0';%//////////////////对c中n-i行中第一个元素的第n
位赋值为0
c(n-i,n+1:
2*n-1)=c(n-i,1:
n-1);%//////c的第n-i行中第一、二个
元素的前n-1位相等,因为在a中这两个相应元素合并的结果为a中下一行1的位置k所对应元素;
c(n-i,2*n)='1';%////////////////对c中n-i行的第二个元素的第n
位赋值为1
forj=1:
i-1c(n-i,(j+1)*n+1:
(j+2)*n)=c(n-i+1,n*(find(a(n-i+1,:
)==j+1)-1)+1:
n*(
find(a(n-i+1,:
)==j+1)))%将c中n-i+1行没有写入第n-i行的第一、二
个元素位置的剩余编码分别写入第n-i行的第三、四,......,n元素的相应位置;
endendfori=1:
nh(i,1:
n)=c(1,n*(find(a(1,:
)==i)-1)+1:
find(a(1,:
)==i)*n)
%///为了输出huf