数字图像处理实验报告.docx
《数字图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
数字图像处理实验报告
实验报告书
系部名称
:
学生
:
专业名称
:
班级
:
实验时间
:
实验一直方图均衡
一、实验目的
在学习图像直方图的概念、计算方法、性质和相关应用基础上,生成、绘制图像的直方图,并应用MATLAB编程实现图像直方图均衡化程序。
二、实验容
(1)计算并绘制图像直方图;
(2)编程实现图像的直方图均衡化处理,显示均衡前后的直方图和图像;
三、实验运行结果
四、实验中遇到的问题及解决方法
1、显示无法找到图像文件,应将图片与xx.m文件置于同一文件夹;
2、编程过程中应注意标点的输入法,应该用英文输入,否则会报错。
3、编程完成后运行时输入文件名与保存时文件名相同,区分大小写。
五、思考题
(1)、灰度直方图可以反映一幅图像的哪些特征?
答:
1、表征了图像的一维信息。
只反映图像中像素不同灰度值出现的次数(或频数)而未反映像素所在位置。
2、与图像之间的关系是多对一的映射关系。
一幅图像唯一确定出与之对应的直方图,但不同图像可能有相同的直方图。
3、子图直方图之和为整图的直方图。
(2)均衡化后的直方图有何特点?
答:
经直方图均衡化处理后,可以得到一副改善了质量的新图像。
这幅图像的灰度层次将不再是呈黑暗色调的图像,而是一副灰度层次较为适中的、比原始图像清晰、明快得多的图像。
处理的结果使图像更适合与人的视觉特征或机器的识别系统。
六、实验心得体会
本次实验中,因为初学这个软件,我学习到了在程序中关于图像的运用,以及也复习了课本上的许多知识,加深了对直方图均衡化的理解。
七、程序清单
clearall;
I=imread('lena_gray_256.tif');%打开一幅灰度图像
[m,n]=size(I);
p=m*n;
J=imhist(I)./p;%计算图像的归一化直方图
subplot(1,3,1),imshow(I);
subplot(1,3,2),imhist(I,64);
subplot(1,3,3),plot(J);
(2)直方图均衡化
clearall;
Im=imread('region.jpg');
J=histeq(Im);%均衡化
subplot(2,2,1);
imshow(Im);
title('原图');%显示原图
subplot(2,2,2);
imhist(Im);
title('原图直方图');%显示原图的直方图
subplot(2,2,3);
imshow(J);
title('均衡化结果');%显示均衡化后的图像
subplot(2,2,4);
imhist(J);
title('均衡化结果的直方图');%显示均衡化后的直方图
实验二频域图像增强
一、实验目的
1、频域图像增强
2、掌握基于频域的图像增强方法。
二、实验容
(1)编程实现图像的理想低通和高通滤波;
(2)编程实现图像的巴特沃斯低通和高通滤波。
三、实验运行结果
四、实验中遇到的问题及解决方法
显示图像无法打开,最终查出来时图像格式弄错了。
五、思考题
分析为什么图像通过低通滤波器后变得模糊?
为什么通过高通滤波器后得到锐化结果?
答:
图像的精细结构及突变部分主要由高频成分起作用,故经低通滤波后图像的精细结构消失,变得模糊;经高通滤波后图像得到锐化。
六、实验心得体会
本实验中遇到很多问题及错误,例如图像打不开、处理后图像模糊等,都是经常容易发生的错误,最后实验几次,就能够逐一自己解决了。
使自己对数字图像处理课程中的许多问题有了更实际和确切的深入了解。
七、程序清单
clc;
clear;
data4=imread('lena.gif');
subplot(3,2,1);
imshow(data4);
title('原图');
i=fft2(data4);
subplot(3,2,2);
i=fftshift(i);
z=log(abs(i));
x=0:
1:
255;
y=0:
1:
255;
[x,y]=meshgrid(x,y);
mesh(z);%以三维坐标显示该图像频谱图
title('原图频谱');
[n,m]=size(i);%对该图进行低通滤波
fork=1:
1:
n
forl=1:
1:
m
if(k^2+l^2)>=190^2%选取D=190
result(k,l)=0;
elseresult(k,l)=i(k,l);
end
end
end
subplot(3,2,4);
z=log(abs(result));%三维方式显示低通滤波后的频谱图
x=0:
1:
255;
y=0:
1:
255;
[x,y]=meshgrid(x,y);
mesh(z);
title('理想低通滤波后的频谱');
subplot(3,2,3);%新建图像显示窗口
result=fftshift(result);%滤波后的数据去中心化
b=ifft2(result);%逆傅里叶变换
imshow(uint8(abs(b)));
title('理想低通滤波后的图像');
subplot(3,2,6);%新建图像显示窗口
%[n,m]=size(c);%对原图进行高通滤波
fork=1:
1:
n
forl=1:
1:
m
if(k^2+l^2)<=190^2%选取D=190
result(k,l)=0;
elseresult(k,l)=i(k,l);
end
end
end
z=log(abs(result));
x=0:
1:
255;%三维方式显示高通滤波前的频谱图
y=0:
1:
255;
[x,y]=meshgrid(x,y);
mesh(z);
title('理想高通滤波后的频谱');
subplot(3,2,5);
result=fftshift(result);%滤波后的数据去中心化
d=ifft2(result);%逆傅里叶变换
imshow(uint8(abs(d)));
title('理想高通滤波后的图像');
%频域增强(巴特沃斯原型)
%二阶巴特沃斯(Butterworth)低通滤波器
%clc;
%clear;
Figure;
J1=imread('lena.gif');
subplot(3,2,1);
imshow(J1);
title('原图');
f=double(J1);
g=fft2(f);%傅立叶变换
g=fftshift(g);%转换数据矩阵
subplot(3,2,2);
x=0:
1:
255;
y=0:
1:
255;
[x,y]=meshgrid(x,y);
z=log(abs(g));%取幅度
mesh(z);%以三维坐标显示该图像频谱图
title('原图频谱');
[M,N]=size(g);
nn=2;%二阶巴特沃斯(Butterworth)低通滤波器
d0=20;
m=fix(M/2);n=fix(N/2);
fori=1:
M
forj=1:
N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn));%计算低通滤波器传递函数
result(i,j)=h*g(i,j);
end
end
subplot(3,2,4);
x=0:
1:
255;
y=0:
1:
255;
[x,y]=meshgrid(x,y);
z=log(abs(result));%取幅度
mesh(z);%以三维坐标显示该图像频谱图
title('低通滤波后的频谱');
result=ifftshift(result);
J2=ifft2(result);
J3=uint8(abs(J2));
subplot(3,2,3);
imshow(J3);
title('低通滤波后的图像');
%利用二阶巴特沃斯(Butterworth)高通滤波器
nn=2;%二阶巴特沃斯(Butterworth)高通滤波器
d0=5;
m=fix(M/2);
n=fix(N/2);
fori=1:
M
forj=1:
N
d=sqrt((i-m)^2+(j-n)^2);
if(d==0)
h=0;
else
h=1/(1+0.414*(d0/d)^(2*nn));%计算传递函数
end
result(i,j)=h*g(i,j);
end
end
subplot(3,2,6);
x=0:
1:
255;
y=0:
1:
255;
[x,y]=meshgrid(x,y);
z=log(abs(result));%取幅度
mesh(z);%以三维坐标显示该图像频谱图
title('高通滤波后的频谱');
result=ifftshift(result);
J2=ifft2(result);
J3=uint8(abs(J2));
subplot(3,2,5);
imshow(J3);
title('高通滤波后的图像');
实验三图像边缘检测与连接
一、实验目的
图像边缘检测与连接
二、实验容
(1)编程实现一阶差分边缘检测算法,包括Robert梯度算子、Prewitt算子、Sobel算子等;
(2)编程实现二阶差分拉普拉斯边缘检测算法以及LoG检测法和Canny检测法;
(3)分析与比较各种边缘检测算法的性能;
(4)编程实现Hough变换提取直线
(5)分析Hough变换检测性能;
三、实验运行结果
四、实验中遇到的问题及解决方法
拷贝文件后没改文件名,直接执行时出现错误,最后重新修改后重新编译,使之成功。
五、思考题
(1)边缘的方向是什么意思?
为什么要考虑边缘的方向?
答:
边缘常常意味着一个区域的终结和另一个区域的开始,图像的边缘也包含了物体的形状的重要信息,他不仅在分析图像时大幅度的减少了要处理的信息量,而且还保护了目标的边界结构。
所以考虑边缘的方向很重要。
(2)Hough变换原理是什么?
答:
Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。
这样就把原始图像中给定曲线的检测问题转化为准找参数空间的峰值问题。
也即把检测整体特性转化为检测局部特性。
比如直线、椭圆、圆、弧线等。
六、实验心得体会
对于一些图像处理的函数不是很了解,只能够按课本的参照函数拷贝做实验,对于其中的一些函数问题理解不是很透彻,有些甚至完全不懂。
还得继续努力。
七、程序清单
1、边缘检测
由edge函数实现各算子对图像的边缘检测
clearall;
I=imread('d:
\office.bmp');
I=rgb2gray(I);
BW1=edge(I,'sobel');%利用Sobel算子进行边缘检测
BW2=edge(I,'roberts');%利用roberts算子进行边缘检测
BW3=edge(I,'prewitt');%利用prewitt算子进行边缘检测
BW4=edge(I,'log');%利用log算子进行边缘检测
BW5=edge(I,'canny');%利用canny算子进行边缘检测
subplot(2,3,1),imshow(I)
subplot(2,3,2),imshow(BW1)
subplot(2,3,3),imshow(BW2)
subplot(2,3,4),imshow(BW3)
subplot(2,3,5),imshow(BW4)
subplot(2,3,6),imshow(BW5)
2、边缘连接
使用Hough变换作线检测和连接
clearall;
RGB=imread('d:
\M_M.bmp');
I=RGB;
%I=rgb2gray(RGB);
BW=edge(I,'canny');%利用Canny算子提取图像边缘
[H,T,R]=hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);
figure
(1),
imshow(T,R,H,[],'notruesize'),axison,axisnormal
xlabel('\T'),ylabel('\R')
p=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:
))));
%找到5个较明显的Hough变换峰值
holdon
plot(T(p(:
2)),R(p(:
1)),'s','color','white');
lines=houghlines(BW,T,R,p,'FillGap',10,'MinLength',10);
%查找并线段
figure,imshow(BW),holdon%在二值图中叠加显示这些线段
fork=1:
length(lines)
xy=[lines(k).point1;lines(k).point2];
plot(xy(:
1),xy(:
2),'LineWidth',2,'Color','green');
end