收藏 分享(赏)

数字图像处理94042.doc

上传人:dreamzhangning 文档编号:2235747 上传时间:2018-09-06 格式:DOC 页数:37 大小:2.12MB
下载 相关 举报
数字图像处理94042.doc_第1页
第1页 / 共37页
数字图像处理94042.doc_第2页
第2页 / 共37页
数字图像处理94042.doc_第3页
第3页 / 共37页
数字图像处理94042.doc_第4页
第4页 / 共37页
数字图像处理94042.doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、数字图像处理实验讲义(Digital Image Processing)编写人:刘玉杰 闫阳一、编写说明我院开设的数字图像处理技术课程适用于四年制本科的计算机科学与技术相关专业学生的学习。为了帮助学生完成本课程配套的实验教学,特编写了这个实验指导书,本指导书编写于 2011 年 4 月。二、评分办法1、采用起评加减评分制:即每个实验都有一个基本的起评分,学生完成实验并提供实验报告即可以得到这个基本分,然后按照本办法规定的加分、扣分办法对基本分进行适当的加减得出最终的分数。2、加分因素(1)书写认真、图表规范(2)实验过程描述全面、详尽(3)有新的发现或对于实验现象有新的解释(4)实验方法有创新

2、(5)对于实验提出有价值的意见或建议(6)指导教师认为可以加分的其他因素3、扣分因素(1)迟到或旷课或实验报告迟交(2)书写潦草、字迹不清、图标粗糙不规范(3)描述过于简略(4)未按规定完成全部的实验步骤(5)实验数据不可靠或有明显错误(6)抄袭他人实验结果或伪造数据(7)指导教师认为应当扣分的其他因素三、实验目的与任务数字图像处理技术实验课程主要培养学生运用所学的只是解决实际问题的能力。目的是使学生增强对数字图像处理的感性认识,进一步了解和掌握基本的数字图像处理技术。四、实验的基本要求数字图像处理技术实验课程主要侧重于对数字图像基本概念、数字图像处理基本技术的理解、掌握。培养学生数字图像处理

3、技术的独立思考能力和实验操作能力,培养学生对数字图像处理程序设计思想的理解能力。实验一 图像的显示与格式变换一、实验目的了解 Matlab 软件/语言,学会使用 Matlab 的图像处理工具箱(Image Processing Toolbox) ,使学生初步具备使用本软件处理图像信息的能力,并能够利用 Matlab 完成本课程规定的其他实验和作业。熟悉常用的图像文件格式与格式转换,熟悉图像矩阵的显示方法(灰度、索引、黑白、彩色) ,熟悉图像矩阵的格式转换。二、实验要求学生应当基本掌握 Matlab 的操作,掌握 Matlab 图像处理工具箱中最常用的函数的用法。练习图像读写命令 imread

4、和 imwrite 并进行图像文件格式间的转换。三、实验设备与软件(1)硬件:学生每人一台 PC 机。(2)软件:Matlab 软件,包括图像处理工具箱;实验所需的图片。四、实验内容与步骤(1)学会 Matlab 的基本操作;(2)使用 read 函数读入图像 rice.png,pout.tif;(3)使用 figure 函数创建窗口;(4)使用 image/imshow 函数显示图像;(5)使用 colorbar 函数在图像的右侧显示图像的亮度条。五、思考题(1)简述 Matlab 的特点。(2)Matlab 可以支持哪些图像文件格式?(3)说明函数 imread 的用途格式以及各种格式所得

5、到图像的性质。(4)用 I=imread(rice.png )命令得到的图像能否进行算术运算?六、实验报告要求描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,须包括原始图像及其计算/处理后的图像。七、实验图像rice.png pout.tif实验二 图像的增强一、实验目的学习常见的图像增强的方法,并实际体会图像增强前后画质的变化;了解几种不同增强方式用于不同图像处理所取得的效果,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。二、实验要求利用 Matlab 工具箱中关于图像增强的函数,计算本指导书中指定图像的直方图,并对其进行灰度增强处理,自己编写程序实

