边缘检测实验报告(7月20日).pdf

上传人:摩西的****12 文档编号:139674481 上传时间:2020-07-23 格式:PDF 页数:12 大小:569.03KB
返回 下载 相关 举报
边缘检测实验报告(7月20日).pdf_第1页
第1页 / 共12页
边缘检测实验报告(7月20日).pdf_第2页
第2页 / 共12页
边缘检测实验报告(7月20日).pdf_第3页
第3页 / 共12页
边缘检测实验报告(7月20日).pdf_第4页
第4页 / 共12页
边缘检测实验报告(7月20日).pdf_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《边缘检测实验报告(7月20日).pdf》由会员分享,可在线阅读,更多相关《边缘检测实验报告(7月20日).pdf(12页珍藏版)》请在金锄头文库上搜索。

1、学 海 无 涯 1 图像边缘提取图像边缘提取实验报告实验报告 一、实验目的 通过课堂的学习,已经对图像分割的相关理论知识已经有了全面的了解, 知道了许多图像分割的算法及算子, 了解到不同的算子算法有着不同的优缺点, 为了更好更直观地对图像分割进行深入理解,达到理论联系实际的目的,特制 定如下的实验。 二、实验原理 检测图像边缘信息,可以把图像看做曲面,边缘就是图像的变化最剧烈的 位置。这里所讲的边缘信息包含两个方面:一是边缘的具体位置,即像素的坐 标; 而是边缘的方向。 微分算子有两个重要性质: 定域性(或局部性)、 敏感性(或 无界性)。敏感性就是说,它对局部的函数值变化很敏感,但是因其对变

2、化过于 敏感又有了天然的缺陷不能抵抗噪声。局部性意思是指,每一点的导数只 与函数在该点邻近的信息有关。 主要有两大类基于微分算子的边缘检测技术:一阶微分算子边缘检测与二 阶微分算子边缘检测。这些检测技术采用以下的基本步骤: (1) 将相应的微分算子简化为离散的差分格式,进而简化为模板(记为 T)。 (2) 利用模板对图像 f(m,n)进行运算,获得模板作用后的结果 Tf(m,n)。 (3) 提出阈值 h,在采用一阶微分算子情形记录下高于某个阈值 h 的位置 坐标 ),(| ),(hnmTfnmSh= (而采用二阶微分算子情形,一般是对某个阈值0确立 学 海 无 涯 2 ),(| ),(=nmT

3、fnmSh ) (4) 对集合 h S进行整理,同时调整阈值 h。 Roberts 算子 Roberts 算子是一种利用局部差分算子寻找边缘的算子,两个模板分别为 = 10 01 x R = 01 10 y R 则,),(jifRx=) 1, 1(),(+jifjif ),(jifRy=) 1,(), 1(+jifjif 算法的步骤为: (1) 首先用两个模板分别对图像作用得到fRx和fRy; (2) 对 2 2 ),( yx RRjiTf+=,进行阈值判决,若),(jiTf大于阈值则相应的点 位于便于边缘处。 对于阈值选取的说明: 由于微分算子的检测性能受阈值的影响较大, 为此, 针对具体图

4、像我们采用以下阈值的选取方法,对处理后的图像统计大于某一阈 值的点,对这些数据求平均值,以下每个程序均采用此方法,不再做说明。 Sobel 算子 Sobel 算子采用中心差分, 但对中间水平线和垂直线上的四个邻近点赋予略 高的权重。两个模板分别如下: = 101 202 101 x S = 121 000 121 y S 学 海 无 涯 3 Prewitt 算子 Prewitt算子也属于中心差分类型,但没有给最邻近点较高的权重,两个 模板如下: = 101 101 101 x P = 111 000 111 y P 采用一阶微分算子很难找到一个一致的阈值选择办法, 保证检测出的图像有 相对均匀

5、的宽度, 克服这个障碍的办法是改用二阶微分算子进行边缘检测定位。 Laplace 采用一阶微分算子很难找到一个一致的阈值选择办法, 保证检测出的图像有 相对均匀的宽度, 克服这个障碍的办法是改用二阶微分算子进行边缘检测定位。 经常采用如下 Laplace 微分算子: 2 2 2 2 ),( y f x f yxf + = 并进而寻找),(yxf的跨零点的位置(零点的局部正和负的取值都有)。 当然实践中可以通过模板来实现,本程序采用如下模板: = 010 141 010 无论什么样的微分算子,直接用来进行边缘检测,会受到噪声很大的干扰。 即使是二阶微分算子也不能克服噪声干扰。但是如果采用高斯低通

6、滤波,所得 的结果则比较好地保留了图像的边缘特征。 Marr-Hildrech 的 LOG 边缘检测算法: 学 海 无 涯 4 学 海 无 涯 5 Canny 检测子检测子 Canny 算子采用和数据内容相关的滤波技术。 Canny 算子求边缘点具体算法步骤如下: 1. 用高斯滤波器平滑图像 2. 用一阶偏导有限差分计算梯度幅值和方向. 3. 对梯度幅值进行非极大值抑制 4. 用双阈值算法检测和连接边缘 步 1. 图像与高斯平滑滤波器卷积: 学 海 无 涯 6 学 海 无 涯 7 步 3. 对梯度幅值进行非极大值抑 制(non_maxima suppression,NMS): 仅仅得到全局的梯

7、度并不足以确定边缘,因此为确定边缘,必须保留局部梯 度最大的点,而抑制非极大值。 解决方法:利用梯度的方向: 步 4. 用 双阈值算法检测和连接边缘: 对非极大值抑制图像作用两个阈值 th1 和 th2,两者关系 th1=0.4th2。我们把 梯度值小于th1的像素的灰度值设为0, 得到图像1。 然后把梯度值小于th2的 像 素的灰度值设为 0,得到图像 2。由于图像 2 的阈值较高,去除大部分噪音,但 同时也损失了有用的边缘信息。而图像 1 的阈值较低,保留了较多的信息,我 学 海 无 涯 8 们可以以图像 2 为基础,以图像 1 为补充来连结图像的边缘。 链接边缘的具体步骤如下: 对图像

8、2 进行扫描,当遇到一个非零灰度的像素 p(x,y)时,跟踪以 p(x,y)为 开始点的轮廓线,直到轮廓 线的终点 q(x,y)。 考察图像 1 中 与图像 2 中 q(x,y)点位置对应的点 s(x,y)的 8 邻 近区域。如 果在 s(x,y)点的 8 邻近区域中有非零像素 s(x,y)存 在,则将其包括到图像 2 中, 作为 r(x,y)点。从 r(x,y)开始, 重复第一步,直到我们在图像 1 和图像 2 中都无 法继续为止。 当完成对包含 p(x,y)的 轮廓线的连结之后,将这条轮廓线标记为已经访问。 回到第一步,寻找下一条轮廓线。重复第一步、第二步、第三步,直到图像 2 中找 不到

9、新轮廓线为止。 至此,完成 canny 算 子的边缘检测。 三、具体过程 学 海 无 涯 9 Log算子阈值取0.01 Canny算子阈值取0.2 学 海 无 涯 10 Log算子阈值取0.01 Canny算子阈值取0.25 四、实验分析 通过对上述几种算子的研究,我们可以发现,Prewit t 算子和 Sobel 算子 都是对图像进行差分和滤波运算,仅在平滑部分的权值选择上有些差异,但是图 像产生了一定的模糊, 而且有些边缘还检测不出来, 所以检测精度比较低, 该类 算子比较适用于图像边缘灰度值比较明显的情况。 Robert s 算子检测精度比较高, 但容易丢失一部分边缘, 使检测的结果不

10、完整, 同时图像没经过平滑处理,不能抑制噪声,所以该算子对具有陡峭的低噪声 图像响应最好。 Laplace 算子通过高斯函数对图像进行了平滑处理,对噪声的抑制作用比较 明显, 但处理的同时也可能将原有的边缘平滑, 造成某些边缘无法检测到。此 学 海 无 涯 11 外,噪声对其影响也较大,检测到的图细节很丰富,同时就可能出现伪边缘。但 是,如果要降低伪边缘的话,又可能使检测精度下降,丢失很多真边缘。因此, 对于不同图像应选择不同参数。 Canny 算子也采用高斯函数对图像进行平滑处理,也具有较强的去噪能力, 但同样可能会丢失一些边缘信息, 但是, 从图中可以看出, Canny 算子比 Lapla

11、ce 算子的检测边缘的精度要高些。通过实验结果可以看出,该算子在上述几种边缘 检测算子当中效果最好。 通过上述实验结果我们可以发现,在加入高斯噪声以后,canny算子的去噪能力 减弱,对边缘检测的效果不太明显。相反,从图中可以发现sobel算子和prewitt 算子对噪声的过滤作用较为明显。基本上能够检测出较为完整的边缘信号。 Matlab 代码: clear all; close all; warning off all; I = imread(cameraman.tif); %没有噪声时的检测结果 BW_sobel = edge(I,sobel); BW_prewitt = edge(I,

12、prewitt); BW_roberts = edge(I,roberts); BW_laplace = edge(I,log); BW_canny = edge(I,canny); figure(1); subplot(2,3,1),imshow(I),xlabel(原始图像); subplot(2,3,2),imshow(BW_sobel),xlabel(sobel 检测); subplot(2,3,3),imshow(BW_prewitt),xlabel(prewitt 检测); subplot(2,3,4),imshow(BW_roberts),xlabel(roberts 检测);

13、subplot(2,3,5),imshow(BW_laplace),xlabel(laplace 检测); subplot(2,3,6),imshow(BW_canny),xlabel(canny 检测); %加入高斯噪声(=0,2=0.01)检测结果 I_g1 = imnoise(I,gaussian,0,0.01); BW_sobel = edge(I_g1,sobel); BW_prewitt = edge(I_g1,prewitt); BW_roberts = edge(I_g1,roberts); 学 海 无 涯 12 BW_laplace = edge(I_g1,log); BW_

14、canny = edge(I_g1,canny); figure(2); subplot(2,3,1),imshow(I_g1),xlabel(加入高斯噪声(=0,2=0.01)图像); subplot(2,3,2),imshow(BW_sobel),xlabel(sobel 检测); subplot(2,3,3),imshow(BW_prewitt),xlabel(prewitt 检测); subplot(2,3,4),imshow(BW_roberts),xlabel(roberts 检测); subplot(2,3,5),imshow(BW_laplace),xlabel(laplace

15、 检测); subplot(2,3,6),imshow(BW_canny),xlabel(canny 检测); %加入高斯噪声(=0,2=0.02)检测结果 I_g2 = imnoise(I,gaussian,0,0.02); BW_sobel = edge(I_g2,sobel); BW_prewitt = edge(I_g2,prewitt); BW_roberts = edge(I_g2,roberts); BW_laplace = edge(I_g2,log); BW_canny = edge(I_g2,canny); figure(3); subplot(2,3,1),imshow(I_g2),xlabel(加入高斯噪声(=0,2=0.02)图像) subplot(2,3,2),imshow(BW_sobel),xlabel(sobel 检测); subplot(2,3,3),imshow(BW_prewitt),xlabel(prewitt 检测); subplot(2,3,4),imshow(BW_roberts),xlabel(roberts 检测); subplot(2,3,5),imshow(BW_laplace),xlabel(laplace 检测); subplot(2,3,6),imshow(BW_canny),x

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号