数字图像处理处理 大作业实验报告.docx
《数字图像处理处理 大作业实验报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理处理 大作业实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
![数字图像处理处理 大作业实验报告.docx](https://file1.bdocx.com/fileroot1/2022-11/16/c4f5b629-c999-4e9f-b7a9-5de6e78aa6df/c4f5b629-c999-4e9f-b7a9-5de6e78aa6df1.gif)
数字图像处理处理大作业实验报告
数字图像处理处理大作业实验报告
PB11210***上上签
MyZenith.N_3104_EVER
实验一题目:
线性插值改变图像大小
实验目的:
1、使用MATLAB编程实现对图片大小的改变操作,使所给图片达到所要求的效果。
2、通过对MATLAB的编程加强对图像处理的认识,初步学习MATLAB在图像处理中的基本应用
实验内容:
在这一项目中,同学们需要实现基于双线性插值的图像缩放算法。
作业中需实现如下功能:
(a)能够利用鼠标从实验图像中任意选取测试区域,并单独显示。
(b)使用双线性插值算法对测试区域进行缩放处理,输出如下结果,放大到原始分辨率的2倍,放大到原始分辨率的4倍,缩小到原始分辨率的1/2倍。
实验原理:
图像某点的值由最邻近的四个点联立方程决定。
实验代码:
1、在主函数中,使用switch函数分别调用子函数,并且之前选择需要放大或者缩小的倍数。
代码如下:
2、choice=('Yes');
3、while(minus(choice,('Yes'))==0)
4、clear;close;F=imread('monarch.bmp');
5、I=imcrop(F);
6、BR=I(:
:
1);BG=I(:
:
2);
7、BB=I(:
:
3);
8、[rows,cols]=size(BR);K=sqrt(str2double(inputdlg('ÇëÊäÈëËõ·Å±¶Êý','INPUTscalefactor',1,{'2'})));
9、width=K*rows;
10、height=K*cols;
11、
12、
13、
14、widthScale=rows/width;
15、heightScale=cols/height;
16、
17、forx=1:
width-2fory=1:
height-2
18、X=x*widthScale;Y=y*heightScale;
19、
20、if(X/double(uint16(X))==1.0)&&(Y/double(uint16(Y))==1.0)
21、dstBR(x,y)=BR(int16(X),int16(Y));dstBG(x,y)=BG(int16(X),int16(Y));
22、dstBB(x,y)=BB(int16(X),int16(Y));
23、else
24、a=double(uint16(X));
25、b=double(uint16(Y));
26、
27、BRx11=double(BR(a,b));
28、BRx12=double(BR(a,b+1));
29、BRx21=double(BR(a+1,b));
30、BRx22=double(BR(a+1,b+1));
31、
32、BGx11=double(BG(a,b));
33、BGx12=double(BG(a,b+1));
34、BGx21=double(BG(a+1,b));
35、BGx22=double(BG(a+1,b+1));
36、
37、BBx11=double(BB(a,b));
38、BBx12=double(BB(a,b+1));
39、BBx21=double(BB(a+1,b));
40、BBx22=double(BB(a+1,b+1));
41、
42、w1=(b+1-Y)*(a+1-X);
43、w2=(Y-b)*(a+1-X);w3=(b+1-Y)*(X-a);
44、w4=(Y-b)*(X-a);
45、dstBR(x,y)=uint8(BRx11*w1+BRx12*w2+BRx21*w3+BRx22*w4);
46、dstBG(x,y)=uint8(BGx11*w1+BGx12*w2+BGx21*w3+BGx22*w4);
47、dstBB(x,y)=uint8(BBx11*w1+BBx12*w2+BBx21*w3+BBx22*w4);
48、end
49、end
50、end
51、
52、OUT(:
:
1)=dstBR;
53、OUT(:
:
2)=dstBG;
54、OUT(:
:
3)=dstBB;
55、imshow(I);
56、figure;
57、imshow(OUT);
58、
59、options.Interpreter='tex';
60、options.Default='Cancel';
61、choice=questdlg('ÊÇ·ñ¼ÌÐø£¿','Ñ¡Ïî','Yes','No',options);
62、end
实验结果:
1、选择缩放倍数:
2、所选择的图像源文件如下:
3、用鼠标标定所需要进行缩放的区域:
4、程序正常运行后缩放效果:
4倍放大
5、程序正常运行后缩放效果:
2倍放大
6、程序正常运行后的缩放效果:
缩小一倍
实验二题目:
高斯滤波及中值滤波处理人为添加的椒盐噪声和高斯噪声
实验目的:
1、对所给定的图像使用MATLAB添加高斯噪声和椒盐噪声;
2、再用MATLAB程序实现中值滤波和高斯滤波;
3、计算所得到结果图像的PSNR,对它们进行分析与比较,从而理解各种滤波方法的优点与特性。
4、进一步熟悉MATLAB编程方式,使对MATLAB与数字图像处理有更加直观的理解与体验,加深感受MATLAB在数字图像处理中的重要作用。
实验代码:
一、读取源图像,同时标上”原始图像”
M=imread('lena.png');
subplot(2,3,1);
imshow(M);
title('ÔʼͼÏñ');
二、加上噪声,同时加上说明,算出PSNR
function[Im_noise]=noise(Im_org,noise)
switchnoise
case'gaussian'
Im_noise=gaunoise(Im_org);
case'salt&pepper'
Im_noise=spnoise(Im_org);
end
end
function[Im_noise]=gaunoise(Im_org)I_doubleim=double(Im_org);
Im_noise=uint8(I_doubleim+20*normrnd(0,1,size(I_doubleim)));end
function[Im_noise]=spnoise(Im_org)Im_noise=Im_org;
nois=rand(size(Im_org));
Im_noise(nois<0.05)=0;Im_noise(nois>0.95)=255;
end
三、高斯滤波处理图像的高斯噪声,计算PSNR
p=size(P1);x1=double(P1);
x2=x1;
fori=1:
p
(1)-3+1
forj=1:
p
(2)-3+1
c=x1(i:
i+(3-1),j:
j+(3-1));
e=c(1,:
);
foru=2:
3
e=[e,c(u,:
)];
end
mm=median(e);
x2(i+(3-1)/2,j+(3-1)/2)=mm;
end
end
J=uint8(x2);
subplot(2,3,5);
imshow(J);
k=8;
fmax=2.^k-1;
a=fmax.^2;
e=double(J)-double(M);
[m,n]=size(e);
b=sum(sum(e.^2));
PSNR=10*log10(m*n*a/b);
title(['PSNR:
',num2str(PSNR)]);
四、中值滤波处理图像的椒盐噪声,计算PSNR
function[Im_back]=spfilter(Im_noise)moban=[111;111;111];
m=size(Im_noise,1);
n=size(Im_noise,2);
Im_double=double(Im_noise);
Im_back=zeros(size(Im_noise));
fori=2:
m-1
forj=2:
n-1
x1=Im_double(i-1:
i+1,j-1:
j+1,1).*moban;
x2=Im_double(i-1:
i+1,j-1:
j+1,2).*moban;
x3=Im_double(i-1:
i+1,j-1:
j+1,3).*moban;
Im_back(i,j,1)=zhongzhi1(x1);
Im_back(i,j,2)=zhongzhi1(x2);
Im_back(i,j,3)=zhongzhi1(x3);
end
end
Im_back=uint8(Im_back);
end
function[mid]=zhongzhi1(m)mm=zeros(9);
fori=1:
3
forj=1:
3
mm((i-1)*3+j)=m(i,j);
end
end
fori=1:
5
forj=i+1:
9
ifmm(j)temp=mm(j);
mm(j)=mm(i);
mm(i)=temp;
end
end
end
mid=mm(5);
end
实验处理结果:
将代码封装在一起,综合运行可知:
源文件如下:
综合运行可知: