数字图像处理课程设计报告Word文档格式.docx
《数字图像处理课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字图像处理课程设计报告Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
2设计思想:
2.1图像处理演示系统实现工具的选择
使用MATLAB软件进行界面设计及程序编写。
2.2选择MATLAB软件原因
之所以选择MATLAB工具是因为:
MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。
作为强大的科学计算平台,它几乎能够满足所有的计算需求。
MATLAB全称是MatrixLaboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。
实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。
这一特点也就决定了MATLAB在处理数字图像上的独特优势。
理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。
二维图像进行均匀采样,就可以得到一幅离散化成M×
N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。
而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。
MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;
支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读,写和显示。
MATLAB对图像的处理功能主要集中在它的图像处理工具箱(ImageProcessingToolbox)中。
图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。
2.3系统结构框图
3图形用户界面设计
GUI是实现人机交互的中介,可以通过它实现数据输入、处理和输出。
MATLAB提供了一个专门的GUI设计工具——图形用户界面开发环境(GUIDE),使用该工具,可以快速完成GUI设计任务。
利用MATLAB提供的有关数据,还可以创建工具栏控件和多种对话框。
3.1启动GUIDE
在命令窗口中键入guide,启动GUIDE,显示如下图所示的“GUIDEQuickStart”对话框。
打开“GUIDEQuickStart”对话框,利用GUIDE模板创建新的GUI,选择一个模板后,单机OK按钮,在输出编辑器中打开GUI。
如下:
3.2输出编辑器
在GUIDE中打开GUI以后,它显示在输出编辑器中。
输出编辑器是所有GUIDE工具的控制面板。
可以通过拖拉控件来设计GUI,这些控件位于输出编辑器左侧的工具箱中,有按钮、弹出式菜单和坐标系等多种。
也可以用输出编辑器设置GUI控件的基本属性。
3.3GUIDE模板
“GUIDEQuickStart”对话框提供了几种基本类型的GUI模板。
使用模板的好处是可以通过改模板来快速创建GUI。
选择一种模板以后,它的预览效果显示在右面的面板中。
3.4菜单编辑器
利用菜单编辑器,可以创建、设置、修改下拉式菜单和弹出式菜单。
在GUIDE中单机工具栏上的
按钮,或者选择“Tools”菜单中的“MenuEditor…”选项,打开菜单编辑器的界面,如下图所示:
上图中左上角第一个按钮用于创建下拉式菜单。
用户可以通过单击它来创建下拉式主菜单。
第二个按钮用于创建下拉式主菜单的子菜单
运行后效果如下:
最终GUI运行效果图如下:
首次运行后会自动生成zhankeUI.m和zhankeUI.fig两个文件,默认目录设在MATLAB安装目录下的work文件夹里,zhankeUI.m中存放的是GUI的相关编码,以及相关控件的回调函数,今后可以对其进行代码修改,添加,删除等操作,zhankeUI.fig是GUI的界面文件。
今后主要是对zhankeUI.m文件里面代码的相关操作以实现相关功能!
4图像处理演示系统各功能的实现
4.1文件的打开与保存
4.1.1文件的打开
在主菜单“文件”的下拉菜单中,有个“打开”选项,在其回调函数中添加打开某个文件的相关代码:
[fname,pname]=uigetfile('
*.bmp;
*.jpeg;
*.gif'
'
Openthefile'
)
fname为将要打开文件的文件名,pname为将要打开文件的路径。
Uigetfile函数中主要有两部分参数'
是想要打开文件的格式,’Openthefile’是生成文件选择打开对话框的标题,此段代码运行效果如下:
图4.1.1打开一幅图像
从上图中选择需要进行操作的文件,将其打开以便后续操作…
图4.1.2打开一幅图像后在界面窗口显示
在‘打开’回调函数中我希望同时对文件进行相关数据的读取,以便在今后的处理操作中可以方便的调用,读取完图像数据后在窗口中显示图像,相关代码如下:
V=strcat(pname,fname);
%将图像赋值给变量V
handles.my_data1=V
guidata(hObject,handles)%更新句柄数据
axes(handles.axes7)%添加一坐标轴用来指定显示图像的区域
imshow(V)%显示选取的图像
当执行以上代码时会有一种情况出现错误,那就是当我们进行“打开”文件操作时候,如上图Open,在这里当我们没有选择文件,而将窗口强行关闭或选择了程序无法识别的文件格式时,命令窗口会提示错误,所以加入如下代码进行处理:
iffname<
5
return
end
对打开的文件名长度进行判断,确定有文件打开时会进行下面的操作,当没有文件时退出,整个回调函数如下:
'
L=length(fname)
handles.my_data1=V
guidata(hObject,handles)
axes(handles.axes7)
imshow(V)
4.1.2文件的保存
[newfile,newpath]=uiputfile(‘*.bmp’,’Savefilename’)
准备把当前文件*.bmp保存到当前目录下,文件保存对话框中列出当前目录下的所有文件,保存的文件名和路径名保存到newfile和newpath中。
4.2图像的增强
4.2.1图像的平滑滤波处理
1)平滑滤波的作用:
对图像的高频分量进行消弱或消除,增强图像的低频分量。
平滑滤波一般用于消除图像中的随即噪声,从而起到图像平滑的作用
2)平滑滤波原理:
(1)邻域平均滤波法
邻域平均滤波法是将一个像素点及其邻域中的所有像素点的平均值赋给输出图像中相应的像素点,从而达到平滑的目的,又称均值滤波法。
最简单的邻域平均滤波法是所有模板系数都取相同的值.
邻域平均滤波法的运算公式为:
g(x,y)=1/N∑f(i.j)x,y=0,1,2,…,N-1
j=∈M
其中,M是以(x,y)为中心的邻域像素点的集合,N是该邻域内像素点的总个数,对每个像素点按该公式进行计算即可得到增强图像中所有像素点的灰度值。
(2)中值滤波法
尽管邻域平均滤波法可以起到平滑图像的作用,但在消除噪声的同时会使图像中的一些细节变得模糊。
中值滤波法则在消除噪声的同时还能保持图像中的细节部分,防止图像的边缘部分模糊。
与邻域平均法不同,中值滤波是将邻域内所有的像素点值按从小到大的顺序排列,取中间值作为中心像素点的输出值。
其原理是利用一个奇数点的移动窗口,将窗口中心点的值用窗口各点的中间值代替,与均值滤波不同,它不是通过对邻域内的所有像素点求平均值来消除噪声的,而是让与周围像素点灰度值的差比较大的像素点改取近似于周围像素点灰度值的值。
从而达到消除噪声的目的。
3)实现方法:
采用邻域平均法对图像进行处理,实现方法如下:
fori=2:
w-1
forj=2:
h-1I_1(i,j)=uint8((double(I(i-1,j-1))+double(I(i-1,j))+double(I(i-1,j+1))+double(I(i,j-1))+double(I(i,j))+double(I(i,j+1))+double(I(i+1,j-1))+double(I(i+1,j))+double(I(i+1,j+1)))/9);
end
采用中值滤波法对图像进行处理,其实现方法如下:
forj=2:
h-1
form=1:
3
forn=1:
hhh((m-1)*3+n)=I(i+m-2,j+n-2);
end
forp=1:
9
forq=p+1:
if(hhh(p)>
hhh(q))
temp=hhh(p);
hhh(p)=hhh(q);
hhh(q)=temp;
I_2(i,j)=hhh(5);
图4.2.1图像空域的平滑滤波处理结果
4.2.2图像的锐化滤波处理
1)锐化滤波的作用:
图像的平滑处理会使图像的边缘纹理信息受到损失,图像变得比较模糊。
如果需要突出图像的边缘纹理信息,则可以通过锐化滤波器实现,它可以消除或减弱图像的低频分量从而增强图像中物体的边缘轮廓信息,使得除边缘以外的像素点的灰度值趋向于零。
2)锐化滤波原理
锐化滤波器是以对图像的微分运算或差分运算为基础。
微分运算是求像素点灰度值的变化率,而图像内不同物体边缘处的像素点的灰度值往往变化比较明显,因此微分运算或差分运算可以起到增强边缘信息的作用。
锐化算子:
0-10
H=-14-1
fori=1:
m-2
forj=1:
n-2
b(i+1,j+1)=abs(4*x(i+1,j+1)-x(i,j+1)-x(i+1,j)-x(i+1,j+2)-x(i+2,j+1));
图4.2.2模板锐化滤波结果
4.3图像的几何变换
4.3.1对图像进行平移
1)图像平移的作用:
将图像中的某点从一个位置(X,Y)移动到另外一个位置(X0,Y0),而使平移后的图像与原始图像完全相同。
2)图像平移原理:
图像的平移是图像变换中最简单的变换之一,其特点是平移后的图像与原图像完全相同,平移后新图像上的每一个点都可以在原图像中找到对应的点。
若点A0(X0,Y0)进行平移后,被移到A(X,Y),其中X方向的平移量为△X.Y方向的平移量为△Y,那么点A(X,Y)的坐标为:
X=X0+△X
Y=Y0+△Y
操作中需要输入平移的横纵量,变量的输入代码如下
prompt={'
请输入横向平移量'
};
title='
'
;
ansa=inputdlg(prompt,title);
x1=str2num(ansa{1});
handles.my_data4=x1;
请输入纵向平移量'
y1=str2num(ansa{1});
handles.my_data5=y1;
%上段代码中的x1,y1即为需要输入的横向平移量与纵向平移量
执行后出现如图界面:
forx=1:
w
fory=1:
h
PosSourceX=uint16(x+x1);
PosSourceY=uint16(y+y1);
if((PosSourceX<
1)||(PosSourceX>
w)||(PosSourceY<
1)||(PosSourceY>
h))
if(xx.BitDepth==24)
Transfor(x,y,1:
3)=uint8
(1);
else
Transfor(x,y)=uint8
(1);
if(xx.BitDepth==24)
Transfor(x,y,1:
3)=BmpImage(PosSourceX,PosSourceY,1:
3);
Transfor(x,y)=BmpImage(PosSourceX,PosSourceY);
figure;
imshow(Transfor)
%(PosSourceX和PosSourceY是平移后坐标点,Transfor为平移后图片)
图4.3.1图像的平移结果
4.3.2对图像进行缩放
1)图像缩放的作用:
对图像进行缩小和放大的处理,可分别对其宽和高的缩放量进行设置。
2)图像缩放原理:
通常情况下,数字图像的比例缩放是将给定的图像在X方向和Y方向按相同比例缩放a倍。
从而获得一副新的图像,如果X方向和Y方向缩放的比例不同,则图像的比例缩放会改变原始图像像素之间的相对位置,产生几何畸变。
设原始图像中的点A0(X0,Y0)比例缩放后,在新图像中的对应点为A1(X1,Y1),则坐标关系可表示为:
X1=aX0
Y1=bX0
若比例缩放所产生的图像中的像素在原图像中没有相对应的像素点时,就需要进行灰度值的插值运算,一般有以下两种插值处理方法。
(1)直接赋值为和它最相近的像素灰度值,这种方法称为最邻近插值法,该方法的主要特点是简单、计算量很小、但可能会产生马赛克现象;
(2)通过其他数学插值算法来计算相应像素点的灰度值,这类方法处理效果好,但运算量会有所增加
对图像进行缩放时需要输入缩放的倍数,其相关代码如下:
请输入X向缩放倍数:
sx=str2num(ansa{1});
handles.my_data3=sx;
%上段代码中的sx即为下图中所输入的倍数
同理可设置Y向缩放倍数sy.
m=xx.Width;
n=xx.Height;
m1=m*sx;
n1=n*sy;
forh=1:
m1;
forw=1:
n1;
b(h,w)=i(round(h/sx),round(w/sy));
%round取最邻近整数
(m,n为原始图像的二维数据,m1,n1为缩放后的图像二维数据,xx为读取的原始图像信息)
图4.3.2图像的缩放结果
4.3.3对图像进行旋转
1)图像旋转的作用:
对图像进行任意角度的旋转。
2)图像旋转原理:
图像的旋转变换是几何学中研究的重要内容之一,一般情况下,图像的旋转变换是指以图像的中心为原点,将图像上的所有像素都旋转同一个角度的变换。
图像经过旋转变换之后,图像的位置发生了改变,但旋转后,图像的大小一般会改变。
和平移变换一样,在图像旋转变换中既可以把转出显示区域的图像截去,又可以扩大显示区域的图像范围以显示图像的全部。
设原始图像的任意点A0(X0,Y0)经过旋转β角度以后到新的位置A(X,Y),为表示方便,采用极坐标形式表示,原始点的角度为а。
如下图所示
P
rA(X,Y)
rA0(X0,Y0)
根据极坐标与二维垂直坐标的关系,原始图像的点A0(X0,Y0)的X0和Y0坐标如下:
X0=rcosа
Y0=rsinа
旋转到新位置以后点A(X,Y)的坐标如下:
X=rcos(а-β)=rcosаcosβ+rsinаsinβ=X0cosβ+Y0sinβ
Y=rsin(а-β)=rsinаcosβ-rcosаsinβ=-X0sinβ+Y0cosβ
图像的旋转变换用矩阵形式表示如下:
Xcosβsinβ0X0
Y=-sinβcosβ0Y0
10011
对图像进行旋转操作时需要输入旋转角度,相关实现代码如下:
请输入旋转角度:
AngleDegrees'
n=str2num(ansa{1});
handles.my_data2=n;
%n为我们输入的角度值
V=handles.my_data1;
n=handles.my_data2;
G=imread(V);
i=rgb2gray(G);
pai=3.14;
n=pai*n/180;
%将角度转换为直观的表示方法,便于直接输入度数。
上段代码执行如下:
%计算原图像各像素的新坐标
forindexX=0:
(X-1)
forindexY=0:
(Y-1)
ImageNew(round(indexX*cos(n)-indexY*sin(n))+round(abs(min([LeftTop(1,1),LeftBottom(1,1),RightTop(1,1),RightBottom(1,1)])))+1,1+round(indexX*sin(n)+indexY*cos(n))+round(abs(min([LeftTop(1,2),LeftBottom(1,2),RightTop(1,2),RightBottom(1,2)]))))=i(indexX+1,indexY+1);
图4.3.3图像旋转处理结果
4.3.4对图像进行横轴翻转和纵轴翻转
1)图像翻转的作用:
实现图像的水平和垂直方向的翻转。
2)图像翻转原理:
垂直方向:
y′=h-y+1
水平方向:
x′=w-x+1
其中为h图像高,w为图像宽
if(xx.BitDepth==24)
Transfor(x,y,1:
Transfor(x,y,1:
(Transfor为翻转后图像,PosSourceX,PosSourceY为翻转后坐标)
图4.3.4图像的横轴翻转和纵轴翻转
4.4图像直方图的绘制
1)图像直方图绘制的作用:
实现图像直方图的均衡化。
2)图像直方图均衡原理:
直方图均衡化是将原图像的直方图通过变换函数修正为均匀的直方图,然后按均衡直方图修正原图像。
图像均衡化处理后,图像的直方图是平直的,即各灰度级具有相同的出现频数,那么由于灰度级具有均匀的概率分布,图像看起来就更清晰了。
首先假定连续灰度级的情况,推导直方图均衡化变换公式,令r代表灰度级,P(r)为概率密度函数。
(注:
r值已归一化,最大灰度值为1)。
V=handles.my_data1;
xx=imfinfo(V);
Bmpimage=imread(V);
w=xx.Width;
h=xx.Height;
grey_grade=2^xx.BitDepth;
grey_grade
grey_friq(i)=0;
fory=1:
w
forx=1:
forr=1:
ifBmpimage(x,y)==r
grey_friq(r)=grey_friq(r)+1;
figure;
subplot(2,2,3);
imshow(Bmpimage);
subplot(2,2,1);
line([i,i],[0,grey_friq(i)]);
sk(i)=0;
p_eq(i)=0;
sk
(1)=grey_friq
(1)/(w*h);
sk(i)=sk(i-1)+gr