1、x=4:6 %产生一个一维数组,范围从 4 到 6,步长为 1x =4 5 6插入:通过对 x 进行插入运算创建矩阵 A A=x-3;x;x+3 % 当然也可以用别的方法产生 A 矩阵此处只作为示例A =1 2 34 5 67 8 9提取:提取 A 的前两行和后两列形成矩阵 C。 C=A(1:2,2:3)C =2 35 6置零:将矩阵 A 的第二行第二列的元素置零 A(2,2)=0A =1 2 34 0 67 8 9将矩阵 A 的第一列全置 1A(:,1)=1A =1 2 31 0 61 8 9强调一下矩阵的乘法与矩阵的点乘的不同,举例说明:A=eye(2) % 产生二维单位矩阵A =1 00
2、 1 B=1,2;3,4 %直接法输入矩阵B =1 23 4 A+B %求 A 与 B 的和(符合矩阵求和原则)ans =2 23 5 A.*B %求 A 与 B 的点积(即两矩阵中对应元素分别相乘ans =1 00 4 A*B %求 A 与 B 的乘积(符合矩阵乘积原则 A 的列数与 B 的行数相等)ans =1 23 4注意:请大家在 E 盘建一个目录(imp) ,在每次启动时都要将这个目录加入到 MATLAB的搜索路径中,添加的方法为 File-Set Path-Tool-Add Path3、MATLAB 中图象数据的读取A、 imreadimread 函数用于读入各种图象文件,其一般的
3、用法为X,MAP=imread( filename,fmt)其中,X,MAP 分别为读出的图象数据和颜色表数据, fmt 为图象的格式,filename 为读取的图象文件(可以加上文件的路径) 。例:X ,MAP=imread(flowers.tif,tif );B、 imwriteimwrite 函数用于输出图象,其语法格式为:imwrite(X,map,filename,fmt)按照 fmt 指定的格式将图象数据矩阵 X 和调色板 map 写入文件filename。C、 imfinfoimfinfo 函数用于读取图象文件的有关信息,其语法格式为imfinfo(filename,fmt)im
4、finfo 函数返回一个结构 info,它反映了该图象的各方面信息,其主要数据包括:文件名(路径) 、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图象的类型等。例:imfinfo(rice.tif)ans =Filename: C:MATLAB6p5toolboximagesimdemosrice.tifFileModDate: 26-Oct-1996 06:11:58FileSize: 65966Format: tifFormatVersion: Width: 256Height: 256BitDepth: 8ColorType: grays
5、caleFormatSignature: 73 73 42 0ByteOrder: little-endianNewSubfileType: 0BitsPerSample: 8Compression: UncompressedPhotometricInterpretation: BlackIsZeroStripOffsets: 8x1 doubleSamplesPerPixel: 1RowsPerStrip: 32StripByteCounts: 8x1 doubleXResolution: 72YResolution: 72ResolutionUnit: InchColormap: Plan
6、arConfiguration: ChunkyTileWidth: TileLength: TileOffsets: TileByteCounts: Orientation: 1FillOrder: 1GrayResponseUnit: 0.0100MaxSamplev alue: 255MinSamplev alue: 0Thresholding: 1ImageDescription: 1x166 char4、 MATLAB 中图象文件的显示imshowimshow 函数是最常用的显示各种图象的函数,其语法如下:imshow(X,map)其中 X 是图象数据矩阵,map 是其对应的颜色矩阵,
7、若进行图象处理后不知道图象数据的值域可以用代替 map。需要显示多幅图象时,可以使用 figure 语句,它的功能就是重新打开一个图象显示窗口。例:I=imread(rice.tif);Imshow(I);J=imread(flowers.tif);figure,imshow(J);5、 MATLAB 中灰度直方图的显示MATLAB 图象处理工具箱提供了 imhist 函数来计算和显示图象的直方图,imhist 函数的语法格式为:imhist(I,n)imhist(X,map)其中 imhist(I,n)计算和显示灰度图象 I 的直方图,n 为指定的灰度级数目,默认值为256。imhist(X
8、,map)计算和显示索引色图象 X 的直方图,map 为调色板。例:I = imread(rice.tif);imshow(I)figure, imhist(I)6、 对比度增强如果原图象 f(x,y)的灰度范围是 m,M,我们希望调整后的图象 g(x,y)的灰度范围是n,N,那么下述变换, ,就可以实现这一要求。MATLAB 图象处理工具箱中提供的 imadjust 函数,可以实现上述的线性变换对比度增强。Imadjust 函数的语法格式为:J = imadjust(I,low_in high_in,low_out high_out)J = imadjust(I,low_in high_in
9、,low_out high_out)返回图象 I 经过直方图调整后的图象J,low_in high_in为原图象中要变换的灰度范围,low_out high_out指定了变换后的灰度范围。例:I = imread(pout.tif);J = imadjust(I,0.3 0.7,);imshow(I), figure, imshow(J)三、实验要求copy 两个图形文件 girl1.bmp 和 girl2.bmp 到 MATLAB 目录下 work 文件夹中。1、 将 MATLAB 目录下 work 文件夹中的 girl.bmp 图象文件读出.用到 imread,imfinfo 等文件,观察
10、一下图象数据,了解一下数字图象在 MATLAB 中的处理就是处理一个矩阵。将这个图象显示出来(用 imshow) ,尝试修改 map 颜色矩阵的值,再将图象显示出来,观察图象颜色的变化。2、 将 MATLAB 目录下 work 文件夹中的 girl2.bmp 图象文件读出,显示它的图象及灰度直方图,可以发现其灰度值集中在一段区域,用 imadjust 函数将它的灰度值调整到 0,1之间,并观察调整后的图象与原图象的差别,调整后的灰度直方图与原灰度直方图的区别。实验二 图像运算本实验是综合性实验,涵盖 Matlab 程序设计、图像点运算、代数运算、几何运算等多章基本知识及其应用。需四个学时。一、
11、实验目的与要求理解图像点运算、代数运算、几何运算的基本定义和常见方法;掌握在 MTLAB 中对图像进行点运算、代数运算、几何运算的方法;掌握在 MATLAB 中进行插值的方法运用 MATLAB 语言进行图像的插值缩放和插值旋转进一步熟悉了解 MATLAB 语言的应用。二、实验原理与功能点运算是通过对图像中每个像素值进行计算,改善图像显示效果的操作,也称对比度增强,对比度拉伸,灰度变换.可以表示为 B(x,y)=f(A(x,y).进行逐点运算,输入映射为输出,不改变图像像素的空间关系.代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两
12、幅图像参加运算。在一般情况下,输入情况之一可能为常数。四种图像处理代数运算的数学表达式如下: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))图像相
13、加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性随机噪声的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则过累积很慢。对 M 幅图像进行平均,使图像中每一点的平方信噪比提高了 M 倍幅度信噪比是功率信噪比的平方根,因此达到了提高信噪比降低噪声的作用。几何运算可改变图像中各物体之间的空间关系。这种运算可以被看成是将(各)物体在图像内移动。一个几何运算需要两个独立的算法。首先,需要一个算法来定义空间变换本身,用它来描述每个像素如何从其初始位置“移动”到终止位置,即每个像素的“运动” 。同时,还需要一个用于灰度插值的算法,这是因为,在
14、一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也如此。因此插值就是对变换之后的整数坐标位置的像素值进行估计。MATLAB 提供了一些函数实现这些功能。插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。双线性插值法
15、的输出像素值是它在输入图像中 22 领域采样点的平均值,它根据某像素周围 4 个像素的灰度值在水平和垂直两个方向上对其插值。双三次插值的插值核为三次函数,其插值邻域的大小为 44。它的插值效果比较好,但相应的计算量也比较大。MATLAB 图像处理工具箱中的函数 imresize 可以用上述的 3 种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。Imresize 函数的语法格式为:B = imresize(A,m,method)参数 method 用于指定插值的方法,可选用的值为nearest(最邻近法) ,bilinear(双线性插值) ,bicubic (双三次插值) ,
16、默认为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 用于确定噪声的类型和相应的参数。下面的
17、命令是对图像 eight.tif 分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:例:I=imread(eight.tif);J1=imnoise(I,gaussian,0,0.02);J2=imnoise(I,salt J3=imnoise(I,speckle,0.02);subplot(2,2,1),imshow(I),title(原图像);subplot(2,2,2),imshow(J1),title(加高斯噪声);subplot(2,2,3),imshow(J2),title(加椒盐噪声);subplot(2,2,4),imshow(J3),title(加乘性噪声);在上面的例子
18、中使用了一个函数 subplot。其作用就是将多幅图像显示再同一幅图像显示对话框中。其语法格式为:subplot(m,n,p)其作用就是将一个图像显示对话框分成 m 行 n 列,并显示第 p 幅图像。在 MATLAB 程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用 MATLAB 中的FOR 循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB 中 FOR END 循环的用法如
19、下:for end 循环这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:for variable = expressionstatementsend举例如下:例:%一个简单的 for 循环的例子。for i=1:10;y(i)=i;end;y %显示 y 的结果y =1 2 3 4 5 6 7 8 9 10为了得到最大的速度,在 for 循环被执行之前,应预先分配数组。例如前面所考虑的第一种情况,在 for 循环内每执行一次命令,向量 y 的维数增加 1。这样就使得 MATLAB 每通过一次循环对 y 分配更多的内存,这当然要花费一定的时间。为了可以不执行这个步骤,for 循环
20、的例子应重写为:y=zeros(1,10);for i=1:10;y(i)=i;end;y在实际的对图像处理过程中,由于我们读出的图像是 unit8 型,而在 MATLAB 的矩阵运算中要求所有的运算变量为 double 型(双精度型) 。因此读出的图像数据不能直接进行相加求平均,因此必须使用一个函数将图像数据转换成双精度型数据。MATLAB 中提供了这样的函数:im2double 函数,其语法格式为:I2 = im2double(I1)其中 I1 是输入的图像数据,它可能是 unit8 或 unit16 型数据,通过函数的变化输出 I2 为一个 double 型数据,这样两图像数据就可以方便
21、的进行相加等代数运算.作为一个示例,现将刚刚显示的加有噪声的图像进行相加求平均以消除图像的噪声。在图像中我们给图像加的是均值为 0,方差为 0.02 的高斯噪声,将图像相加了一百遍,再求其平均值。程序如下:%例图像加噪声再通过多次相加求平均的方法祛除噪声I,M=imread(eight.tif);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(242,308);for i=1:100J=imnoise(I,gau
22、ssian,0,0.02);J1=im2double(J);K=K+J1;endK=K/100; %求图像的平均figure;imshow(K),title(相加求平均后的图像);例子 2Imresize 函数的语法格式为:B = imresize(A,m,method)这里参数 method 用于指定插值的方法,可选用的值为nearest(最邻近法) ,bilinear(双线性插值) ,bicubic (双三次插值) ,默认为nearest。B = imresize(A,m,method)返回原图 A 的 m 倍放大的图像(m 小于 1 时效果是缩小) 。例:I=imread(ic.tif)
23、;J = imresize(I,1.25);imshow(I),title(原图像)figure,imshow(J),title(放大后的图像)在工具箱中的函数 imrotate 可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值法。Imrotate 的语法格式为:B = imrotate(A,angle,method函数 imrotate 对图像进行旋转,参数 method 用于指定插值的方法, ,可选用的值为nearest(最邻近法) ,bilinear(双线性插值) ,bicubic (双三次插值) ,默认为nearest 。一般说来旋转后的图像会比原图大,超出原图部分值为
24、 0。例:I=imread(rice.tif);J=imrotate(I,30,bilinear);imshow(I);title(原图像)figure,imshow(J),title(旋转后的图像)四、实验任务实验要求设计一个程序完成下列要求:1、 读出 girl.bmp 这幅图像,完成基本点运算,并显示各次运算的结果图像;2、 给这幅图像加入椒盐噪声后并与前一张图显示在同一图像对话框中;3、 运用 for 循环,将 100 幅加有噪声的图像进行相加并求其平均值 ,显示求平均后图像。4、 将图像分别放大 1.5 倍和缩小 0.8 倍,插值方法使用双线性插值法。将图像顺时针旋转45 度,显示旋
25、转后的图像。5、 设计实验步骤,完成实验报告。实验三 傅立叶变换及图象的频域处理一、实验目的1、了解离散傅立叶变换的基本原理;2、掌握应用 MATLAB 语言进行 FFT 及逆变换的方法;3、了解图象在频域中处理方法,应用 MATLAB 语言作简单的低通滤波器。二、实验原理1、傅立叶变换的基本知识。在图象处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图象分析、图象增强及图象压缩等方面。假设 f(x,y)是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:u=0,1M-1 v=0,1N-1 (1)离散傅立叶反变换的定义如下:x=0,1M-1 y=0,1N-1(3)
26、F(p,q)称为 f(m,n)的离散傅立叶变换系数。这个式子表明,函数 f(m,n)可以用无数个不同频率的复指数信号和表示,而在频率(w1 ,w2 )处的复指数信号的幅度和相位是F(w1,w2) 。例如,函数 f(m,n)在一个矩形区域内函数值为 1,而在其他区域为 0. 假设 f(m,n)为一个连续函数,则 f(m,n)的傅立叶变换的幅度值(即)显示为网格图。将傅立叶变换的结果进行可视化的另一种方法是用图象的方式显示变换结果的对数幅值。2、MATLAB 提供的快速傅立叶变换函数(1)fft2fft2 函数用于计算二维快速傅立叶变换,其语法格式为:B = fft2(I)B = fft2(I)返
27、回图象 I 的二维 fft 变换矩阵,输入图象 I 和输出图象 B 大小相同。例如,计算图象的二维傅立叶变换,并显示其幅值的结果,其命令格式如下load imdemos saturn2imshow(saturn2)B = fftshift(fft2(saturn2);imshow(log(abs(B),notruesize)(2)fftshiftMATLAB 提供的 fftshift 函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:B = fftshift(I)对于矩阵 I,B = fftshift(I)将 I 的一、三象限和二、四象限进行互换。(2)ifft2ifft
28、2 函数用于计算图象的二维傅立叶反变换,其语法格式为:B = ifft2(I)B = ifft2(A)返回图象 I 的二维傅立叶反变换矩阵,输入图象 I 和输出图象 B 大小相同。其语法格式含义与 fft2 函数的语法格式相同,可以参考 fft2 函数的说明。3、简单低通滤波器的设计一个图象经过傅立叶变换后,就从空域变到了频域,因此我们可以用信号处理中对于频域信号的处理方法对一幅图象进行处理。比如对图象进行低通滤波等。虽然在计算机中必定能够模拟一个锐截止频率的理想低通滤波器,但它们不能用电子元件来实现。实际中比较常用的低通滤波器有:巴特沃思(Butterworth)滤波器、指数滤波器(ELPF
29、) 、梯形低通滤波器等。在实验中我们设计一个理想的低通滤波器。设计理想的低通滤波器由其定义可知只要设计一个与频域图象大小完全相同的矩阵。在某一个域值内该矩阵的值为 1,其余为 0 即可。例:若图象的大小为 128*128,则可以这样设计一个低通滤波器:H=zeros(128);H(32:96,32:96)=1; %此处的范围是人为取定的,可以根据需要更改。若图象矩阵 I 的傅立叶变换是 B(已经用 fftshift 将频谱中心移至矩阵的中心) ,则对这幅图象做低通滤波,再做傅立叶逆变换命令为LOWPASS=B.*H; %此处设变换后的矩阵为 LOWPASS,另注意这儿是矩阵的点乘。C=ifft
30、2(LOWPASS);Imshow(abs(C)三、实验要求1、 读取图象 girl.bmp,显示这幅图象,对图象作傅立叶变换,显示频域振幅图象。作傅立叶逆变换,显示图象,看是否与原图象相同。2、 设计一个低通滤波器,截止频率自选,对图象作低通滤波,再作反变换,观察不同的截止频率下反变换后的图象与原图象的区别。2、 选做:显示一幅频域图象的相位分布图,分别对振幅分布和相位分布作傅立叶逆变换,观察两幅图象,体会频域图象中振幅与位相的作用。实验四 图像的空域滤波一、实验目的1、了解图象滤波的基本定义及目的;2、了解空域滤波的基本原理及方法;3、掌握用 MATLAB 语言进行图象的空域滤波的方法。二
31、、实验原理1、均值滤波均值滤波是在空间域对图象进行平滑处理的一种方法,易于实现,效果也挺好。设噪声 (m,n)是加性噪声,其均值为 0,方差(噪声功率)为 2,而且噪声与图象f(m,n)不相关。除了对噪声有上述假定之外,该算法还基于这样一种假设:图象是由许多灰度值相近的小块组成。这个假设大体上反映了许多图象的结构特征。 (2)式表达的算法是由某像素领域内各点灰度值的平均值来代替该像素原来的灰度值。可用模块反映领域平均算法的特征。对模版沿水平和垂直两个方向逐点移动,相当于用这样一个模块与图像进行卷积运算,从而平滑了整幅图象。模版内各系数和为 1,用这样的模版处理常数图象时,图像没有变化;对一般图
32、象处理后,整幅图像灰度的平均值可不变。2、中值滤波中值滤波是一种非线性处理技术,能抑制图象中的噪声。它是基于图象的这样一种特性:噪声往往以孤立的点的形式出现,这些点对应的象素很少,而图象则是由像素数较多、面积较大的小块构成。在一维的情况下,中值滤波器是一个含有奇数个像素的窗口。在处理之后,位于窗口正中的像素的灰度值,用窗口内各像素灰度值的中值代替。例如若窗口长度为 5,窗口中像素的灰度值为 80、90、200、110、120,则中值为 110,因为按小到大(或大到小)排序后,第三位的值是 110。于是原理的窗口正中的灰度值 200 就由 110 取代。如果 200 是一个噪声的尖峰,则将被滤除
33、。然而,如果它是一个信号,则滤波后就被消除,降低了分辨率。因此中值滤波在某些情况下抑制噪声,而在另一些情况下却会抑制信号。中值滤波很容易推广到二维的情况。二维窗口的形式可以是正方形、近似圆形的或十字形的。在图像增强的具体应用中,中值滤波只能是一种抑制噪声的特殊工具,在处理中应监视其效果,以决定最终是福才有这种方案。实施过程中的关键问题是探讨一些快速算法。MATLAB 中提供了卷积运算的函数命令 conv2,其语法格式为:C = conv2(A,B)C = conv2(A,B)返回矩阵 A 和 B 的二维卷积 C。若 A 为 mana 的矩阵,B 为 mbnb 的矩阵,则 C 的大小为(ma+m
34、b+1)(na+nb+1)。例:A=magic(5)A =17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9 B=1 2 1 ;0 2 0;3 1 3B =1 2 10 2 03 1 3 C=conv2(A,B)C =17 58 66 34 32 38 1523 85 88 35 67 76 1655 149 117 163 159 135 6779 78 160 161 187 129 5123 82 153 199 205 108 7530 68 135 168 91 84 933 65 126 85 104 15 27MATLAB 图像处理工具箱提供了基于卷积的图象滤波函数 filter2,filter2 的语法格式为:Y = filter2(h,X)其中 Y = filter2(h,X)返回图像 X 经算子 h 滤波后的结果,默认返回图像 Y 与输入图像 X 大小相同。例如: