基于MATLAB数字图像处理的实现和仿真课程设计论文.docx

上传人:b****5 文档编号:7499121 上传时间:2023-01-24 格式:DOCX 页数:43 大小:1.71MB
下载 相关 举报
基于MATLAB数字图像处理的实现和仿真课程设计论文.docx_第1页
第1页 / 共43页
基于MATLAB数字图像处理的实现和仿真课程设计论文.docx_第2页
第2页 / 共43页
基于MATLAB数字图像处理的实现和仿真课程设计论文.docx_第3页
第3页 / 共43页
基于MATLAB数字图像处理的实现和仿真课程设计论文.docx_第4页
第4页 / 共43页
基于MATLAB数字图像处理的实现和仿真课程设计论文.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

基于MATLAB数字图像处理的实现和仿真课程设计论文.docx

《基于MATLAB数字图像处理的实现和仿真课程设计论文.docx》由会员分享,可在线阅读,更多相关《基于MATLAB数字图像处理的实现和仿真课程设计论文.docx(43页珍藏版)》请在冰豆网上搜索。

基于MATLAB数字图像处理的实现和仿真课程设计论文.docx

基于MATLAB数字图像处理的实现和仿真课程设计论文

基于MATLAB数字图像处理的实现和仿真

摘要

数字图像处理(DigitalImageProcessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。

在数字图像处理过程中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等。

MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。

它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。

根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。

本文利用MATLAB图像处理工具箱,根据需求进行程序的功能分析和界面设计,实现数字图像的灰度处理、亮度处理、截图、缩放、旋转、噪声、滤波、直方图统计、频谱分析、颜色模型转换等。

关键词:

数字图像处理,MATLAB

第1章绪论

数字图像处理,即用计算机对图像进行处理。

与人类对视觉机理研究的历史相比,它是一门相对年轻的学科。

但在其短短的历史中,它却以程度不同的成功被广泛应用于几乎所有与图像有关的领域口数字图像处理技术在20多年的时间里,迅速地发展成为一门独立的有强大生命力的学科。

数字图像处理的手段有光学方法和电子学(数字)方法。

前者已经有很长的一发展历史,从简单的光学滤波到现在的激光全息技术。

光学处理理论已经日趋完善,而且处理速度快,信息容量大,分辨率高,处理经济。

但是光学处理图像精度不够高,稳定性能差,操作不方便。

最早的图像处理是上世纪六七十年代,随着电子技术和计算机技术的不断提高和普及,数字图像处理进入高速发展时期。

数字图像处理就是利用数字计算机或者其它数字硬件,对从图像信息转换而得的电信号进行某些数学运算,以提高图像的实用性。

例如从卫星图片中提取目标物的特征参数,三维立体断层图像的重建等等。

数字图像处理技术处理精度比较高,而且还可以通过改进处理软件来优化处理效果。

但是,由于数字图像处理的数据量非常庞大,因此处理速度相对较慢,这就限制了数字图像处理的发展。

随着计算机技术的飞速发展,计算机的运算速度大大提高,这将大大促进数字图像处理技术的发展。

数字图像处理在它短短的发展历史中,迅速发展成为了一门独立的具有强大生命力的学科,它应用于很多领域:

遥感技术、医用图像处理、工业领域中、军事公安、文化艺术等方面。

数字图像处理技术研究内容很多,主要包括以下几个方面:

图像变换、图像编码压缩、图像增强和复原、图像分割、图像描述图像识别等。

数字图像处理具有再现性好、处理精度高、适用面广、灵活性高、成本低等优点。

在图像研究领域中图像特征的研究是一重要的研究方向。

人们观察图像时主要通过观察图像纹理、亮度、几何等关键特征,从而来识别理解图像。

实际上通过图像特征的提取匹配不仅用于图像识别,还可以用于图像分割、配准、拼接等各个方面。

对图像特征的研究已经取得了很多研究成果,随着人们探知世界的深入,对图像特征的研究将更加重要。

第2章数字图像处理系统设计

2.1设计概括

由于要实现的功能并不是很多,所以在排版的过程中,把各个功能都安排在目录栏上,整体安排如下图所示:

图2.1设计概括

同时在调节亮度时,虽然可以同对话框的形式输入调节的比例系数,但是这样效果不好了,不容易调节,因此这里考虑用滚动条来调节。

因此,总体的设计界面如下图所示:

图2.2设计界面

2.2文件

2.2.1打开

为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个GUI程序的操作对象是图像文件,所以设置这里的缺省后缀名为“.bmp”。

Uigetfile函数的调用格式为[name,path]=yigetfile(…),在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。

如果按下取消按钮或是发生错误,则返回值是0。

根据返回值的情况,如果是0,则弹出提示错误的对话框,否则,通过imread函数读出图像数据,把图像数据赋值给全局变量handles.img。

2.2.2保存

同样也通过对话框的形式来保存图像数据,通过uigetfile函数选择文件名和路径,用getimage(gca)取出坐标2变换后的图像数据保存到变量i,最后用imwrite函数,把数据i存到指定的文件。

2.2.3退出

退出比较简单,程序如下所示:

clc;

closeall;

close(gcf);

2.3编辑

2.3.1灰度

将RGB图像转化成为灰度图像的过程成为图像的灰度化处理。

彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255×255×255)的颜色的变化范围。

而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。

灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。

图像的灰度化处理可用两种方法来实现。

第一种方法使求出每个像素点的R、G、B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。

第二种方法是根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应,以这个亮度值表达图像的灰度值,公式为:

(2-1)

由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为:

y=(handles.img(:

:

1));%当然也可以选择(:

:

2)或(:

:

3)

imshow(y);

但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。

另一种方法就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。

程序为:

y=rgb2gray(handles.img);

imshow(y);

这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。

所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。

完整的程序如下:

ifisrgb(handles.img)

y=rgb2gray(handles.img);

imshow(y);

else

msgbox('这已经是灰度图像','转换失败');

end

如果原图是RGB,执行该操作的结果如下图:

图2.3灰度处理对比图

2.3.2亮度

亮度是指颜色的相对明暗程度,通常使用从0%(黑色)至100%(白色)的百分比来度量。

亮度处理是指图像整体变亮或者变暗,实现方法:

加大或减小每个像素的三色数,公式为:

其中:

(2-2)

式中:

V为调整后颜色值

为原颜色值d为亮度调整系数

用imadjust函数,其调用格式如下:

g=imadust(f,[low_inhigh_in],[low_outhigh_out]),gamma)

gamma表示映射性质,默认值是1表示线性映射。

由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给[low_inhigh_in],[low_outhigh_out],gamma这五个参数,如下一组命令建立了如下图所示的输入对话框:

 

图2.4命令对话框

prompt={'输入参数1','输入参数2','输入gamma'};

defans={'[00.7]','[01]','1'};

p=inputdlg(prompt,'输入参数',1,defans);

但是,这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。

所以应该用滑动条来调节图像的亮度和对比度,这样更适合用户的使用习惯。

由于imadjust函数有五个参数,所以原则上需要设计五个滑动条来调节对比度,这对用户来说显然比较麻烦,因此在设计的时候固定其中的三个参数,通过调节两个参数的值来改变亮度和对比度。

[0handles.beta],[01],handles.gm,这里的变量handles.beta和handles.gm就通过滑动条得到,滑动条设计如下图:

图2.5滑动条设计图

亮度调整的tag名为ld,取值范围0~1,gamma值的tag名为gamma,取值范围为0~5。

获取滑动条参数的程序如下:

handles.beta=get(handles.ld,'value');

handles.gm=get(handles.gamma,'value');

执行该操作,调节滑动条到上图所示位置,结果如下图:

图2.6亮度处理对比图

2.3.3截图

提取目标图像中的任意部分,公式:

