图形与图像处理实验.doc_第1页
图形与图像处理实验.doc_第2页
图形与图像处理实验.doc_第3页
图形与图像处理实验.doc_第4页
图形与图像处理实验.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图形与图像处理实验 学 院 : 专 业: 班 级: 指导老师: 学生姓名: 实验一一、实验目的1、复习MATLAB语言的基本用法;2、掌握MATLAB语言中图象数据与信息的读取方法;3、掌握在MATLAB中绘制灰度直方图的方法,了解灰度直方图的均衡化的方法。二、实验原理 MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。作为强大的科学计算平台,它几乎能够满足所有的计算需求。MATLAB软件具有很强的开放性和适用性。在保持内核不变的情况下,MATLAB可以针对不同的应用学科推出相应的工具箱(toolbox)。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己的一席之地。在实验中我们主要用到MATLAB提供图象处理工具箱(Image Processing Toolbox)三、实验要求copy两个图形文件girl1.bmp和girl2.bmp到MATLAB目录下work文件夹中。1、 将MATLAB目录下work文件夹中的girl.bmp图象文件读出.用到imread,imfinfo等文件,观察一下图象数据,了解一下数字图象在MATLAB中的处理就是处理一个矩阵。将这个图象显示出来(用imshow),尝试修改map颜色矩阵的值,再将图象显示出来,观察图象颜色的变化。2、 将MATLAB目录下work文件夹中的girl2.bmp图象文件读出,显示它的图象及灰度直方图,可以发现其灰度值集中在一段区域,用imadjust函数将它的灰度值调整到0,1之间,并观察调整后的图象与原图象的差别,调整后的灰度直方图与原灰度直方图的区别。四、实验程序和结果 x=imread(C:Program FilesMATLABR2007atoolboximagesimdemosmoon.tif) size(x)ans = 206 345 y=x(:,:,1); y=x(:,:,1);imadjust(x,0,1,) map=rand(256,3); imshow(y, figure,imhist(y)y=imadjust(x,0,1,0.1,0.5)imshow(x),figure,imshow(y)figure,imhist(y(:,:,1),256)实验二本实验是综合性实验,涵盖Matlab程序设计、图像点运算、代数运算、几何运算等多章基本知识及其应用。需四个学时。一、实验目的与要求? 理解图像点运算、代数运算、几何运算的基本定义和常见方法;? 掌握在MTLAB中对图像进行点运算、代数运算、几何运算的方法;? 掌握在MATLAB中进行插值的方法? 运用MATLAB语言进行图像的插值缩放和插值旋转? 进一步熟悉了解MATLAB语言的应用。二、实验原理与功能点运算是通过对图像中每个像素值进行计算,改善图像显示效果的操作,也称对比度增强,对比度拉伸,灰度变换.可以表示为B(x,y)=f(A(x,y).进行逐点运算,输入映射为输出,不改变图像像素的空间关系.代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。在一般情况下,输入情况之一可能为常数。四种图像处理代数运算的数学表达式如下:C(x,y)=A(x,y)+B(x,y)C(x,y)=A(x,y)-B(x,y)C(x,y)=A(x,y)*B(x,y)C(x,y)=A(x,y)/B(x,y) 其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。还可以通过适当的组合形成涉及几幅图像的复合代数运算方程。 在MATLAB中,我们可以用函数简单的得到数字图像的图像数据矩阵(即A(x,y)和B(x,y)),有了这些矩阵后我们只要适当的设计代数运算的形式并写出方程,就可以得到一个输出图像的矩阵(即C(x,y))图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性随机噪声的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则过累积很慢。对M幅图像进行平均,使图像中每一点的平方信噪比提高了M倍幅度信噪比是功率信噪比的平方根,因此达到了提高信噪比降低噪声的作用。 几何运算可改变图像中各物体之间的空间关系。这种运算可以被看成是将(各)物体在图像内移动。一个几何运算需要两个独立的算法。首先,需要一个算法来定义空间变换本身,用它来描述每个像素如何从其初始位置“移动”到终止位置,即每个像素的“运动”。同时,还需要一个用于灰度插值的算法,这是因为,在一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也如此。因此插值就是对变换之后的整数坐标位置的像素值进行估计。MATLAB提供了一些函数实现这些功能。 插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。 最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。 双线性插值法的输出像素值是它在输入图像中22领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。 双三次插值的插值核为三次函数,其插值邻域的大小为44。它的插值效果比较好,但相应的计算量也比较大。 MATLAB图像处理工具箱中的函数imresize可以用上述的3种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。Imresize函数的语法格式为:B = imresize(A,m,method) 参数method用于指定插值的方法,可选用的值为nearest(最邻近法),bilinear(双线性插值),bicubic(双三次插值),默认为nearest。B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。三 实验设计例子与调试1 完成人为的往一幅图像中加入噪声,并通过多次相加求平均的方法消除所加入的噪声。在MATLAB中提供了给图像加入噪声的函数imnoiseimnoise的语法格式为J = imnoise(I,type)J = imnoise(I,type,parameters)其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。参数type和parameters用于确定噪声的类型和相应的参数。在MATLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。 代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB中FOR END循环的用法如下:for end循环这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:for variable = expressionstatementsend四、实验任务 实验要求设计一个程序完成下列要求:1、 读出girl.bmp这幅图像,完成基本点运算,并显示各次运算的结果图像;2、 给这幅图像加入椒盐噪声后并与前一张图显示在同一图像对话框中;3、 运用for循环,将100幅加有噪声的图像进行相加并求其平均值,显示求平均后图像。4、 将图像分别放大1.5倍和缩小0.8倍,插值方法使用双线性插值法。将图像顺时针旋转45度,显示旋转后的图像。5、 设计实验步骤,完成实验报告。五、实验程序及结果x=imread(C:Program FilesMATLABR2007atoolboximagesimdemospears.png) y=x+25;z=x-25;w=x*2;v=x/2;subplot(2,2,1),imshow(y),title(y);subplot(2,2,2),imshow(z),title(z);subplot(2,2,3),imshow(w),title(w);subplot(2,2,4),imshow(v),title(v); i=imread(pears.png); j=imnoise(i,salt & pepper,0.02); subplot(1,2,1),imshow(i),title(原图像);subplot(1,2,2),imshow(j),title(加椒盐噪声); i,M=imread(pears.png); j=imnoise(i,gaussian,0,0.02); subplot(1,2,1),imshow(i,M),title(原图像);subplot(1,2,2),imshow(j,M),title(加噪声后图像); k=zeros(size(i); for a=1:100 j=imnoise(i,gaussian,0,0.02); j4=im2double(j); k=k+j4; end k=k/100; figure,imshow(j),title(相加平均后的图像); i=imread(pears.png); j=imresize(i,1.25); j1=imresize(i,0.8); J=imrotate(j,45,bilinear); J1=imrotate(j1,45,bilinear); imshow(J);title(放大旋转后图像);Warning: Image is too big to fit on screen; displaying at 67% In imuitoolsprivateinitSize at 90 In imshow at 234 figure,imshow(J1),title(缩小旋转后的图像);实验三 傅立叶变换及图象的频域处理一、实验目的1、了解离散傅立叶变换的基本原理;2、掌握应用MATLAB语言进行FFT及逆变换的方法;3、了解图象在频域中处理方法,应用MATLAB语言作简单的低通滤波器。二、实验原理1、傅立叶变换的基本知识。 在图象处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图象分析、图象增强及图象压缩等方面。 假设f(x,y)是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:u=0,1M-1v=0,1N-1(1) 离散傅立叶反变换的定义如下: x=0,1M-1y=0,1N-1(3) F(p,q)称为f(m,n)的离散傅立叶变换系数。这个式子表明,函数f(m,n)可以用无数个不同频率的复指数信号和表示,而在频率(w1,w2)处的复指数信号的幅度和相位是F(w1,w2)。2、MATLAB提供的快速傅立叶变换函数(1)fft2fft2函数用于计算二维快速傅立叶变换,其语法格式为:B = fft2(I)B = fft2(I)返回图象I的二维fft变换矩阵,输入图象I和输出图象B大小相同。2)fftshiftMATLAB提供的fftshift函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:B = fftshift(I)对于矩阵I,B = fftshift(I)将I的一、三象限和二、四象限进行互换。(2)ifft2ifft2函数用于计算图象的二维傅立叶反变换,其语法格式为:B = ifft2(I),B = ifft2(A)返回图象I的二维傅立叶反变换矩阵,输入图象I和输出图象B大小相同。其语法格式含义与fft2函数的语法格式相同,可以参考fft2函数的说明。3、简单低通滤波器的设计 一个图象经过傅立叶变换后,就从空域变到了频域,因此我们可以用信号处理中对于频域信号的处理方法对一幅图象进行处理。比如对图象进行低通滤波等。 虽然在计算机中必定能够模拟一个锐截止频率的理想低通滤波器,但它们不能用电子元件来实现。实际中比较常用的低通滤波器有:巴特沃思(Butterworth)滤波器、指数滤波器(ELPF)、梯形低通滤波器等。 在实验中我们设计一个理想的低通滤波器。 设计理想的低通滤波器由其定义可知只要设计一个与频域图象大小完全相同的矩阵。在某一个域值内该矩阵的值为1,其余为0即可。三、实验要求1、 读取图象girl.bmp,显示这幅图象,对图象作傅立叶变换,显示频域振幅图象。作傅立叶逆变换,显示图象,看是否与原图象相同。2、 设计一个低通滤波器,截止频率自选,对图象作低通滤波,再作反变换,观察不同的截止频率下反变换后的图象与原图象的区别。2、 选做:显示一幅频域图象的相位分布图,分别对振幅分布和相位分布作傅立叶逆变换,观察两幅图象,体会频域图象中振幅与位相的作用。四、实验程序及结果i=imread(C:ProgramFilesMATLABR2007atoolboximagesimdemoswestconcordorthophoto.png);I=im2double(i); x=fft2(I);y=fftshift(x); imshow(log(abs(y),); z=ifft2(y); figure,imshow(x),figure,imshow(z)i=imread(C:ProgramFilesMATLABR2007atoolboximagesimdemoswestconcordorthophoto.png); I=im2double(i); x=fft2(I); y=fftshift(x);z=zeros(366,364); z(120:126,120:126)=1; z1=z.*y;z2=ifft2(z1); imshow(i),figure,imshow(abs(z);i=imread(C:ProgramFilesMATLABR2007atoolboximagesimdemoswestconcordorthophoto.png); I=im2double(i); x=fft2(I); y=fftshift(I); y1=angle(y); z=ifft2(y); z1=ifft(y1); z2=ifft(abs(y); imshow(y1) figure,imshow(log(abs(y),); figure,imshow(log(abs(z1),); figure,imshow(log(abs(z2),);实验四 图像的空域滤波一、实验目的1、了解图象滤波的基本定义及目的;2、了解空域滤波的基本原理及方法;3、掌握用MATLAB语言进行图象的空域滤波的方法。二、实验原理1、均值滤波 均值滤波是在空间域对图象进行平滑处理的一种方法,易于实现,效果也挺好。 设噪声(m,n)是加性噪声,其均值为0,方差(噪声功率)为2,而且噪声与图象f(m,n)不相关。 除了对噪声有上述假定之外,该算法还基于这样一种假设:图象是由许多灰度值相近的小块组成。这个假设大体上反映了许多图象的结构特征。(2)式表达的算法是由某像素领域内各点灰度值的平均值来代替该像素原来的灰度值。 可用模块反映领域平均算法的特征。对模版沿水平和垂直两个方向逐点移动,相当于用这样一个模块与图像进行卷积运算,从而平滑了整幅图象。模版内各系数和为1,用这样的模版处理常数图象时,图像没有变化;对一般图象处理后,整幅图像灰度的平均值可不变。2、中值滤波 中值滤波是一种非线性处理技术,能抑制图象中的噪声。它是基于图象的这样一种特性:噪声往往以孤立的点的形式出现,这些点对应的象素很少,而图象则是由像素数较多、面积较大的小块构成。 在一维的情况下,中值滤波器是一个含有奇数个像素的窗口。在处理之后,位于窗口正中的像素的灰度值,用窗口内各像素灰度值的中值代替。例如若窗口长度为5,窗口中像素的灰度值为80、90、200、110、120,则中值为110,因为按小到大(或大到小)排序后,第三位的值是110。于是原理的窗口正中的灰度值200就由110取代。如果200是一个噪声的尖峰,则将被滤除。然而,如果它是一个信号,则滤波后就被消除,降低了分辨率。因此中值滤波在某些情况下抑制噪声,而在另一些情况下却会抑制信号。 中值滤波很容易推广到二维的情况。二维窗口的形式可以是正方形、近似圆形的或十字形的。在图像增强的具体应用中,中值滤波只能是一种抑制噪声的特殊工具,在处理中应监视其效果,以决定最终是福才有这种方案。实施过程中的关键问题是探讨一些快速算法。 MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:C = conv2(A,B)C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为mana的矩阵,B为mbnb的矩阵,则C的大小为(ma+mb+1)(na+nb+1)。MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:Y = filter2(h,X)其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。Fspecial函数用于创建预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type,parameters)参数type制定算子类型,parameters指定相应的参数,具体格式为:type=average,为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为3,3。type= gaussian,为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为3,3,sigma表示滤波器的标准差,单位为像素,默认值为0.5。type= laplacian,为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为0,1,默认值为0.2。type= log,为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为3,3,sigma为滤波器的标准差,单位为像素,默认值为0.5type= prewitt,为prewitt算子,用于边缘增强,无参数。type= sobel,为著名的sobel算子,用于边缘提取,无参数。type= unsharp,为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为0,1,默认值为0.2。三、实验内容1、读入一幅图片,加入均值为0,方差为0.02的高斯噪音2、对汗噪声图片使用均值滤波,高斯低通滤波,中值滤波在同一个窗口显示对比结果3、自己设计一个3*3的空间滤波器,对含噪声图像滤波,并阐述这样设计的理由四、实验程序及结果 i=imread(C:Program FilesMATLABR2007atoolboximagesimdemoscoins.png);imshow(i) j=imnoise(i,gaussian,0,0.02); x=fspecial(average); x1=fspecial(gaussian); y=filter2(x,j); y1=filter2(x1,j); y2=medfilt2(j); imshow(y,); i=imread(C:Program FilesMATLABR2007atoolboximagesimdemoscoins.png); j=imnoise(i,gaussian,0,0.02); x=fspecial(average); x1=fspecial(gaussian); y=filter2(x,j); y1=filter2(x1,j); imshow(y,); y2=medfilt2(j); figure,imshow(y1,); figure,imshow(y2); i=imread(C:Program FilesMATLABR2007atoolboximagesimdemoscoins.png); j=imnoise(i,gaussian,0,0.02); x=fspecial(average); x1=fspecial(gaussian); y=filter2(x,j); y1=filter2(x1,j); y2=medfilt2(j); imshow(y,); figure,imshow(y1,); figure,imshow(y2); i=imread(C:Program FilesMATLABR2007atoolboximagesimdemoscoins.png); j=imnoise(i,gaussian,0,0.03); x=1,1,1;1,1,1;1,1,1/9x = 0.1111 0.1111 0.1111 0.1111 0.1111 0.11110.1111 0.1111 0.1111 y=filter2(x,j); imshow(j); imshow(j); figure,imshow(y,);实验五 图像的边缘检测一、实验目的1、了解图像边缘提取的基本概念;2、了解进行边缘提取的基本方法;3、掌握用MATLAB语言进行图像边缘提取的方法。二、实验原理 图像理解是图像处理的一个重要分支,研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。 由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。边缘检测的方法大多数是基于方向导数掩模求卷积的方法。 导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。 一阶导数与是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向上的灰度变化率可以用相应公式进行计算;对于数字图像,应该采用差分运算代替求导,差分公式参考相关教材。 函数f在某点的方向导数取得最大值的方向是,方向导数的最大值是称为梯度模。利用梯度模算子来检测边缘是一种很好的方法,它不仅具有位移不变性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论