6、现 Matlab 工具箱中函数以外的图像增强算法,对于本指导书中指定的图像进行处理。三、实验设备与软件(1)硬件:学生每人一台 PC 机。(2)软件:Matlab 软件,包括图像处理工具箱;实验所需的图片。四、实验内容与步骤(一)实验内容(1)选择一幅对比度不足的图像,进行灰度变换,增强对比度,显示增强前后的图像及其直方图;(2)选择一幅直方图不均匀的图像,进行直方图均衡化,显示处理前后的图像及其直方图;(3)选择一副直方图不均匀的图像,进行直方图规定化,显示处理前后的图像及其直方图。(二)实验步骤(1)图像的对比度调整MATLAB7.0 图像处理工具箱中的 imadjust 函数可以实现对图

7、像的对比度进行调整。imadjust 函数调用模式为 J=imadjust(I,low_in high_in,low_out high_out,gamma)其中 low_in high_in 指定输入图像需要调整的灰度范围,low_out high_out 指定输出图像的灰度范围。gamma 描述 I 和 J 关系曲线的形状,默认时,gamma=1,表示线性变换。说明:使用 imadjust 函数时,按照以下两个步骤1、 绘制直方图,观察灰度范围;2、 将灰度范围转换为 0.0-1.0 之间的分数。例:I=imread(pout.tif);subplot(2,2,1);imshow(I);su

8、bplot(2,2,2);imhist(I);J=imadjust(I,0.3 0.7,0 1);subplot(2,2,3);imshow(J);subplot(2,2,4);imhist(J);(2)直方图均衡化MATLAB7.0 图像处理工具箱中,可以使用 histeq 函数实现直方图均衡化。函数的调用方法为:J,T=histeq(I,N)该函数对图像 I 进行变换,返回有 N 个灰度级的图像 J, J 中的每一个灰度级具有大致相等的像素点,所以图像 J 的直方图比较平坦,N 的默认值为 64.T 是转移函数。例:I=inread(pout.tif);imshow(I);figure,i

9、mhist(I);J,T=histeq(I,64);figure,imshow(J);figure,imhist(J);原始图与其直方图:均衡化后的结果(3)直方图规定化MATLAB7.0 图像处理工具箱中,可以使用 histeq 函数实现直方图规定化。函数的调用方法为: J=histeq(I,hgram)其中 hgram 用户指定的矢量,将原始图像 I 的直方图近似变换成 hgram,hgram 中的每一个元素都在0,1 中。I=imread(tire.tif);hgram=0:255;J=histeq(I,hgram);imshow(I);figure,imshow(J);figure,i

10、mhist(I,64);figure,imhist(J,64);五、思考题(1)直方图的物理含义是什么?(2)结合实验内容,定性地评价直方图均衡化和规定化增强效果。六、实验报告要求描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,须包括原始图像及其计算/处理后的图像。实验三 图像的滤波一、实验目的学会使用 Matlab 对图像作滤波处理,使学生掌握滤波算法、体会滤波效果。了解几种不同滤波方式的使用和使用的场合,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。二、实验要求学生应当完成对于给定图像+噪声,使用平均滤波器、中值滤波器对不太强度的高斯噪声和椒盐噪声

11、进行滤波处理;能够正确地评价处理的结果,能够从理论上做出合理的解释。三、实验设备与软件(1)硬件:学生每人一台 PC 机。(2)软件:Matlab 软件,包括图像处理工具箱;实验所需的图片。四、实验内容与步骤(一)实验内容(1)选择一幅图像,增强零均值噪声,采用平均滤波、中值滤波等方法对图像进行滤波,比较滤波效果。(2)选择一幅图像,叠加椒盐噪声,采用平均滤波、中值滤波等方法对图像进行滤波,比较滤波效果。(3)考虑滤波器模板大小对平均滤波器滤波效果的影响。(4)考虑滤波器模板大小对中值滤波器滤波效果的影响。(二)实验步骤MATLAB 的图像处理工具箱提供 imnoise 函数,可以用该函数模拟

12、给图像加不同类型的噪声。该函数的调用格式如下:J=imnoise(I,type,parameters);其中 I 为加噪声前的图像,J 为加噪声后的图像,type 为噪声类型。imnoise 函数能够产生 5 种噪声。imnoise 函数支持的噪声类型及参数说明类 型 参 数 说 明Gaussian m,v 均值为 m,方差为 v 的高斯噪声localvar v 均值为 0,方差为 v 的高斯噪声possion 无 泊松噪声saltI=imnoise(I,gaussian,0,0.02);imshow(I);h=1 1 1;1 1 1;1 1 1;H=h/9;J=conv2(I,h);I=ui

