合工大图像处理.docx
《合工大图像处理.docx》由会员分享,可在线阅读,更多相关《合工大图像处理.docx(10页珍藏版)》请在冰点文库上搜索。
合工大图像处理
合肥工业大学数字图象处理实验(刘强)
第一章MATLAB简介及图像基本运算
1.编写程序add.m,subtract.m,immultiply.m文件分别实现两幅图像的加,减、乘
2.从矩阵的角度编写程序实现图像的加法运算得到混合图像,然后将混合图像与背景图像做减法运算。
3.编写程序实现图像的局部显示
4.使用subplot函数实现多图像的显示
i=imread('图片3.png');%改成你的图片注意这两张图片的大小要一致,否则会出现X与Y不一样的错误
j=imread('图片3.png');%改成你的图片
k1=imadd(i,j);
subplot(2,2,1),imshow(k1),title('加法运算');
k2=imsubtract(i,j);
subplot(2,2,2),imshow(k2),title('减法运算');
k3=immultiply(i,j);
subplot(2,2,3),imshow(k3),title('乘法运算');
B=zeros(300,300);
B(40:
200,40:
200)=1;
k4=imsubtract(k1,j);
subplot(2,2,4),imshow(k4),title('先加后减')
B1=uint8(B);
k5=immultiply(k4,B1);
figure,imshow(k5),title('局部显示')
生成图像
实验二图像变换
1.选取一幅图像,编程并实现图像的频率位移,移到窗口中央。
选取一幅图像,进行离散傅里叶变换,再对其进行一定角度的旋转,进行离散傅里叶变换。
I=zeros(256,256);
I(88:
168,124:
132)=1;%产生图像256*256的图像
J=fft2(I);
F=abs(J);
J1=fftshift(F);subplot(2,2,1),
imshow(J1,[550]),title('将原始图形放在中央');
%对原始图像进行旋转
J=imrotate(I,90,'bilinear','crop');
subplot(2,2,2),
imshow(J),title('原始图像旋转90度');
%求旋转后图像的傅里叶频谱
J1=fft2(J);
F=abs(J1);
J2=fftshift(F);subplot(2,2,3),
imshow(J2,[550]),title('旋转90度后的频谱图')
生成图像
2.对图像进行离散余弦变换,观察其余弦变换系数及余弦反变换后恢复图像。
第三章图像的灰度运算
1.对一灰度图像,通过选择不同的灰度级变换函数s=T(r)实现图像的灰度范围线性扩展和非线性扩展,以及图像的灰度倒置和二值化。
I=imread('图片3.png');
figure;
subplot(2,3,1);
imshow(I);
title('原图');
J=imadjust(I,[0.3;0.6],[0.1;0.9]);%设置灰度变换的范围
subplot(2,3,2);
imshow(J);
title('线性扩展');
I1=double(I);%将图像转换为double类型
I2=I1/255;%归一化此图像
C=2;
K=C*log(1+I2);%求图像的对数变换
subplot(2,3,3);
imshow(K);
title('非线性扩展');
M=im2bw(I,0.5);
M=~M;
%M=255-I;%将此图像取反
%Figure
subplot(2,3,4);
imshow(M);
title('灰度倒置');
N1=im2bw(I,0.4);%将此图像二值化,阈值为0.4
N2=im2bw(I,0.7);%将此图像二值化,阈值为0.7
subplot(2,3,5);
imshow(N1);
title('二值化阈值0.4');
subplot(2,3,6);
imshow(N2);
title('二值化阈值0.7');
生成图像
第四章图像增强
1.选取一幅图像,加入椒盐噪声,分别用均值滤波和中值滤波进行平滑处理,比较滤波效果
I=imread('图片3.png');
J=imnoise(I,'salt&pepper',0.02);%添加椒盐噪声
ave1=fspecial('average',3);%产生3×3的均值模版
%ave2=fspecial('average',5);%产生5×5的均值模版
K=filter2(ave1,J)/255;%均值滤波3×3
%M=medfilt2(J,[33]);%中值滤波3×3模板
N=medfilt2(J,[44]);%中值滤波4×4模板
subplot(2,2,1),imshow(I),title('原始图像');
subplot(2,2,2),imshow(J),title('加椒盐噪声');
subplot(2,2,3),imshow(K),title('均值滤波图像');
subplot(2,2,4),imshow(N),title('中值滤波图像');
生成图像
2.选取一幅含高斯噪声图像,用巴特沃斯低通,指数低通和梯形低通处理该图像。
[I,map]=imread('图片3.png');
noisy=imnoise(I,'gaussian',0.01);
imshow(noisy,map);
[MN]=size(I);
F=fft2(noisy);
fftshift(F);
Dcut=100;
D0=150;
D1=250;
foru=1:
M
forv=1:
N
D(u,v)=sqrt(u^2+v^2);
BUTTERH(u,v)=1/(1+(sqrt
(2)-1)*(D(u,v)/Dcut)^2);
EXPOTH(u,v)=exp(log(1/sqrt
(2))*(D(u,v)/Dcut)^2);
ifD(u,v)TRAPEH(u,v)=1;
elseifD(u,v)<=D1
TRAPEH(u,v)=(D(u,v)-D1)/(D0-D1);
elseTRAPEH(u,v)=0;
end
end
end
BUTTERG=BUTTERH.*F;
BUTTERfiltered=ifft2(BUTTERG);
EXPOTG=EXPOTH.*F;
EXPOTGfiltered=ifft2(EXPOTG);
TRAPEG=TRAPEH.*F;
TRAPEfiltered=ifft2(TRAPEG);
subplot(2,2,1),imshow(noisy);title('高斯噪声');
subplot(2,2,2),imshow(BUTTERfiltered,map);title('巴特沃斯低通滤波');subplot(2,2,3),imshow(EXPOTGfiltered,map);title('指数型低通滤波');subplot(2,2,4),imshow(TRAPEfiltered,map);title('梯形低通滤波');
生成图像
3.选取一幅图像,采用sobel算子,prewitt算子和拉普拉斯算子对图像进行锐化处理
I=imread('图片3.png');
subplot(2,3,1),imshow(I);title('原图像');%显示原图像
H=fspecial('sobel');%应用sobel算子锐化图像
I2=filter2(H,I);%sobel算子滤波锐化
subplot(2,3,2);imshow(I2);%显示sobel算子锐化图像
title('sobel算子锐化图像');
I=double(I);
h=[0,1,0,1,-4,1,0,1,0];
J=conv2(I,h,'same');
%K=I-J;
subplot(2,3,3),imshow(J);title('laplace算子锐化图像');
I=double(I);
h1=[1,0,-1,1,0,-1,1,0,-1];
J1=conv2(I,h1,'same');
%K=I-J;
subplot(2,3,4),imshow(J1);
title('prewitt算子锐化图像');
生成图像
第五章图像分割
1.选取一幅图像,用Sobel,Roberts,Prewitt,LOG,Canny算子进行边缘检测,观察效果
f=imread('图片3.png');
%[gv,t1]=edge(f,'sobel');%使用edge函数对图像f提取垂直的边缘
gv=edge(f,'sobel');
subplot(2,3,1),imshow(gv);
title('sobel算子提取边缘');
f=imread('图片3.png');
%[gv,t1]=edge(f,'roberts');%使用edge函数对图像f提取垂直的边缘
gv=edge(f,'roberts');
subplot(2,3,2),imshow(gv);
title('roberts算子提取边缘');
f=imread('图片3.png');
%[gv,t1]=edge(f,'prewitt');%使用edge函数对图像f提取垂直的边缘
gv=edge(f,'prewitt');
subplot(2,3,3),imshow(gv);
title('prewitt算子提取边缘');
f=imread('图片3.png');
%[gv,t1]=edge(f,'log');%使用edge函数对图像f提取垂直的边缘
gv=edge(f,'log');
subplot(2,3,4),imshow(gv);
title('log算子提取边缘');
f=imread('图片3.png');
%[gv,t1]=edge(f,'canny');%使用edge函数对图像f提取垂直的边缘
gv=edge(f,'canny');
subplot(2,3,5),imshow(gv);
title('cannny算子提取边缘');
生成图像