数字图像处理课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理课程设计
题目;数字图像处理演示系统设计
指导教师_________________________
学生姓名__________________________
学生学号__________________________
院(部)______________专业_______________班___
2014年月日
1主要内容
1.1数字图像处理背景及应用
数字图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。
目前,图像处理演示系统应用领域广泛医学、军事、科研、商业等领域。
因为数字图像处理技术易于实现非线性处理,处理程序和处理参数可变,故是一项通用性强,精度高,处理方法灵活,信息保存、传送可靠的图像处理技术。
本图像处理演示系统以数字图像处理理论为基础,对某些常用功能进行界面化设计,便于初级用户的操作。
1.2图像处理演示系统设计要求
能加载和显示原始图像,显示和输出处理后的图像;系统要便于维护和具备可扩展性;界面友好便于操作。
1.3图像处理演示系统设计任务
数字图像处理演示系统应该具备图像的几何变换(平移、缩放、旋转、翻转)、图像增强(空间域的平滑滤波与锐化滤波)的简单处理功能。
1.3.1几何变换
几何变换又称为几何运算,它是图像处理和图像分析的重要内容之一。
通过几何运算,可以根据应用的需要使原图像产生大小、形状、和位置等各方面的变化。
简单的说,几何变换可以改变像素点所在的几何位置,以及图像中各物体之间的空间位置关系,这种运算可以被看成是将各物体在图像内移动,特别是图像具有一定的规律性时,一个图像可以由另外一个图像通过几何变换来产生。
实际上,一个不受约束的几何变换,可将输入图像的一个点变换到输出图像中的任意位置。
几何变换不仅提供了产生某些特殊图像的可能,甚至还可以使图像处理程序设计简单化。
从变换性质来分可以分为图像的位置变换、形状变换等。
1.3.2图像增强
图像增强是数字图像处理的基本内容之一,其目的是根据应用需要突出图像中的某些“有用”的信息,削弱或去除不需要的信息,以达到扩大图像中不同物体特征之间的差别,使处理后的图像对于特定应用而言,比原始图像更合适,或者为图像的信息提取以及其他图像分析技术奠定了基础。
一般情况下,经过增强处理后,图像的视觉效果会发生改变,这种变化意味着图像的视觉效果得到了改善,某些特定信息得到了增强。
2设计思想
2.1图像处理演示系统实现工具的选择
使用MATLAB软件进行界面设计及程序编写。
2.2选择MATLAB软件原因
之所以选择MATLAB工具是因为MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。
作为强大的科学计算平台,它几乎能够满足所有的计算需求。
MATLAB全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。
实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。
这一特点也就决定了MATLAB在处理数字图像上的独特优势。
理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。
二维图像进行均匀采样,就可以得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。
而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。
MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读,写和显示。
MATLAB对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。
图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和
滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。
2.3系统结构框图
3图形用户界面设计
GUI是实现人机交互的中介,可以通过它实现数据输入、处理和输出。
MATLAB提供
了一个专门的GUI设计工具——图形用户界面开发环境(GUIDE),使用该工具,可以快速完成GUI设计任务。
利用MATLAB提供的有关数据,还可以创建工具栏控件和多种对话框。
3.1启动GUIDE
在命令窗口中键入guide,启动GUIDE,显示“GUIDE Quick Start”对话框。
打开“GUIDE Quick Start”对话框,利用GUIDE模板创建新的GUI,选择一个模板后,单击OK按钮,在输出编辑器中打开GUI。
或启动MATLAB软件后,进入集成开发环境,在主菜单上选择:
如上操作后,将有一个窗口弹出,即进入MATLAB的GUI编辑软件。
利用该编辑软件的“New-新建”创建你自己的用户界面窗口。
注意:要编辑一个以前设计的用户界面,操作过程与此类似,进入GUI编辑软件后,利用“Open-打开”来选择要编辑的以前设计的用户窗口界面。
3.2输出编辑器
在GUIDE中打开GUI以后,它显示在输出编辑器中。
输出编辑器是所有GUIDE工具的控制面板。
可以通过拖拉控件来设计GUI,这些控件位于输出编辑器左侧的工具箱中,有按钮、弹出式菜单和坐标系等多种。
也可以用输出编辑器设置GUI控件的基本属性。
3.3GUIDE模板
“GUIDE Quick Start”对话框提供了几种基本类型的GUI模板。
使用模板的好处是可以通过改模板来快速创建GUI。
选择一种模板以后,它的预览效果显示在右面的面板中。
3.4菜单编辑器
利用菜单编辑器,可以创建、设置、修改下拉式菜单和弹出式菜单。
在GUIDE中单机工具栏上的按钮,或者选择“Tools”菜单中的“Menu Editor…”选项,打开菜单编辑器的界面。
左上角第一个按钮用于创建下拉式菜单。
用户可以通过单击它来创建下拉式主菜单。
第二个按钮用于创建下拉式主菜单的子菜单首次运行后会自动生成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','Open the file')
fname为将要打开文件的文件名,pname为将要打开文件的路径。
Uigetfile函数中主要有两部分参数'*.bmp;*.jpeg;*.gif'是想要打开文件的格式,’Open the file’是生成文件选择打开对话框的标题。
运行效果如下:图4.1.1
打开一幅图像从上图中选择需要进行操作的文件,将其打开以便后续操作。
见图4.1.2
在‘打开’回调函数中我希望同时对文件进行相关数据的读取,以便在今后的处理操作中可以方便的调用,读取完图像数据后在窗口中显示图像,相关代码如下:
V=strcat(pname,fname) %将图像赋值给变量V
handles.my_data1=V
guidata(hObject,handles) %更新句柄数据
axes(handles.axes7)%添加一坐标轴用来指定显示图像的区域
imshow(V)%显示选取的图像
当执行以上代码时会有一种情况出现错误,那就是当我们进行“打开”文件操作时候,在这里当我们没有选择文件,而将窗口强行关闭或选择了程序无法识别的文件格式时,命令窗口会提示错误,所以加入如下代码进行处理:
if fname<5
return
end
对打开的文件名长度进行判断,确定有文件打开时会进行下面的操作,当没有文件时退出,整个回调函数如下:
[fname,pname]=uigetfile('*.bmp;*.jpeg;*.gif','Open the file')
L=length(fname)
if fname<5
return
end
V=strcat(pname,fname);
handles.my_data1=V
guidata(hObject,handles)
axes(handles.axes7)
imshow(V)
4.1.2文件的保存
[newfile,newpath]=uiputfile(‘*.bmp’,’Save file name’)
准备把当前文件*.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)实现方法:
采用邻域平均法对图像进行处理,实现方法如下:
for i=2:w-1
forj=2:h-1
I_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))+do uble(I(i+1,j+1)))/9);
end
end
采用中值滤波法对图像进行处理,其实现方法如下:
for i=2:w-1
for j=2:h-1
for m=1:3
for n=1:3
hhh((m-1)*3+n)=I(i+m-2,j+n-2);
end
end
for p=1:9
for q=p+1:9
if(hhh(p)>hhh(q))
temp=hhh(p);
hhh(p)=hhh(q);
hhh(q)=temp;
end
end
end
I_2(i,j)=hhh(5);
end
end
图4.2.1图像空域的平滑滤波处理结果
4.2.2图像的锐化滤波处理
1)锐化滤波的作用:
图像的平滑处理会使图像的边缘纹理信息受到损失,图像变得比较模糊。
如果需要突出图像的边缘纹理信息,则可以通过锐化滤波器实现,它可以消除或减弱图像的低频分量从而增强图像中物体的边缘轮廓信息,使得除边缘以外的像素点的灰度值趋向于零。
2)锐化滤波原理
锐化滤波器是以对图像的微分运算或差分运算为基础。
微分运算是求像素点灰度值的变化率,而图像内不同物体边缘处的像素点的灰度值往往变化比较明显,因此微分运算或差分运算可以起到增强边缘信息的作用。
锐化算子:
⎥⎥
⎥⎦
⎤
⎢⎢⎢⎣⎡=01-01-41-01-0H
3)实现方法: for i=1:m-2 for j=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)); end end
图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;
prompt={'请输入纵向平移量'};
title=' ';
ansa=inputdlg(prompt,title);
y1=str2num(ansa{1});
handles.my_data5=y1;
guidata(hObject,handles)
%上段代码中的x1,y1即为需要输入的横向平移量与纵向平移量
3)实现方法:
for x=1:w
for y=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);
end
else
if(xx.BitDepth==24)
Transfor(x,y,1:3)=BmpImage(PosSourceX,PosSourceY,1:3);
else
Transfor(x,y)=BmpImage(PosSourceX,PosSourceY);
end
end
end
end
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)通过其他数学插值算法来计算相应像素点的灰度值,这类方法处理效果好,但运算量会有所增加。
对图像进行缩放时需要输入缩放的倍数,其相关代码如下:
prompt={'请输入X向缩放倍数:'};
title=' ';
ansa=inputdlg(prompt,title);
sx=str2num(ansa{1});
handles.my_data3=sx;
guidata(hObject,handles)
%上段代码中的sx即为下图中所输入的倍数
同理可设置
Y 向缩放倍数sy 。
3)实现方法:
根据极坐标与二维垂直坐标的关系,原始图像的点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 β
图像的旋转变换用矩阵形式表示如下:
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1001000cos sin 0sin cos 1Y X Y X ββββ 对图像进行旋转操作时需要输入旋转角度,相关实现代码如下:
prompt={'请输入旋转角度:'};
title='Angle Degrees';
ansa=inputdlg(prompt,title);
n=str2num(ansa{1});
handles.my_data2=n; % n 为我们输入的角度值
guidata(hObject,handles)
V=handles.my_data1;
n=handles.my_data2;
G=imread(V);
i=rgb2gray(G);
pai=3.14;
n=pai*n/180; %将角度转换为直观的表示方法,便于直接输入度数。
3)实现方法:
%计算原图像各像素的新坐标
for indexX=0:(X-1)
for indexY=0:(Y-1)
ImageNew(round(indexX*cos(n)-indexY*sin(n))+round(abs(min([LeftTop(1,1),Left Bot
tom(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);
end
end
图4.3.3图像旋转处理结果
4.3.4对图像进行横轴翻转和纵轴翻转
1)图像翻转的作用:
实现图像的水平和垂直方向的翻转。
2)图像翻转原理:
垂直方向:
y′=h-y+1
水平方向:
x′=w-x+1
其中h为图像高,w为图像宽
3)实现方法:
if(xx.BitDepth==24)
Transfor(x,y,1:3)=uint8(1);
else
Transfor(x,y)=uint8(1);
end
else
if(xx.BitDepth==24)
Transfor(x,y,1:3)=BmpImage(PosSourceX,PosSourceY,1:3);
else
Transfor(x,y)=BmpImage(PosSourceX,PosSourceY);
end
end
(Transfor为翻转后图像,PosSourceX,PosSourceY为翻转后坐标)
图4.3.4图像的横轴翻转和纵轴翻转
4.4图像直方图的绘制
1)图像直方图绘制的作用:
实现图像直方图的均衡化。
2)图像直方图均衡原理:
直方图均衡化是将原图像的直方图通过变换函数修正为均匀的直方图,然后按均衡直方图修正原图像。
图像均衡化处理后,图像的直方图是平直的,即各灰度级具有相同的出现频数,那么由于灰度级具有均匀的概率分布,图像看起来就更清晰了。
首先假定连续灰度级的情况,推导直方图均衡化变换公式,令r代表灰度级,P(r)为概率密度函数。
(注:r值已归一化,最大灰度值为1)。
3)实现方法:
V=handles.my_data1;
xx=imfinfo(V);
Bmpimage=imread(V);
w=xx.Width;
h=xx.Height;
grey_grade=2^xx.BitDepth;
for i=1:grey_grade
grey_friq(i)=0;
end
for y=1:w
for x=1:h
for r=1:grey_grade
if Bmpimage(x,y)==r
grey_friq(r)=grey_friq(r)+1;
end
end
end
end
figure;
subplot(2,2,3);
imshow(Bmpimage);
subplot(2,2,1);
for i=2:grey_grade
line([i,i],[0,grey_friq(i)]);
end
for i=1:grey_grade
sk(i)=0;
p_eq(i)=0;
end
sk(1)=grey_friq(1)/(w*h);
for i=2:grey_grade
sk(i)=sk(i-1)+grey_friq(i)/(w*h);
end
for i=1:h
for j=1:w
transfor(i,j)=uint8(sk(Bmpimage(i,j))*255+0.5); end
end
for i=1:grey_grade
p_eq(uint8(sk(i)*255+0.5))=p_eq(uint8(sk(i)*255+0.5))+grey_friq(i); end
subplot(2,2,2);
for i=1:uint8(sk(i)*255+0.5)
line([i,i],[0,p_eq(i)]);
end
subplot(2,2,4);
imshow(transfor);
图4.4.1原图像直方图及均衡化效果
注:同学们需要在黑体部分粘贴运行效果图。
附录:
加入高斯噪声程序
I=imread(‘2.jpg’)
Figure(1) %显示原图片
Imshow(I)
J=round(0.1*randn(size(I))*256) %产生均值为0,方差为0.1,范围0-1的高斯噪声矩阵J,再乘以256以适应灰度图片的数值,J与I大小相同。
J=uint8(J) %将J转换成整数矩阵
I=I+J %加入噪声
Figure(2) %显示加入噪声的图片
Imshow(I, [0,255])
H=one(3) %产生3×3全为1的矩阵
H=H/9 %矩阵元素变为1/9
J=conv2(I,H) %矩阵与I二维卷积
Figure(3) %显示加入噪声的图片
Imshow(I,[]) %显示均值滤波结果
加入椒盐噪声程序
I=imread(‘2.jpg’)
Figure(1) %显示原图片
Imshow(I)
For m=1: size(I,1)
For n=1: size(I,2) %循环矩阵中的每一点
If rand> 0.95 %如果均匀随机数大于0.95
If round(rand) %如果均匀随机数大于0.5
I(m,n)=0 %该点值为0
Else
I(m,n)=255 %该点值为255
End
End
End
end
Figure(2) %显示加入噪声的图片Imshow(I, [0,255])。