imcrop('图象名',[x起点,y起点,x宽度,y宽度]。

在MATLAB中,用函数imcrop实现对图像的剪切操作。

该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。

Imcrop函数的调用格式如下:

y=imcrop(handles.img);

不管handles.img是三维的还是二维数据,该函数都能进行操作。

下图就是对三维图像的截图:

图2.7截图处理对比图

2.3.4缩放

假设图像x轴缩放比例为c,y轴方向缩放比率为d,,那么原图中,点(

)对应与新图中的点(

)的转换矩阵为:

=

(2-3)

要求:

输入一副图像,根据输入的水平和垂直放量,显示缩放后的图像。

在MATLAB中,用函数imresize来实现对图像的放大或缩小。

插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。

该函数的调用格式如下:

B=imresize(A,m,method)

其中:

参数method用于指定插值的方法,可选的值为“nearest”(最近邻法),“bilinear”(双线性插值)、“bicubic”(双三次插值),缺省值为“nearest”。

B=imresizee(A.m,method)表示返回原图A的m倍放大图像(m小于1时实际上是缩小);

下图就是采用邻近插值法的放大和缩小图像,参数值保持默认设置:

图2.8放大处理对比图

虽然处理后看不出放大的效果,这是由于坐标轴限制的原因,如果把处理后的图片保存起来,再把处理后的文件打开,就可以看到比较明显的放大效果。

图2.9放大效果图

缩小后的结果如下:

图2.10缩小处理对比图

2.4旋转

2.4.1上下翻转

如果A是一个列向量,将A中的元素顺序进行翻转。

如果A是一个行向量,还等于A。

例一:

A是一个3×2的矩阵

1436

25翻转则为:

25

3614

例二:

A是一个列向量

13

2翻转则为:

2

31

例三:

A是一个行向量

123翻转则为:

321

函数flipud是实现一个二维矩阵的上下翻转,如a=[12;34],经过该函数处理后,原矩阵变为[34;12];所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对RGB图像和灰度图像分开处理,这就要用到isrgb函数来判断,如果是灰度图像,则可以直接用这个函数进行处理,否则就要对RGB图像进行降维处理。

fork=1:

3

y(:

:

k)=flipud(x(:

:

k));

end

处理结果如图:

图2.11上下翻转处理对比图

2.4.2左右翻转

如果A是一个行向量,将A中元素的顺序进行翻转。

如果A是一个列向量,还等于A。

例一:

A是一个行向量

123翻转则为:

321

例一:

A是一个3×2的矩阵

1441

25翻转则为:

52

3663

例三:

A是一个列向量

11

2翻转则为:

2

33

对图像的左右翻转也可以用fliplr函数来处理,同样的,也要对灰度和彩色图像分开处理,处理结果如图:

图2.12左右翻转处理对比图

2.4.3任意角度翻转

图像绕中心点旋转的公式为:

=

(2-4)

图像如果绕一个指点点

旋转,则先要将坐标系平移到该点,再进行旋转,然后平移回新的坐标原点。

则旋转变换公式为:

=

(2-5)

用函数imrotate来实现对图像的插值旋转。

该函数的调用格式如下:

B=imrotate(A,angle,method,’crop’)

其中,参数method用于指定插值的方法,可选的值可以有三种,分别为邻近插值,双线性插值,双三次插值,缺省时为邻近插值,参数angle代表旋转的角度。

一般来说,旋转后的图像会比原图大,用户可以指定“crop”参数对旋转后的图像进行剪切(取图像的中间部分),使返回的图像与原图大小相同。

执行结果为:

图2.13任意角度翻转处理对比图

2.5噪声

图像是噪声:

原本我们可以清晰的看到一副图像,但是有时候图像上会有一些我们不需要的图案,使我们无法很清楚的看清一副图,这就是图像的噪声。

去除噪声的方法:

不同原因产生的噪声,其分布特性也不完全相同,根据噪声和信号的关系可将其氛围两种形式:

1.加性噪声,此类噪声与输入图像信号无关,含噪声象表示为

;2.乘性噪声,此类噪声与图像信号有关,含噪声象表示为

噪声对图像处理十分重要,如果图像伴有较大的噪声,它会直接影响到图像处理的输入、采集、处理的各个环节以及输出的全过程甚至输出结果,因此在进行数字图像处理的时候,首先需要对目标图像进行去除噪声的工作。

经常用到的噪声有三种,高斯噪声,椒盐噪声,乘性噪声,可以通过以下三个函数来实现:

y=imnoise(handles.img,'gaussian',p1,p2);%高斯噪声

y=imnoise(x,'salt&pepper',p1);%椒盐噪声

y=imnoise(handles.img,'speckle',p1);%乘性噪声

p1,p2的参数也通过输入对话框的形式得到,原图加入高斯噪声后结果如下所示:

图2.14噪声处理对比图

2.6滤波

2.6.1中值滤波

中值滤波是一种能有效抑制图像噪声而提高信噪比的非线性滤波技术。

它是一种领域运算,类似与卷积,但计算的不是加权求和,而是把领域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值。

设有一个而为图像

,二维中值滤波的结果为:

(2-6)

2.6.2自适应滤波

自适应滤波,就是利用前一时刻已获得的滤波器参数等结果,自动调节现时刻的滤波器参数,以适应信号和噪声未知或随时间变化的统计特性,从而实现最优滤波。

自适应滤波器由两个部分组成:

一是滤波器的结构;二是调节滤波器系数的自适应算法。

自适应滤波器的特点是自动调节自身的冲激响应,达到最优滤波,此算法适用于平稳和非平稳随机信号,并且不要求知道信号和噪声的统计特性。

公式为:

(2-7)

式中:

n为时间序列;N为滤波器阶数;

T为输入矢量

T为全系数矢量

(2-8)

2.6.3平滑滤波

平滑滤波是低频增强的空间域滤波技术。

它的目的有两类:

一类是模糊;另一类是消除噪音。

空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度值。

邻域的大小与平滑的效果直接相关,邻域越大平滑的效果越好,但邻域过大,平滑会使边缘信息损失的越大,从而使输出的图像变得模糊,因此需合理选择邻域的大小。

平滑滤波的基本算法是将函数

与原始图像

进行卷积,最后得到一个平滑图像

=

=

(2-9)

式中:

为高斯标准方差;

为原始图像点的横坐标变量;

为原始图像点的纵坐标变量。

这里选择三种滤波方法,

k=medfilt2(handles.noise_img);%中值滤波

k=wiener2(handles.noise_img,[5,5]);%自适应滤波

k=filter2(fspecial('average',3),handles.noise_img)/255;%平滑滤波

同样的,这些函数也是针对二维数据,所以要先判断是彩色图像还是灰度图像,然后分别进行处理,下面是对彩色图像的自适应滤波处理:

i=handles.noise_img;

ifisrgb(i)

a=handles.noise_img(:

:

1);

b=handles.noise_img(:

:

2);

c=handles.noise_img(:

:

3);

k(:

:

1)=wiener2(a,[5,5]);

k(:

:

2)=wiener2(b,[5,5]);

k(:

:

3)=wiener2(c,[5,5]);

imshow(k);

执行结果如图:

图2.15滤波处理对比图

对其他方法的滤波程序也类似,由于把各个滤波方法放在一个选择框里,所以程序要用以下的选择语句:

switchstr

case'中值滤波'

case'自适应滤波'

case'平滑滤波'

end

2.7直方图统计

概念:

表示图像中具有某种灰度级的像素个数,反映图像中每种灰度出现的频率。

为了有利于数字图像处理,必须引入离散形式。

在离散形式下,用

代表离散灰度级,用

代表

,并且有下式子成立:

=

(2-10)

式中

为图像中出现

这种灰度级像素,

是图像中像素总和。

在直角坐标系中做出

的关系图形,这个图形称为直方图。

用imhist函数对图像数据进行直方图统计,

x=imhist(handles.img(:

:

1));

bar(horz,x);

其中,x矩阵的数据是0~255灰度值的统计个数,如果直接对x矩阵数据进行图形图显示,由于有256个数据,在坐标系中就会很密集,为了更清楚的显示条形图,所以在程序设计时,把x数据进行部分提取,

x1=x(1:

10:

256);

horz=1:

10:

256;

bar(horz,x1);

除了显示数据的直方图统计外,还可以对图像进行均衡处理,所用到的函数是histeq,这两个函数同样只使用于二维数据,所以也要对二维和三维数据分开处理。

直方图显示和均衡后的图像分别如下图所示:

图2.16直方图

2.8频谱分析

2.8.1、频谱图

由卷积定理可知,如果原始图像是

,处理后的图像是

,而

是处理系统的冲激响应,那么,处理过程可由下式表示:

=

*

(2-11)

式中*代表卷积

如果

分别是

的傅立叶变换,那么,上面的卷积关系表示为变换域的乘积关系,即:

=

(2-12)

式中

为传递函数。

在增强问题中,

是给定的原始数据,经傅立叶变换可得

选择合适的

,得到:

=

(2-13)

得到的的

在某些特性方面更加鲜明、突出,因而更加易于识别、解释。

为了得到图像的频谱图,先要对数据进行傅里叶变换,用fft2函数对二维数据进行快速傅里叶变换,同时为了更好的观察频谱图,需要把fft2变换后的数据进行平移,利用fftshift函数,把快速傅里叶变换的DC组件移到光谱中心。

这样图像能量的低频成分将集中到频谱中心,图像上的边缘、线条细节信息等高频成分将分散在图像频谱的边缘。

如下图所示:

图2.17频谱处理对比图

2.8.2通过高通滤波器

axes(handles.axes2);

x=(handles.img);

ifisrgb(x)

msgbox('这是彩色图像,不能通过高通滤波器','失败');

else

y1=imnoise(x,'gaussian');%加高斯噪声

f=double(y1);%数据类型转换

k=fft2(f);%傅立叶变换

g=fftshift(k);%转换数据矩阵

[M,N]=size(g);

nn=2;

d0=3;%截止频率为3

m=fix(M/2);n=fix(N/2);

fori=1:

M

forj=1:

N

d=sqrt((i-m)^2+(j-n)^2);%计算高通滤波器传递函数

ifd<=d0

h=0;

elseh=1;

end

result(i,j)=h*g(i,j);

end

end

result=ifftshift(result);

y2=ifft2(result);

y3=uint8(real(y2));

imshow(y3);

end

2.8.3通过低通滤波器

axes(handles.axes2);

x=(handles.img);

ifisrgb(x)

msgbox('这是彩色图像,不能通过低通滤波器','失败');

else

y1=imnoise(x,'salt&pepper');%叠加椒盐噪声

f=double(y1);%数据类型转换,不支持图像的无符号整型的计算

g=fft2(f);%傅立叶变换

g=fftshift(g);%转换数据矩阵

[M,N]=size(g);

nn=2;%二阶巴特沃斯(Butterworth)低通滤波器

d0=10;%截止频率为10

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

result=ifftshift(result);

y2=ifft2(result);

y3=uint8(real(y2));

imshow(y3);%显示滤波处理后的图像

end

2.9灰度图像处理

2.9.1二值图像

二值图像是指数据矩阵中的元素只是0或1,读入matlab也是一个二维矩阵。

值得注意的是,像素点取值只限于0,1。

图像二值化流程:

图2.18图像二值化流程图

用j=im2bw(x);来对灰度图像到二值图像的转换。

转换结果为:

图2.19灰度图像转二值图像对比图

2.9.2创建索引图像

根据数据矩阵和图像像素颜色匹配关系,MATLAB中图像可分为:

索引图像、灰度图像、二值图像和RGB图像。

索引图像:

它的数据信息包括一个数据矩阵和一个双精度色图矩阵,它的数据矩阵中的值直接指定该点的颜色为色图矩阵中的某一种。

色图矩阵中,每一行表示一种颜色,每行有三个数据,分别表示该种颜色中红、绿、蓝的比例情况,所有元素值都在[0,1]内。

用X=grayslice(I,n)函数来实现,转换后得到的图像为:

图2.20索引图像

2.10颜色模型转换

H参数表示色彩信

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1