数字图像处理.docx
《数字图像处理.docx》由会员分享,可在线阅读,更多相关《数字图像处理.docx(12页珍藏版)》请在冰豆网上搜索。
![数字图像处理.docx](https://file1.bdocx.com/fileroot1/2022-11/22/7c1a4ddb-edae-4f69-a8d2-85021c2c1895/7c1a4ddb-edae-4f69-a8d2-85021c2c18951.gif)
数字图像处理
一.实验目的
掌握数字图象处理的基本方法,会用MATLAB或C语言等进行图象处理。
二.实验工具
PCMATLAB
三.实验内容
1.产生右图所示图像f1(x,y)(128×128大小,暗处=0,亮处=255),
用MATLAB中的fft2函数对其进行FFT:
(1)同屏显示原图f1和FFT(f1)的幅度谱图;
(2)若令
,重复以上过程,比较二者幅度谱的异同,简述理由;
(3)若将f2(x,y)顺时针旋转45度得到f3(x,y),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较。
2.对256×256大小、256级灰度的数字图像lena.img进行频域的理想低通、高通滤波,同屏
显示原图、幅度谱图和低通、高通滤波的结果图。
3.对给定的两种128×128、256级灰度的数字图像(图像磁盘文件名分别为Fing_128.img(指纹
图)和Cell_128.img(显微医学图像)进行如下处理:
(1)对原图像进行直方图均衡化处理,同屏显示处理前后图像及其直方图,比较异同,并回答为什么数字图像均衡化后其直方图并非完全均匀分布。
(2)对原图像加入点噪声,用4-邻域平均法平滑加噪声图像(图像四周边界不处理,下同),同屏显示原图像、加噪声图像和处理后的图像。
①不加门限;
②加门限
,(其中
)
4.[1]用Laplacian锐化算子(分α=1和α=2两种情况)对256×256大小、256级灰度的数字图像lena.img进行锐化处理,显示处理前、后图像。
(2)若令
则回答如下问题:
1
、
和
之间有何关系?
2
代表图像中的哪些信息?
3由此得出图像锐化的实质是什么?
5.分别利用Roberts、Prewitt、Sobel边缘检测算子,对256×256大小、256级灰度的数字图像lena.img进行边缘检测,显示处理前、后的图像。
四.实验结果
1.
实验结果图:
图1分别给出了:
(1)
(2)(3)的原图和相应FFT的幅度谱图:
图1
MATLAB程序:
f1=zeros(128,128);
forx=20:
100
fory=50:
78
f1(x,y)=1;
end
end
subplot(3,2,1)
imshow(f1);
F1=fft2(f1);
subplot(3,2,2)
imshow(F1);
F2=fftshift(F1);
subplot(3,2,4)
imshow(F2);
f2=ifft2(F2);
subplot(3,2,3)
imshow(f2);
f3=imrotate(f2,45,'bilinear');
subplot(3,2,5)
imshow(f3);
F3=fft2(f3);
subplot(3,2,6)
imshow(F3);
2.
低通滤波:
fid=fopen('F:
\数字图象处理\数字图像处理\上机\Lena.img','r');
data=(fread(fid,[256,256],'uint8'))';
subplot(1,2,1)
imagesc(data);
colormap(gray);
title('LENA','Color','r');
fft_lena=fft2(data);
f=fftshift(fft_lena);
fori=1:
256
forj=1:
256
ifsqrt((i-128)^2+(j-128)^2)>30
f(i,j)=0;
end
end
end
subplot(1,2,2);
[x,y]=meshgrid(1:
1:
256);
surf(x,y,f);
高通滤波
fid=fopen('F:
\数字图象处理\数字图像处理\上机\Lena.img','r');
data=(fread(fid,[256,256],'uint8'))';
subplot(1,2,1)
imagesc(data);
colormap(gray);
title('LENA','Color','r');
fft_lena=fft2(data);
fori=1:
256
forj=1:
256
ifsqrt((i-128)^2+(j-128)^2)<2
f(i,j)=0;
end
end
end
subplot(1,2,2);
[x,y]=meshgrid(1:
1:
256);
surf(x,y,f);
3.
(1)原图直方图均衡化处理:
Fing_128图像的处理前后图像及其直方图:
程序:
figure
(1);
fid=fopen('F:
\数字图象处理\数字图像处理\上机\fing_128.img','r');
data1=(fread(fid,[128,128],'uint8'))';
subplot(2,2,1)
data2=uint8(data1);
imshow(data2);
subplot(2,2,2);
imhist(data2);
a=imadjust(data2,[0,0.5]);
subplot(2,2,4);
imhist(a);
subplot(2,2,3);
imshow(a,256);%显示均衡化图象,256可缺省
Cell_128图象的处理前后图像及其直方图:
数字图象均衡化后,其直方图并非完全均匀分布,这是因为图象的象素个数和灰度等级均为离散数值;而且均衡化使灰度级并归,因此,均衡化后,其直方图并非完全均匀分布。
(2)去除噪声处理
Fing_128原图像,加噪图像和处理后图像
Cell_128原图像,加噪图像和处理后图像:
程序:
fid=fopen('F:
\数字图象处理\数字图像处理\上机\fing_128.img','r');%打开无格式文件
data1=(fread(fid,[128,128],'uint8'))';%将打开的文件读入到data1
subplot(1,3,1);%取第二个子窗口
data2=uint8(data1);%将灰度图象转换成uint8格式
imshow(data2);
subplot(1,3,2);
I=imnoise(data2,'gaussian',0,0.01);
imshow(I);
I2=double(I);%因为有运算要将操作数改为double
I1=zeros(128,128);
fori=2:
127
forj=2:
127
I1(i,j)=(I2(i-1,j)+I2(i+1,j)+I2(i,j-1)+I2(i,j+1))/4;
end
end
forj=1:
128
I1(1,j)=I(1,j);
I1(128,j)=I(128,j);
I1(j,1)=I(j,1);
I1(j,128)=I(j,128);
end
subplot(1,3,3);
I1=uint8(I1);%用imshow显示时需要将数据改成uint
imshow(I1);
4.
(1)
g1(m,n)处理的结果
g2(m,n)处理的结果
程序:
figure
(1);
fid=fopen('F:
\数字图象处理\数字图像处理\上机\lena.img','r');
data1=(fread(fid,[256,256],'uint8'))';
subplot(2,2,1)
data2=uint8(data1);
imshow(data2);
I=double(data2);
fori=2:
255
forj=2:
255
I1(i,j)=-I(i-1,j)-I(i+1,j)-I(i,j-1)-I(i,j+1)+5*I(i,j);
end
end
forj=1:
256
I1(1,j)=I(1,j);
I1(256,j)=I(256,j);
I1(j,1)=I(j,1);
I1(j,256)=I(j,256);
end
I2=uint8(I1);
subplot(2,2,2);
imshow(I2);
fori=2:
255
forj=2:
255
I3(i,j)=-2*I(i-1,j)-2*I(i+1,j)-2*I(i,j-1)-2*I(i,j+1)+9*I(i,j);
end
end
forj=1:
256
I3(1,j)=I(1,j);
I3(256,j)=I(256,j);
I3(j,1)=I(j,1);
I3(j,256)=I(j,256);
end
I4=uint8(I3);
subplot(2,2,3);
imshow(I4);
(2)
LENA图象锐化处理中,g2(m,n)代表了原图象中的二阶梯度信息;g1(m,n)是边缘增强后的数字图象;图象锐化的实质是将原图象与梯度信息叠加,相当于对目标物的边缘进行了增强。
5.
边缘检测结果:
程序:
figure
(1);
fid=fopen('C:
\DocumentsandSettings\Administrator\MyDocuments\MATLAB\imgeprocess\lena.img','r');
data1=(fread(fid,[256,256],'uint8'))';
subplot(2,2,1)
data2=uint8(data1);
imshow(data2);
title('lena')
subplot(2,2,2);
A=edge(data2,'roberts');
imshow(A);
title('roberts')
subplot(2,2,3);
B=edge(data2,'prewitt');
imshow(B);
title('prewitt')
subplot(2,2,4);
C=edge(data2,'sobel');
imshow(C);
title('sobel')