13、nt16(J);figure,imshow(I,)a 滤波前原图像 b 滤波后的图像对噪声图像线性滤波的结果(2)中值滤波中值滤波也是一种典型的低通滤波器,主要目的是保护图像边缘,同时也能去除噪声。与加权平均方式的平滑滤波不同,中值滤波是将邻域中的像素按灰度级排序,取其中间值为输出像素。中值滤波的效果依赖于两个要素:邻域的空间范围和中值计算中涉及的像素数(当空间范围较大时,一般只取若干稀疏分布的像素作中值计算) 。中值滤波能够在抑制随机噪声的同时不使边缘模糊,因而受到欢迎。中值滤波的方法简单,易于实现,而且能较好地保护边界,但有时会丢失图像中的细线和小块目标区域。邻域的大小决定在多少个数值中进

14、行求中值操作,窗口的形状决定了在什么样的几何空间中取元素计算中值。对二维图像,窗口的形状可以是矩形、圆形等,它的中心一般位于被处理点上。窗口大小及形状有时对滤波效果影响较大。一维信号中值滤波具有如下重要性质:输入是阶跃信号或斜坡信号时,输出信号和输入信号相同。若输入是脉宽小于窗口一半的脉冲 p,则该脉冲被滤除,否则输出和输入相同。输入是三角形信号时,输出时其顶部被削平。二维信号的中值滤波性质与之类似。在 MATLAB7.0 图像处理工具箱中,提供了 medfilt2 函数用于实现中值滤波。例如对加入椒盐噪声的图像 eight.tif 作中值滤波,程序代码示例如下,处理结果如图所示。I=imre

15、ad(eight.tif);J=imnoise(I,salt K=medfilt2(J);subplot(1,2,1),imshow(J);subplot(1,2,2),imshow(I);噪声图像中值滤波结果(3)自适应滤波MATLAB7.0 图像处理工具箱中的 wiener2 函数可以实现对图像噪声的自适应滤除。wiener2 函数根据图像的局部方差来调整滤波器的输出。以下程序代码示例说明了该函数的用法,对加入高斯噪声的图像 eight.tif 作维纳滤波,结果如图所示。I=imread(eight.tif);J=imnoise(I,gaussian,0,0.008);K=wiener2(

16、J,5 5);subplot(1,2,1),imshow(J);subplot(1,2,2),imshow(K);噪声图像维纳滤波前、后效果五、思考题(1)简述高斯噪声和椒盐噪声的特点。(2)结合实验内容,定性评价平均滤波器/中值滤波器对高斯噪声和椒盐噪声的去噪效果。(3)结合实验内容,定性评价滤波窗口对去噪效果的影响。六、实验报告要求描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,须包括原始图像及其计算/处理后的图像。实验四 图像的运算一、实验目的学会使用 Matlab 对图像作几何运算,使学生掌握图像点运算和代数运算的实现方法、体会图像运算效果。了解几种图像

17、几何运算的简单应用,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。二、实验要求了解 Matlab 工具箱中关于图像运算的函数;学生应当完成对于给定图像进行点运算、代数运算及几何运算等,并能够正确地评价处理的结果,能够从理论上做出合理的解释。三、实验设备与软件(1)硬件:学生每人一台 PC 机。(2)软件:Matlab 软件,包括图像处理工具箱;实验所需的图片。四、实验内容与步骤(一)实验内容(1)选择一幅图像,通过图像点运算改变对比度。(2)选择一幅图像,做加、减、乘、除代数运算,(3)选择一幅图像,改变图像大小,分别将原图像放大 1.5 倍和缩小 0.5 倍。(4)选择一幅图像,分

18、别进行顺时针和逆时针旋转任意角度,观察显示效果。(5)通过交互式操作,从一幅图像中剪切一个矩形区域。(二)实验步骤(1)图像点运算读入图像“rice.png” ,通过图像点运算改变对比度。rice=imread(rice.png);subplot(131),imshow(rice);I=double(rice);J=I*0.43+60;rice2=uint8(J);subplot(132),imshow(rice2);J=I*1.5-60;rice3=uint8(J);subplot(133),imshow(rice3);(2)图像的代数运算a 加法运算图像相加一般用于对同一场景的多幅图像求平

19、均效果,以便有效地降低具有叠加性质的随机噪声。直接采集的图像品质一般都较好,不需要进行加法运算处理,但是对于那些经过长距离模拟通信方式传送的图像(如卫星图像) ,这种处理是必不可少的。在 MATLAB7.0 中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用 imadd 函数来实现。 imadd 函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输入图像。imadd 函数的调用格式可参考图像处理的工具箱。下面的程序可将图 1 两幅图像叠加在一起,叠加效果如图 2 所示。imshow(rice.png);imshow(cameraman.ti

20、f);I=imread(rice.png);J=imread(cameraman.tif);K=imadd(I,J,uint16);imshow(K,)图 1 图 2给图像的每一个像素加上一个常数可以使图像的亮度增加。例如以下程序示例的处理效果如图 3 所示。I=imread(rice.png);J=imadd(I,50);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);图 3b 减法运算图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。图像减法可以作为许多图像处理过程的准备步骤。例如,可以使用图像减法来检测一系列相同

