数字图像处理实验讲义_第1页
数字图像处理实验讲义_第2页
数字图像处理实验讲义_第3页
数字图像处理实验讲义_第4页
数字图像处理实验讲义_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、PAGE 数字图像处理实验讲义目 录 TOC o 1-3 h z u HYPERLINK l _Toc283668575 实验一 数字图像的基本操作 实验四 图像的空域滤波 PAGEREF _Toc283668578 h 15 HYPERLINK l _Toc283668579 实验五 图像的边缘检测 PAGEREF _Toc283668579 h 20 HYPERLINK l _Toc283668580 实验六 图像变换及其频域处理 PAGEREF _Toc283668580 h 24PAGE 34实验一 数字图像的基本操作一、实验目的初步了解MATLAB语言的基本用法,掌握MATLAB语言

2、中图像数据与信息的读写方法;掌握在MATLAB中绘制灰度直方图的方法;熟悉在MATLAB中对图像的类型、图像文件的格式进行转换的方法.二、实验原理MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。作为强大的科学计算平台,它几乎能够满足所有的计算需求。MATLAB软件具有很强的开放性和适用性。在保持内核不便的情况下,MATLAB可以针对不同的应用学科推出相应的工具箱(toolbox)。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己的一席之地。在实验中我们

3、主要用到MATLAB提供图像处理工具箱(Image Processing Toolbox)。1、MATLAB与数字图像处理MATLAB全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。这一特点也就决定了MATLAB在处理数字图像上的独特优势。理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。二维图像进行均匀采样,就可以得到一幅离散化成MN

4、样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读、写和显示。MATLAB对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与

5、图像增强、二值图像操作以及形态学处理等图像处理操作。2、MATLAB语言的基本操作MATLAB语言是一种运算纸型的运算语言,其特点就是与平时在运算纸上书写运算的形式相同,这使得它成为一种比较容易掌握的语言;其变量均以矩阵向量形式表示(单独一个数据可以认为是一维向量);其程序语法类似于C语言,只要有一点C语言基础的人可以很快掌握。针对数字图像处理的需要,可以重点掌握以下几个内容:矩阵、向量的输入和操作(包括如何输入一个矩阵,如何产生一个全零全一的矩阵,如何对一个矩阵的行列元素进行读取、写入);矩阵与向量的基本运算(包括加、减、点乘等)主要介绍一下如何读取矩阵的指定行或指定列,举例说明:x=4:6

6、 %产生一个一维数组,范围从4到6,步长为1x = 4 5 6插入:通过对x进行插入运算创建矩阵A A=x-3; x; x+3 %当然也可以用别的方法产生A矩阵此处只作为示例A = 1 2 3 4 5 6 7 8 9提取:提取A的前两行和后两列形成矩阵C。 C=A(1:2, 2:3)C = 2 3 5 6置零:将矩阵A 的第二行第二列的元素置零 A(2,2)=0A = 1 2 3 4 0 6 7 8 9将矩阵A的第一列全置1A(:,1)=1A = 1 2 3 1 0 6 1 8 9强调一下矩阵的乘法与矩阵的点乘的不同,举例说明:A=eye(2) %产生二维单位矩阵A = 1 0 0 1 B=1

7、,2;3,4 %直接法输入矩阵B = 1 2 3 4 A.*B %求A与B的点积(即两矩阵中对应元素分别相乘ans = 1 0 0 4 A*B %求A与B的乘积(符合矩阵乘积原则A的列数与B的行数相等)ans = 1 2 3 4其他的一些用法请参考教科书。3、MATLAB中图像文件的读/写(a)imreadimread函数用于读入各种图像文件,其一般的用法为X,MAP=imread( filename, fmt)其中,X为读出的图像数据,MAP为颜色表数据(或称调色板,亦即颜色索引矩阵,对灰度图像和RGB彩色图像,该MAP为空矩阵),fmt为图像的格式(可以缺省),filename为读取的图像

8、文件(可以加上文件的路径)。例:X,MAP=imread(flowers.tif, tif)(b)imwriteimwrite函数用于输出图像,其语法格式为:imwrite(X, MAP, filename, fmt)imwrite(X, MAP, filename, fmt) 按照fmt指定的格式将图像数据矩阵X和调色板MAP写入文件filename。(c)imfinfoimfinfo函数用于读取图像文件的有关信息,其语法格式为imfinfo(filename, fmt)imfinfo函数返回一个结构info,它反映了该图像的各方面信息,其主要数据包括:文件名(路径)、文件格式、文件格式版本

9、号、文件的修改时间、文件的大小、文件的长度、每个像素的位数(BitDepth)、图像的类型(ColorType)、颜色表矩阵(Colormap)等等。例:imfinfo(rice.tif)ans = Filename: D:MATLAB6p1toolboximagesimdemosrice.tif FileModDate: 26-Oct-1996 06:11:58 FileSize: 65966 Format: tif FormatVersion: Width: 256 Height: 256 BitDepth: 8 ColorType: grayscale FormatSignature:

10、73 73 42 0 ByteOrder: little-endian NewSubfileType: 0 BitsPerSample: 8 Compression: Uncompressed PhotometricInterpretation: BlackIsZero StripOffsets: 8x1 double SamplesPerPixel: 1 RowsPerStrip: 32 StripByteCounts: 8x1 double XResolution: 72 YResolution: 72 ResolutionUnit: Inch Colormap: PlanarConfig

11、uration: Chunky TileWidth: TileLength: TileOffsets: TileByteCounts: Orientation: 1 FillOrder: 1 GrayResponseUnit: 0.0100 MaxSampleValue: 255 MinSampleValue: 0 Thresholding: 1ImageDescription: 1x166 char4、MATLAB中图像文件的显示MATLAB图像处理工具箱提供了imshow函数来显示各种图像,其语法如下:imshow(I, n)或imshow(I_BW);imshow(X, MAP);ims

12、how(I_RGB)其中imshow(I, n)用于显示灰度图像,I是图像数据矩阵,n为灰度级数目(n可缺省,缺省值为256)。其它的分别用于显示二值图像、索引色图像和RGB真彩色图像。另外,对RGB彩色图像,还可以用imshow( RGB(:, :, 1) )、imshow( RGB(:, :, 2) )、imshow( RGB(:, :, 3) )分别显示RGB图像的R、G、B三个分量(注意:这样显示出的图像是以各分量值为对应的灰度值所显示的灰度图像)。需要显示多幅图像时,可以使用figure语句,它的功能就是打开一个新的图像显示窗口。也可以使用subplot函数将多幅图像显示在同一个图像

13、显示窗口的不同区域位置。例:I=imread(rice.tif);imshow(I);J=imread(flowers.tif);figure, imshow(J);或 I=imread(rice.tif);subplot(1,2,1), Imshow(I);J=imread(flowers.tif);subplot(1,2,2), imshow(J);5、MATLAB中灰度直方图的显示MATLAB图像处理工具箱提供了imhist函数来计算和显示图像的直方图,imhist函数的语法格式为:imhist(I, n)imhist(X, MAP)其中imhist(I,n)计算和显示灰度图像I的直方图

14、,n为指定的灰度级数目,默认值为256。imhist(X, MAP)计算和显示索引色图像X的直方图,map为调色板。例:I = imread(rice.tif);imshow(I)figure, imhist(I)6、图像类型的转换图像的类型主要有二值图像、灰度图像、索引图像和RGB彩色图像。一幅图像的类型可以根据读入的图像数据的特点加以判断。假设图像“flowers.tif”的大小为NM,读取图像X,MAP=imread(flowers.tif, tif)。对灰度图像来说:X为NM矩阵、MAP为空矩阵;对索引图像:X为NM矩阵,而MAP不是空矩阵,一般为2563矩阵;对RGB图像:X为NM3

15、三维矩阵,MAP为空矩阵。另外根据用imfinfo函数读取的图像文件的有关信息也可以确定图像的类型。图像类型之间的转换有时非常有用。下表是MATLAB提供的图像类型转换函数函 数功 能dither使用抖动方法,将灰度图像变成二值图像或由RGB图像创建索引图像gray2ind根据一幅灰度图像创建索引图像grayslice使用阈值截取方法,根据一幅灰度图像创建索引图像im2bw使用阈值截取法,将灰度图像、索引图像或RGB图像转换为二值图像ind2gray根据一幅索引图像创建一幅灰度图像ind2rgb根据一幅索引图像创建一幅RGB图像mat2gray通过数据缩放,在根据矩阵数据创建一幅灰度图像rgb

16、2gray根据一幅RGB图像创建一幅灰度图像rgb2ind根据一幅RGB图像创建一幅索引图像上表中函数有类似的调用格式:函数的输入参数是图像数据矩阵(如果是索引图像,那么输入参数还包括调色板),返回值是转换后的图像(包括索引图像的调色板),只有函数im2bw的调用格式不同,其输入参数中还包括一个截取阈值,超过此阈值的像素被截取为1否则为0。如:“I_RGB, MAP=imread(flowers.tif); I_GRAY=rgb2gray(I_RGB);”将RGB图像转换为灰度图像。7、图像文件格式的转换图像文件格式之间的转换,可以间接利用图像读写函数来完成;首先使用imread函数按照原有的

17、图像格式进行图像读取,然后调用imwrite函数对图像进行保存,并指定图像的保存格式。如将BMP格式转换为PNG格式: bitmap=imread(mybitmap.bmp, bmp) imwrite(bitmap, mybitmap.png, png)三、实验内容及要求1、自建一个文件夹,将给定的实验用样本图像复制到文件夹。用MATLAB在自建的文件夹中建立example1.m程序文件。在这个文件的程序中,将girl.bmp图像文件读出,用到imread,imfinfo等文件,将这个图像显示出来(用imshow)。观察数字图像数据的特点,了解一下数字图像在MATLAB中的处理就是处理一个矩阵

18、;根据图像文件信息和图像数据矩阵的特点,确定图像的类型,体会彩色图像、索引图像、灰度图像各自数据的特点。选择其它图像,重复上述内容,比较不同类型图像的数据特点。2、选择一幅RGB彩色图像,分别显示出原图像和R、G、B三个分量图像(用subplot函数显示在同一窗口中),观察对比它们的特点,体会不同颜色所对应的R、G、B分量的不同之处。3、选择一幅索引彩色图像,将图像文件读出,并将这个图像显示出来。尝试修改MAP颜色矩阵的值(即改变MAP矩阵的某些矩阵元素的值),再将图像显示出来,观察图像颜色的变化。4、选择一幅灰度图像,显示图像及其该图像的灰度直方图。选择其它图像进行显示,观察比较图像的对比度

19、与其灰度直方图之间的关系。5、选择一幅RGB彩色图像,进行图像各类型之间的相互转换,显示并比较各图像。实验二 图像的灰度变换增强实验目的理解数字图像处理中点运算的基本作用;2、掌握对比度调整与灰度直方图均衡化的方法。二、实验原理1、对比度调整如果原图像f(x, y)的灰度范围是m, M,我们希望对图像的灰度范围进行线性调整,调整后的图像g(x, y)的灰度范围是n, N,那么下述变换:就可以实现这一要求。MATLAB图像处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度调整。imadjust函数的语法格式为:J = imadjust(I,low_in high_in, low

20、_out high_out)J = imadjust(I, low_in high_in, low_out high_out)返回原图像I经过对比度调整后的新图像J。其中low_in high_in为原图像中要变换的灰度范围,low_out high_out指定了变换后的灰度范围,灰度范围可以用 空矩阵表示默认范围,默认值为0, 1(注意:灰度范围只能在01之间)。例:I = imread(pout.tif);J = imadjust(I, 0.3 0.7, ); %输出灰度范围为默认范围,即为0, 1imshow(I), figure, imshow(J) 不使用imadjust函数,利用m

21、atlab语言直接编程也很容易实现灰度图像的对比度调整。但运算的过程中应当注意以下问题,由于我们读出的图像数据一般是uint8型,而在MATLAB的矩阵运算中要求运算变量为double型(双精度型)。因此读出的图像数据不能直接进行运算,必须将图像数据转换成双精度型数据。MATLAB中提供了这样的图像数据类型转换函数:im2double函数,其语法格式为:I2 = im2double(I1)该函数将I1的各元素除以255后转换为01内的双精度型数据。运算之后的图像数据再显示时可以再转化成uint8型,格式为:I3 = im2uint8 (I2)该函数将I2的各元素乘以255后转换为0255内的u

22、int8型数据,其中小于0的元素均设置为0,大于255的元素均设置为255。线性运算示例:K1=imread(pout.tif);I=im2double(K1);J=I*0.43;K2=im2uint8(J);subplot(1,2,1), imshow(K1)subplot(1,2,2), imshow(K2)非线性运算示例:K1=imread(pout.tif);I=double(K1);Dm=double(max(max(K1);J=( Dm/2)*(1+(1/sin(pi/4)*sin(pi/2)*(I/Dm)-0.5);K2=uint8(J);subplot(1,2,1), imsh

23、ow(K1)subplot(1,2,2), imshow(K2)注意:函数double、uint8与im2double、im2uint8不同,它们仅仅对数据作类型转换,而不对数据作范围限定。2、直方图均衡化直方图均衡化的目的是将原始图像的直方图变为均衡分布的形式,即将一已知灰度概率密度分布的图像,经过某种变换变成一幅具有均匀灰度概率密度分布的新图像,从而改善图像的灰度层次。MATLAB图像处理工具箱中提供的histeq函数,可以实现直方图的均衡化。对于灰度图像,histeq函数的基本调用格式为J=histeq(I, n)该函数返回原图像I经过直方图均衡化处理后的新图像J。n为指定的均衡化后的灰

24、度级数,缺省值为64。例:I = imread(pout.tif);J = histeq(I);subplot(2,2,1), imshow(I);subplot(2,2,2), imhist(I, 64);subplot(2,2,3), imshow(J);subplot(2,2,4), imhist(J, 64); 对于索引图像,调用格式为:Newmap=histeq(X, map)返回值Newmap将是输出图像的新的调色板。利用matlab语言直接编程也很容易实现直方图均衡化处理。三、实验内容及要求1、用MATLAB在自建的文件夹中建立example2.m程序文件。在这个文件程序中,将g

25、irl2.bmp(或pout.tif、lenna2.bmp等)一幅灰度图像文件读出,显示它的图像及灰度直方图(可以发现其灰度值集中在一段区域)。用imadjust函数将它的灰度值调整到0,1之间,并观察调整后的图像与原图像的差别,调整后的灰度直方图与原灰度直方图的区别;改变灰度值调整范围,观察调整后的图像的变化及其与原图像的差别,调整后的灰度直方图的变化及其与原灰度直方图的区别。进一步利用改变图像灰度值调整范围,实现图像的明暗反转,观察比较原图与反转后的图像。2、读取一幅灰度图像,不调用imadjust函数,利用MATLAB语言直接自编程序实现图像的对比度调整和图像的反转。3、读取一幅灰度图像

26、,用histeq函数将原始图像的灰度直方图均衡化,同时观察均衡化后的图像与前面图像的差别,均衡化后的灰度直方图与前面的灰度直方图的区别。实验三 图像的几何变换与代数运算一、实验目的理解图像几何变换的基本概念与定义;掌握在MATLAB中进行插值运算的方法;理解数字图像处理中代数运算的基本作用;掌握在MTLAB中对图像进行代数运算的方法。运用MATLAB语言进行图像的插值缩放和插值旋转。二、实验原理几何运算可改变图像中各物体之间的空间关系。这种运算可以被看成是将(各)物体在图像内移动。一个几何运算需要两个独立的算法。首先,需要一个算法来定义空间变换本身,用它来描述每个像素如何从其初始位置“移动”到

27、终止位置,即每个像素的“运动”。同时,还需要一个用于灰度插值的算法,这是因为,在一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也如此。因此插值就是对变换之后的整数坐标位置的像素值进行估计。MATLAB提供了一些函数实现这些功能。插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。该算法的数学表示为: 如果最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算

28、量非常小。不过,当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。双线性插值法的输出像素值是它在输入图像中22领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。设,和是要插值点的坐标,则双线性插值的公式为:把按照上式计算出来的值赋予图像几何变换对应于处的像素,即可实现双线性插值。双三次插值的插值核为三次函数,其插值邻域的大小为44。它的插值效果比较好,但相应的计算量也比较大,在这里不做讨论。1、图像的缩放MATLAB图像处理工具箱中的函数imresize可以用上述的三种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插

29、值法。imresize函数的语法格式为:B = imresize(A, m, method)上式返回原图像A的m倍放大的图像(m小于1时效果是缩小)。这里参数method用于指定插值的方法,可选用的值为nearest(最邻近法),bilinear(双线性插值),bicubic(双三次插值),默认为nearest。例:I = imread(ic.tif);J = imresize(I, 1.25);imshow(I), title(原图像)figure,imshow(J), title(放大后的图像) 2、图像的旋转在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方

30、法也是最邻近插值法。imrotate的语法格式为:B = imrotate(A, angle, method)函数imrotate对图像进行旋转,参数method用于指定插值的方法,可选用的值为nearest(最邻近法),bilinear(双线性插值),bicubic(双三次插值),默认为nearest。一般说来旋转后的图像会比原图大,超出原图部分值为0。例:I = imread(rice.tif);J = imrotate(I, 30, bilinear);imshow(I); title(原图像)figure, imshow(J); title(旋转后的图像) 代数运算是指对两幅输入图像进

31、行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。在一般情况下,输入情况之一可能为常数。四种图像处理代数运算的数学表达式如下:其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。还可以通过适当的组合形成涉及几幅图像的复合代数运算方程。在MATLAB中,我们可以用函数imread很容易的得到数字图像的图像数据矩阵(即A(x,y)和B(x,y)),有了这些矩阵后我们只要适当地设计代数运算的形式并写出方程,就可以得到一个输出图像的矩阵(即C(x,y))。图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性

32、随机噪声的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则累积很慢。对M幅图像进行平均,使图像中每一点的平方信噪比提高了M倍,幅度信噪比是功率信噪比的平方根,因此达到了提高信噪比降低噪声的作用。本次实验要求完成人为的往一幅图像中加入随机噪声,并通过多次相加求平均的方法降低所加入的噪声对图像的影响。在MATLAB中提供了给图像加入噪声的函数imnoise,imnoise的语法格式为J = imnoise(I, type)J = imnoise(I, type, parameters)其中J = imnoise(I, type)返回对原始图像I添加典型噪声的有

33、噪图像J。参数type和parameters用于确定噪声的类型和相应的参数。下面的命令是对图像eight.tif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:例:I = imread(eight.tif);J1 = imnoise(I, gaussian, 0, 0.02);J2 = imnoise(I, salt & pepper, 0.02);J3 = imnoise(I, speckle, 0.02);subplot(2,2,1), imshow(I), title(原图像);subplot(2,2,2), imshow(J1), title(加高斯噪声);subplot(2,2

34、,3), imshow(J2), title(加椒盐噪声);subplot(2,2,4), imshow(J3), title(加乘性噪声);在MATLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB中FOR END循环的用法如下:for end循环这种循环允许一组命令以固定的和预定的次数重复,循环的

35、一般形式为:for variable = expression statementsend举例如下:例:%一个简单的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循环的例子应重写为:y=zeros(1,10);for i=1:10; y(i)=i;end;y另外,再次

36、强调一下,在实际的对图像处理过程中,由于我们读出的图像数据一般是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此读出的图像数据不能直接进行相加求平均,因此必须先使用一个函数将图像数据转换成双精度型数据,然后再进行相加运算。运算完成后,在图像显示前再将图像数据转换为uint8型。MATLAB中提供了这样的函数:im2double,uint8,double等函数。作为一个示例,现将刚刚显示的加有噪声的图像进行相加求平均以消除图像的噪声。在图像中我们给图像加的是均值为0,方差为0.02的高斯噪声,将图像相加了一百遍,再求其平均值。程序如下:%例图像加噪声

37、再通过多次相加求平均的方法祛除噪声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(加噪声后图像);m, n = size(I);K = zeros(m, n);for i = 1 : 100 J = imnoise(I, gaussian, 0, 0.02); J1 = im2double(J); K = K + J1;endK = K / 100; %求图像的平均figu

38、re; imshow(K), title(相加求平均后的图像);三、实验内容及要求读出girl.bmp等一幅灰度图像并显示。将图像放大1.5倍,插值方法使用三种不同方法,显示放大后的图像,比较不同插值方法的结果有什么不同。将图像放大到其它倍数,重复实验。图像缩小0.8、0.5倍,插值方法使用三种不同方法,显示并比较结果有什么差异。图像分别顺时针旋转30度、45度,插值方法使用三种不同方法,显示旋转后的图像并比较结果有什么不同。给原图像加入高斯噪声、椒盐噪声、乘性噪声后并与原图显示在同一图像对话框中,观察比较几幅图像的特点结果。改变噪声参数,再比较结果。运用for循环,分别将20幅、100幅和5

39、00幅加有随机高斯噪声的图像进行相加并求其平均值,将几种求平均后的图像显示在同一图像对话框中,比较其结果。运用for循环,分别将100幅加有不同类型噪声的图像进行相加再求平均值,在同一图像对话框中显示求平均后的图像,比较其结果。 MACROBUTTON MTEditEquationSection2 Equation Chapter 1 Section 1 SEQ MTEqn r h * MERGEFORMAT SEQ MTSec r 1 h * MERGEFORMAT SEQ MTChap r 1 h * MERGEFORMAT 实验四 图像的空域滤波一、实验目的1、理解图像空域滤波的基本定义

40、及目的;2、掌握图像空域滤波的基本原理及方法;3、掌握用MATLAB语言实现图像的空域滤波的方法。二、实验原理1、均值滤波均值滤波是在空间域对图像进行平滑处理的一种方法,易于实现,效果也挺好。设噪声(m,n)是加性噪声,其均值为0,方差(噪声功率)为2,而且噪声与图像f(m,n)不相关。其有噪声的图像f(m, n)为: (4.1)经均值滤波处理后的图像g(m, n)为: (4.2)其中s是(m, n)点的领域内的点集。除了对噪声有上述假定之外,该算法还基于这样一种假设:图像是由许多灰度值相近的小块组成。这个假设大体上反映了许多图像的结构特征。(4.2)式表达的算法是由某像素领域内各点灰度值的平

41、均值来代替该像素原来的灰度值。可用模块反映领域平均算法的特征。对于四点领域和八点领域,可分别由下述摸板表征:(4.3)(4.4)模版沿水平和垂直两个方向逐点移动,相当于用这样一个模块与图像进行卷积运算,从而平滑了整幅图像。模版内各系数和为1,用这样的模版处理常数图像时,图像没有变化;对一般图像处理后,整幅图像灰度的平均值可不变。2、中值滤波中值滤波是一种非线性处理技术,能抑制图像中的噪声。它是基于图像的这样一种特性:噪声往往以孤立的点的形式出现,这些点对应的象素很少,而图像则是由像素数较多、面积较大的小块构成。在一维的情况下,中值滤波器是一个含有奇数个像素的窗口。在处理之后,位于窗口正中的像素

42、的灰度值,用窗口内各像素灰度值的中值代替。例如若窗口长度为5,窗口中像素的灰度值为80、90、200、110、120,则中值为110,因为按小到大(或大到小)排序后,第三位的值是110。于是原理的窗口正中的灰度值200就由110取代。如果200是一个噪声的尖峰,则将被滤除。然而,如果它是一个信号,则滤波后就被消除,降低了分辨率。因此中值滤波在某些情况下抑制噪声,而在另一些情况下却会抑制信号。中值滤波很容易推广到二维的情况。二维窗口的形式可以是正方形、近似圆形的或十字形的。在图像增强的具体应用中,中值滤波只能是一种抑制噪声的特殊工具,在处理中应监视其效果,以决定最终是否采用这种方案。实施过程中的

43、关键问题是探讨一些快速算法。MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:C = conv2(A, B)C = conv2(A, B)返回矩阵A和B的二维卷积C。若A为mana的矩阵,B为mbnb的矩阵,则C的大小为(ma+mb+1)(na+nb+1)。例:A=magic(5)A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 B=1 2 1 ; 0 2 0; 3 1 3B = 1 2 1 0 2 0 3 1 3 C=conv2(A, B)C = 17 58 66 34 32 38 15

44、23 85 88 35 67 76 16 55 149 117 163 159 135 67 79 78 160 161 187 129 51 23 82 153 199 205 108 75 30 68 135 168 91 84 9 33 65 126 85 104 15 27MATLAB图像处理工具箱提供了基于卷积的图像滤波函数filter2。filter2的语法格式为:Y = filter2(h, X)其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积

45、核旋转180度,再调用conv2函数进行计算。fspecial函数用于创建预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type, parameters)参数type指定算子类型,parameters指定相应的参数,具体格式为:type=average,为均值滤波,参数parameters为n,代表模版尺寸,用向量表示,默认值为3,3。type= gaussian,为高斯低通滤波器,参数parameters有两个,n表示模版尺寸,默认值为3,3,sigma表示滤波器的标准差,单位为像素,默认值为0.5。type= laplacian,为拉普拉斯算

46、子,参数parameters为alpha,用于控制拉普拉斯算子的形状,取值范围为0,1,默认值为0.2。type= log,为拉普拉斯高斯算子,参数parameters有两个,n表示模版尺寸,默认值为3,3,sigma为滤波器的标准差,单位为像素,默认值为0.5type= prewitt,为prewitt算子,用于边缘增强,无参数。type= sobel,为著名的sobel算子,用于边缘提取,无参数。type= unsharp,为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为0,1,默认值为0.2。下面举一个均值滤波的例子:I=imread(rice.tif);J=imnoise

47、(I, salt & pepper, 0.02);h=fspecial(average, 3);I2=filter2(h, J); % 本句也可改写为:I2 = imfilter(J, h),注意二者的不同。subplot(1,3,1), imshow(I), title(原图像);subplot(1,3,2), imshow(J), title(加噪声图像);subplot(1,3,3), imshow(I2, ), title(均值滤波后图像);(注意“imshow(I2, )”中的参数“ ”!它表示由程序自动调整图像数据的类型与范围,以便正确显示图像)程序执行的结果如图:在MATLAB图

48、像处理工具箱中,提供了medfilt2函数用于实现二维中值滤波。Medfilt2函数的语法格式为:B = medfilt2(A) %用33的滤波窗口对图像A进行中值滤波。B = medfilt2(A,m n) %用指定大小为mn的窗口对图像A进行中值滤波。以下举例说明:I=imread(rice.tif);J=imnoise(I, gaussian, 0.02);I2=medfilt2(J, 3, 3);subplot(1,3,1), imshow(I), title(原图像);subplot(1,3,2), imshow(J), title(加噪声图像);subplot(1,3,3), im

49、show(I2), title(中值滤波后图像);运行的结果如图;三、实验要求1、读出“girl.bmp”等一幅灰度图像。给读出的图像加入高斯噪声。2、分别采用不同大小的模板对加有噪声的图像进行均值滤波,在一个图形显示窗口中显示原图像、加有噪声的图像及均值滤波的图像。比较结果。3、分别采用不同大小的模板对加有噪声的图像进行中值滤波,在一个图形显示窗口中显示原图像、加有噪声的图像及中值滤波的图像。比较结果。4、采用相同大小的模板对加有噪声的图像分别进行均值滤波和中值滤波,在一个图形显示窗口中显示原图像、加有噪声的图像、均值滤波的图像及中值滤波的图像。比较结果。改变加入噪声类型,再重复之。实验五

50、图像的边缘检测一、实验目的1、理解图像边缘提取的基本概念;2、熟悉进行边缘提取的基本方法;3、掌握用MATLAB语言进行图像边缘提取的方法。二、实验原理图像理解是图像处理的一个重要分支,他研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或

51、者纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。边缘检测的方法大多数是基于方向导数掩模求卷积的方法。导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。一阶导数与是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向上的灰度变化率可以用下面式子计算:对于数字图像,应该采用差

52、分运算代替求导,相对应的一阶差分为:方向差分为:函数f在某点的方向导数取得最大值的方向是,方向导数的最大值是称为梯度模。利用梯度模算子来检测边缘是一种很好的方法,它不仅具有位移不变性,还具有各向同性。为了运算简便,实际中采用梯度模的近似形式,如:、及等。另外,还有一些常用的算子,如Roberts算子和Sobel算子。Roberts算子的表达式为:Sobel算子的表达式为:X方向算子: y方向算子:其中,由于Sobel算子是滤波算子的形式,用于提取边缘。我们可以利用快速卷积函数,简单有效,因此应用很广泛。拉普拉斯高斯(LoG)算法是一种二阶边缘检测方法。它通过寻找图像灰度值中二阶微分中的过零点(

53、Zero Crossing)来检测边缘点。其原理为,灰度级变形成的边缘经过微分算子形成一个单峰函数,峰值位置对应边缘点;对单峰函数进行微分,则峰值处的微分值为0,峰值两侧符号相反,而原先的极值点对应于二阶微分中的过零点,通过检测过零点即可将图像的边缘提取出来。MATLAB的图像处理工具箱中提供的edge函数可以实现检测边缘的功能,其语法格式如下:BW = edge(I, sobel)BW = edge(I, sobel, direction)BW = edge(I, roberts)BW = edge(I, log)这里BW = edge(I, sobel)采用Sobel算子进行边缘检测。BW

54、 = edge(I, sobel, direction)可以指定算子方向,即:direction = horizontal,为水平方向;direction = vertical,为垂直方向;direction = both,为水平和垂直两个方向。BW = edge(I, roberts)和BW = edge(I, log)分别为用Roberts算子和拉普拉斯高斯算子进行边缘检测。例:用三种算子进行边缘检测。I=imread(eight.tif);imshow(I)BW1=edge(I, roberts);figure, imshow(BW1), title(用Roberts算子)BW2=edg

55、e(I, sobel);figure, imshow(BW2), title(用Sobel算子)BW3=edge(I, log);figure, imshow(BW3), title(用拉普拉斯高斯算子)三、实验要求读取一幅灰度图像显示。分别用Roberts、Sobel和拉普拉斯高斯算子对图像进行边缘检测。比较三种算子处理的结果。用不同方向(水平、垂直、水平和垂直)的Sobel算子对图像进行边缘检测。比较三种情况的结果。读取其它图像,重复边缘检测实验。实验六 图像变换及其频域处理一、实验目的1、理解离散傅立叶变换的基本原理;2、掌握应用MATLAB语言进行FFT及逆变换的方法;3、熟悉图像在频域中的滤波处理方法,应用MATLAB语言实现简单的滤波处理。二、实验原理1、傅立叶变换的基本知识在图像

温馨提示

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

评论

0/150

提交评论