21、场景图像的差异。图像减法与阈值化处理的综合使用通常是建立机器视觉系统最有效的方法之一。当然,在利用图像减法处理图像时,往往需要考虑背景的更新机制,尽量补偿因天气、光线等因素对图像显示效果造成的影响。在 MATLAB7.0 中,使用 imsubtract 函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。imsubtract 函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将相应的像素值之差作为输出图像相应的像素值。以下的程序代码示例首先根据原始图像生成其背景亮度图像,然后再从原始图像中将背景亮度图像减去,从而生成如图 4 所示的图像。I=imread(rice

22、.png);blocks=blkproc(I,32 32,min(x(:);background=imresize(blocks,256 256,bilinear);Ip=imsubtract(I,background);imshow(Ip,)图 4c 乘法运算两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常被称为缩放,这是一种常见的图像处理操作。如果使用的缩放因数大于 1,那么将增强图像的亮度,如果因数小于 1 则会使图像变暗。缩放操作通常将产生比简单添加像素便宜量自然得多的明暗效果。这是因为该操作能够更好的维持图像的相关对比度。此外,由于时域的卷积或相

23、关运算与频域的乘积运算对应,因此乘法运算有时也作为一种技巧来实现卷积或相关处理。在 MATLAB7.0 中,可以使用 immultiply 函数实现两幅图像的乘法。immultiply 函数将两幅图像相应的像素值进行元素对元素的乘法操作,并将乘法的运算结果作为输出图像相应的像素值。例如,以下程序示例将使用给定的缩放因数对图 5 所示的图像进行缩放,从而得到如图 6 所示的较为明亮的图像。I=imread(moon.tif);I16=uint16(I);J=immultiply(I16,I16);imshow(I),figure,imshow(J)图 5 缩放前 图 6 缩放后d 除法运算除法运

24、算可用于校正成像设备的非线性影响,这在特殊形态的图像(如断层扫描等医学图像)处理中经常用到。图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法操作也称为比率变换。在 MATLAB7.0 中,可以使用 imdivide 函数进行两幅图像的除法。imdivide 函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除) ,并将得到的结果作为输出图像的相应像素值。以下程序代码示例将图 7 的两幅图进行除法操作,得到如图 8 所示的效果图。I=imread(rice.png);blocks=blkproc(I,32 32,m

25、in(x(:);background=imresize(blocks,256 256,bilinear);Ip=imdivide(I,background);imshow(Ip,) figureI=imread(rice.png);I16=uint16(I);J=immultiply(I16,I16);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);a 图像一 b 图像二图 7 两幅待相除的图像 图 8 相除后的图像(3)图像的插值运算MATLAB7.0 中的 imresize 函数和 imrotate 函数用于二维图像的差值运算,MATLA

26、B7.0 的图像处理工具箱提供了 3 种插补方法:近邻(nearest neighbor)插值双线性(bilinear)插值双立方(bicubic)插值这三种插补方法的运算方式基本类似。对于每种插补方法,为了确定插值像素点的数据值,用户必须在输入图像中查找到与输出像素相应的点。但是上述三种插值方法的主要区别在于其对像素点赋值内容的不同:对于近邻插值来说,输出像素的赋值为当前点的像素点。对于双线性插值来说,输出像素的赋值为 2*2 矩阵所包含的有效点的加权平均值。对于双立方插值来说,输出像素的赋值为 4*4 矩阵所包含的有效点的加权平均值。(4)调整图像的大小改变图像的大小可用 imresize

27、 函数来调整。imresize 函数主要特点有:可以指定输出图像的大小。可以指定插值方法。可以指定滤波器来阻止混淆。a 指定输出图像的大小指定输出图像大小的方法有两种:一是指定放大因子,二是指定输出图像的维数。以下程序代码示例用指定放大因子的方法说明 imresize 函数的使用用法,并将原图像放大了1.5 倍,其效果如图 9 所示。a 改变前 b 改变后图 9 图像大小改变前、后的效果对比b 指定插值方法在默认的情况下,imresize 函数可用最近邻插值法来指定输出图像的像素值。当然,也可以指定其他的插值方法,以下命令行用 imresize 函数指定了双线性插值方法。Y=imresize(

28、X,100 150,bilinear)(5)图像的旋转可通过 imrotate 函数来旋转图像。imrotate 函数主要包括两个参数:需要旋转的图像和旋转的角度。如果指定一个正的旋转角度,那么 imrotate 函数将使用指定的插值方法和旋转角度将图像逆时针旋转;如果指定一个负值,那么将按顺时针方向旋转。如果命令中没有指定插补方法,则函数采用默认的最近邻插补方法。例如以下的程序代码示例将 ic.tif 图像旋转 35,其旋转效果如图 10 所示。I=imread(circuit.tif);J=imrotate(I,35,bilinear);imshow(I);figgure,imshow(J

29、);a 旋转前 b 旋转后图 10 图像旋转前、后的显示效果比较五、思考题(1)简述图像进行代数运算和几何运算特点。(2)结合实验内容,定性评价图像经过几何运算后的效果以及代数运算和几何运算的适用场合。六、实验报告要求描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,须包括原始图像及其计算/处理后的图像。实验五 图像边缘检测一、实验目的学习常见的边缘检测基本方法,了解几种不同边缘检测方式用于不同图像处理所取得的效果,培养学生处理实际图像的能力,并为课堂教学提供配套的实践机会。二、实验要求了解 Matlab 工具箱中关于图像边缘检测的函数;用梯度算子检测图像中的边缘

30、;用Sobel 算子检测图像中的边缘;比较两种方法的处理结果。三、实验设备与软件(1)硬件:学生每人一台 PC 机。(2)软件:Matlab 软件,包括图像处理工具箱;实验所需的图片。四、实验内容与步骤(一)实验内容(1)调入并显示图像 rice.png。(2)用 Roberts 算子检测图像中的边缘信息:(3)用 Prewitt 算子和 Sobel 算子检测图像中的边缘信息;(4)用拉普拉斯高斯算子检测图像中的边缘信息。(5)改变阈值,观察边缘状况。(6)将上述几种处理方法的结果作比较。(二)实验步骤在图像的识别中常需要突出边缘和轮廓信息,图像锐化就是增强图像的边缘或轮廓。 数字图像的边缘检

31、测是图像分割、目标区域识别、区域形状提取等图像分析领域十分重要的基础,也是图像识别中提取图像特征的一个重要属性。在进行图像理解和分析时,第一步往往就是边缘检测,目前已成为机器视觉研究领域最活跃的课题之一,在工程应用中占有十分重要的地位。物体的边缘是以图像的局部特征不连续的形式出现的,即是指图像局部亮度变化最显著的部分,例如灰度值的突变、颜色的突变、纹理结构的突变等,同时物体的边缘也是不同区域的边界处。图像具有方向和幅值两个特征,通常沿边缘的走向灰度变化平缓,垂直于边缘走向的像素灰度变化剧烈。根据灰度变化的特点,可分为阶跃型、房顶型和凸缘型。图像平滑处理是通过平均(类似积分)过程使得图像边缘模糊

32、,而图像锐化处理则是通过微分而使图像边缘突出、清晰。常用的微分算子有 Roberts 算子、Prewitt 算子、Sobel算子等。(1)Roberts 算子对于离散图像来说,边缘检测算子就是用图像的垂直和水平查分来逼近梯度算子:f=(f(x,y)-f(x-1,y),f(x,y)-f(x,y-1)因此当需要检测图像边缘时,最简单的方法就是对每个像素计算f ,然后求绝对值,最后进行阈值操作就可以实现。Roberts 算子就是基于这种思想,该算子如下式所示:=),(jiR 22 ),1(-),()1,(-), jifjifjifjif 它可以由以下两个 2*2 的模板共同实现:-010-(2)Pr

33、ewitt 算子和 Sobel 算子在比较复杂的图像中,仅用 2*2 的 Roberts 算子得不到较好的边缘检测,而相对较复杂的 3*3 的 Prewitt 算子和 Sobel 算子检测效果较好。和 Roberts 算子类似,Prewitt 算子也可以通过以下两个模板实现:10- 10-以上两矩阵分别代表图像的水平梯度和垂直梯度。如果用 Prewitt 算子检测图像 M 的边缘,一般先用水平算子和垂直算子对图像进行卷积,得到两个矩阵 M1 和 M2,在不考虑边界因素的时候,它们与原图像有相同的大小,分别表示图像 M 中相同位置对于 x 和 y 的偏导数。然后求 M1 和 M2 对应位置的两个

34、数的平方和,得到一个新的矩阵 G。G 是 M 中像素灰度梯度的近似值,然后经过阈值操作得到边缘。Sobel 算子与 Prewitt 算子的区别仅在于选用的模板不同:120- 10-2为了方便,下面对上述常用算子的模板进行总结,如下表所示:常用边缘检测算子模板算子名称 H1 H2 特点Roberts 01- 1-0边缘定位准对噪声敏感Prewitt 10- 10-平均、微分对噪声有抑制作用Sobel -2 2-加权平均边宽=2 像素Isotropic Sobel 10- 10-权值反比于临点与中心点的距离检测沿不同方向边缘时梯度幅度一致MATLAB7.0 图像处理工具箱中提供了专门的边缘检测函数

35、,其调用格式如下:BW=edge(I,method)BW=edge(I,method,thresh)BW=edge(I,method,thresh,direction)BW,thresh=edge(I,method,)其中,I 是输入图像,method 是选用的方法(算子) ,可以选择的 method 有Sobel、Prewitt、Roberts、log 、candy、zerocross 等。可选的参数有 thresh(门限) 、sigma(方差) 、direction(方向) 。下边的程序代码示例为分别采用 3 种不同的边缘检测算子对原始图像 rice.png 进行边缘提取,检测结果如下图所

36、示。I=imread(rice.png);BW1=edge(I,roberts);figure;imshow(BW1);BW2=edge(I,sobe);figure;imshow(BW2);BW3=edge(I,prewitt);figure;imshow(BW3);原始图像 Roberts Sobel Prewitt不同的边缘检测算子进行边缘提取的效果(3)拉普拉斯高斯算子前面都是利用边缘处的梯度最大(正的或负的)这一性质来进行边缘检测,即利用了灰度图像的拐点位置是边缘的性质。除了这一点,边缘还有另外一个性质,即在拐点位置处的二阶导数为 0,由这一性质可以发现通过寻找二阶导数的零交叉点来寻

37、找边缘,而Laplacian 算子是最常用的二阶导数算子。需要注意的是,一阶导数对噪声敏感因而不稳定,由此,二阶导数对噪声就会更加敏感从而更加不稳定,所以在作 Laplacian 变换之前需要做平滑。同时又因为卷积是可交换、可结合的,所以先作高斯卷积,再用 Laplacian 算子作卷积等价于对原图像用高斯函数的 Laplacian 变换后的滤波作卷积。这样就得到一个新的滤波器 LoG(Laplacian of Gaussian)滤波器。利用以下代码可以得到 LoG 算子的图像:clearx=-2:0.05:2;y=-2:0.05:2;sigma=0.5;y=y;for i=1:(4/0.05

38、+1)xx(i,:)=x;yy(:,i)=y;endr=-1/(2*pi*sigma4)*(xx.2+yy.2)/(sigma2)-2).*exp(-(xx.2+yy.2)/(2*sigma2);colormap(jet(16);mesh(xx,yy,r);在实际应用中,使用 LoG 模板做卷积,然后寻找那些零交叉像素:如果一个像素值小于-(theta)0,而周围邻接的 8 个像素都大于(theta)0,则这个像素就是零交叉点。利用以下程序代码,对原始图像进行 LoG 算子边缘提取,得到如下图所示的效果。BW=edge(I,log);figure;imshow(BW);LoG 算子边缘提取结果

39、比较以上几个算子,可以发现用 LoG 算子进行边缘检测的效果比较好。(4)Canny 算子还有一个很重要的边缘检测算子,即 Canny 算子,它是最优的阶梯型边缘(step edge)检测算子。从以下的三个标准意义来说,Canny 边缘检测算子对受到白噪声影响的阶跃型边缘是最优的。(1) 检测标准。不丢失重要的边缘,不应有虚假的边缘。(2) 定位标准。实际边缘与检测到的边缘位置之间的偏差最小。(3) 单响应标准。将多个响应降低为单个边缘响应。Canny 算子的实现步骤如下:(1) 首先用 2D 高斯滤波模板与原始图像进行卷积,以消除噪声。(2) 利用导数算子(如 Prewitt 算子、Sobe

40、l 算子)找到图像灰度沿着两个方向的导数,并求出梯度的大小。(3) 利用上步的结果计算出梯度的方向。(4) 求出边缘的方向,就可以把边缘的梯度方向大致分为 4 种(水平、垂直、45度方向和 135 度方向) ,并可以找到这个像素梯度方向的邻接像素。(5) 遍历图像。若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比不是最大的,那么将这个像素值置为 0,即不是边缘。(6) 使用累计直方图计算两个阈值。凡是大于高阈值的一定是边缘;凡是小于低阈值的一定不是边缘。如果检测结果在两个阈值之间,则根据这个像素的邻接像素中有没有超过高阈值的边缘像素,如果有,则它是边缘,否则不是。以下程序代码是利用 M

41、ATLAB 中 edge 函数,并采用 Canny 算子,对原始图像进行边缘检测,检测效果如下图所示。I=imread(rice.png);BW=edge(I,canny);imshow(BW);Canny 算子边缘检测效果比较如上几个算子进行边缘检测的结果,可以看出 Canny 算子检测结果不仅能清晰地提取图像的边缘,而且边缘连续性比较好,这是 Canny 的优良之处。五、思考题(1)在一幅图像中存在多个方向的边缘,是否能用拉普拉斯算子只检测某个特定方向的边缘?(2)用 Sobel 算子可以检测对角线边缘吗?(3)选取的阈值对最终检测得到的边缘有何影响?六、实验报告要求描述实验的基本步骤,用

42、数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,须包括原始图像及其计算/处理后的图像。实验六 图像的区域分割一、实验目的学习常用的区域分割基本方法,了解几种不同区域分割方式用于不同图像处理所取得的效果,培养学生处理实际图像的能力,并为课堂教学提供配套的实践机会。二、实验要求了解 Matlab 工具箱中关于图像区域分割的函数;用阈值化方法分割图像;用分水岭算法分割图像;比较两种方法的处理结果。三、实验设备与软件(1)硬件:学生每人一台 PC 机。(2)软件:Matlab 软件,包括图像处理工具箱;实验所需的图片。四、实验内容与步骤(一)实验内容(1)调入并显示图像 rice.png。(

43、2)用迭代式阈值选择方法分割图像:(3)用 Otsu 法阈值选择法分割图像;(4)用分水岭算法分割图像。(5)将上述几种处理方法的结果作比较。(二)实验步骤在一幅图像中,人们常常只对其中的部分目标感兴趣,这些目标通常占据一定的区域,并且在某些特性(如灰度、轮廓、颜色和纹理等)上和临近的图像有差别。这些特性差别可能非常明显,也可能很细微,以至肉眼察觉不出来。随着计算机图像处理技术的发展,使得人们可以通过计算机来获取和处理图像信息。图像识别的基础是图像分割,其作用是把反映物体真实情况的、占据不同区域的、具有不同特性的目标区分开来,并形成数字特征。图像分割是图像理解的基础,而在理论上图像分割又依赖图

44、像理解,它们彼此是紧密关联的。图像分割在一般意义下是十分困难的问题,目前的图像分割一般作为图像的前期处理阶段,是针对分割对象的技术,最常用到的是利用阈值化处理进行的图像分割。所谓阈值的方法实质是利用图像的灰度直方图信息得到用于分割的阈值。基于阈值的分割方法可以分为全局阈值的方法好局部阈值的方法,全局阈值的方法是利用整幅图像的灰度信息,从整个图像中得到用于分割的阈值,并且根据该阈值对图像进行分割;而局部阈值的方法是根据图像中不同区域获得对应不同区域的几个阈值,利用这些得到的阈值对图像进行分割,也就是一个阈值对应图像中的一个子区域。该方法的关键是如何合理地选择阈值,人工选择法是通过人眼的观察,应用

45、人们对图像的知识,在分析图像直方图的基础上人工选出合适的阈值,也可以在人工选出阈值后,根据分割效果不断地交换操作,从而选择出较佳的阈值;自动阈值法通常使用灰度直方图来分析图像中灰度值的分布,结合特定的应用区域知识来选取合适的阈值。(1)迭代式阈值选择迭代式阈值选择方法的基本思想是:开始时候选择一个阈值作为初始计值,然后按某种策略不断地改进这一估计值,直到满意给定的准则为止。在迭代过程中,关键之处在于选择什么样的阈值改进策略。好的与之改进侧率应该具备两个特征:一是能够快速收敛;二是在每一个迭代过程中,新产生阈值优于上一次的阈值。如下是具体操作步骤:a 选择图像灰度的中值作为初始阈值 ;b 利用此

46、阈值 把图像分割成两个区域 和 ,用下式计算区域 和 的灰度均值 和c 计算出 和 后,计算新的阈值d 重复步骤 2 和 3,直到 和 的差小于某个给定值。下面为实现迭代式阈值选择的 MATLAB 代码:f=imread(rice.png);subplot(121);imshow(f);title(原始图像 )f=double(f);T=(min(f(:)+max(f(:)/2;done=false;i=0;while doner1=find(fT);Tnew=(mean(f(r1)+mean(f(r2)/2;done=abs(Tnew-T)1;T=Tnew;i=i+1;endf(r1)=0;

47、f(r2)=1;subplot(122);imshow(f);title(迭代阈值二值化图像)用迭代式阈值选择法二值化图像(2)Otsu 法阈值选择Otsu 法是一种使类间方差最大的自动确定阈值的方法,该方法具有简单、处理速度快的特点,是一种常用的阈值选取方法。MATLAB 工具箱提供的 graythresh 函数求取阈值采用的就是这种方法。其基本思想是:设图像像素数为 N,灰度范围为0 ,L-1,对应灰度级 i 的像素数为 ,概率为 i=0,1,2,L-1 把图像中的像素按灰度值用阈值 T 分成两类 和 , 由灰度值在0,T 之间的像素组成, 由灰度值在T+1,L-1之间的像素组成,对于灰度

48、分布概率,整幅图像的均值为则 和 的均值为 ,其中 ,由上面三式可得 ,类间方差定义为让 T 在0,L-1范围依次取值,使得方差最大的 T 值即为 Otsu 法的最佳阈值。下面为用 Otsu 方法进行阈值选择的 MATLAB 代码:f=imread(rice.png);subplot(121);imshow(f);title(原始图像 )T=graythresh(f);g=im2bw(f,T);subplot(122);imshow(g);title(Otsu 方法二值化图像)用 Otsu 方法二值化图像(3)分水岭算法分水岭算法(watershed )是一种借鉴了形态学理论的分割方法,在该方法中,将一幅图像看成一个拓扑地形图,其中灰度值对应地形高度值,高灰度值对应着山峰,低灰度值对应着山谷。水总是朝着地势低的地方流动,直到某一局部低洼处才停下来,这个低洼处被称为吸水盆地。最终所有的水会分聚在不同的吸水盆地,吸水盆地之间的山脊被称为分水岭。水从分水岭流下时,它朝着不同的吸水盆地流去的可能性是相等的。将这种想法应用于图像分割,就是要在灰度图像中找到不同的吸水盆地和分水岭,由这些不同的吸水盆地和分水岭组成的区域即为我们要分割的目标。阈值 T0 阈值 T1 阈值 T2分水岭形成示意图I=imrea

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报