当前位置:文档之家› Canny算子实验报告

Canny算子实验报告

开始
cvLoadImage, cvCreateImage, cvCvtColor
grayImage与高斯核做卷积得到 GaussCanny
用Sobel计算G、θ,得到M 对M非极大值印制得到N
计算或设置双阈值
进行边缘检测
cvShowImage
cvReleaseImage 结束
图 5.Canny 流程图
将梯度角离散为圆周的四个扇区之一,用 3*3 的窗口作抑制运算。4 个扇区 对应 3*3 邻域的四种可能组合。 在每一点上,邻域的中心像素 M[x,y]与沿着梯度线的两个像素相比,若其不比它 们的梯度值大,则令 M[x,y] = 0,最后得到 N 矩阵。
图3
(4)用双阈值算法检测和连接边缘 减少假边缘段数量的典型方法是对 N[i,j]使用一个阈值。将低于阈值的所有值赋 零值。 双阈值算法对非极大值抑制图象作用两个阈值τ 1 和τ 2,从而可以得到两个阈 值边缘图象 N1[i,j]和 N2[i,j] 。由于 N2[i,j]使用高阈值得到,因而含 有很少的假边缘,但有间断(不闭合)。双阈值法要在 N2[i,j]中把边缘连接成 轮廓,当到达轮廓的端点时,该算法就在 N1[i,j]的 8 邻点位置寻找可以连接 到轮廓上的边缘,这样,算法不断地在 N1[i,j]中收集边缘,直到将 N2[i,j] 连接起来为止。根据经验数据,一般选取前 79%个灰度值中的最大的灰度值为高 阈值,上下限阈值比为 2:1 到 3:1 之间。 三、算法流程图 A.Sobel、Prewitt
边缘检测
实验报告
姓名: 学号: 一、实验题目 编程实现 Canny、Sobel、Perwit 这三个边缘检测算子,并分析和比较它们性 能。 二、实验原理 边缘是指图像局部强度变化最显著的部分。主要存在于目标与目标、目标与 背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征和形状特征等图 像分析的重要基础。 边缘检测正是利用物体和背景在某种图像特征上的差异来实 现检测,这些差异包括灰度、颜色或纹理特征,边缘检测实际上就是检测图像特 征发生变化的位置。 a. Sobel 边缘检测算子 Sobel 算子是一种一阶微分算子,它利用像素临近区域的梯度值来计算 1 个 像素的梯度,然后根据一定的阈值来取舍。 Sobel 算子是 3*3算子模板。图 1 所示的 2 个卷积核 dx、 dy 形成 Sobel 算 子。一个核通常的垂直边缘响应最大,而另一个核对水平边缘响应最大。
四、程序实现 程序部分借鉴网上的代码,详细请看附件。 五、实验结果
图 6.原图
图 7.Sobel、Prewitt 边缘检测
Canny 计算梯度的幅值和方向时分别使用了 Sobel 和 Roberts 算子, 见图 8 和 图9
图 8.Canny(Sobel)边缘检测,阈值比 2:1,5:1
图 9.Cann3:1
五、实验结果分析 Prewitt 算子:对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像 素平均相当于对图像的低通滤波。 Sobel 算子:Sobel 算子和 Prewitt 算子都是加权平均,但是 Sobel 算子认为, 邻域的像素对当前像素产生的影响不是等价的, 所以距离不同的像素具有不同的 权值,对算子结果产生的影响也不同。一般来说,距离越远,产生的影响越小。 因此从图 7 可以看出,Sobel 比 Prewitt 的边缘检测更加明显,Sobel 要比 Prewitt 更能准确检测图像边缘。
开始
cvLoadImage, cvCreateImage, cvCvtColor 计算Gx、Gy
计算G、θ
min(255,G)
cvShowImage
cvReleaseImage 结束
图 4.Sobel、Prewitt 流程图
先通过 OpenCV 把图像灰度化, 过公式 1.1/1.4 算出图像与卷积核的卷积 Gx、 Gy,然后通过公式 1.2、1.3 算出 G、θ ,由于图像已经灰度化,所以 G 和 255 比较取小值,最后利用 OpenCV 输出图像。 B. Canny
图 1 . Sobel 算子
以 A 代表原始图像, Gx 及 Gy 分别代表经横向及纵向边缘检测的图像灰度值, 其公式如下:
A ������1 = ������4 ������7 ������2 ������3 ������5 ������6 ������8 ������9
(1.1) 图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度 的大小: (1.2)
图 2.Prewitt 算子
(1.4) c. Canny 边缘检测算子 Canny 边缘检测基本原理: (1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确 定边缘的位置。 (2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是 Canny 边 缘检测算子。 (3) 先平滑后求导数的方法。 Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是: : (1)好的检测- 算法能够尽可能多地标识出图像中的实际边缘。 (2)好的定位- 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。 (3)最小响应- 图像中的边缘只能标识一次, 并且可能存在的图像杂讯不应标识为 边缘。 Canny 边缘检测算法的步骤: (1)去噪:灰度化,与高斯核作卷积; 一维高斯核: (1.5) 二维高斯核: (1.6) (2)用一阶偏导有限差分来计算梯度的幅值和方向,常用 Sobel、Roberts 算子; (3)对梯度幅值进行非极大值抑制 得到全局的梯度仍未能确定边缘, 因此为确定边缘, 必须保留局部梯度最大的点, 抑制非极大值。 解决方法:利用梯度的方向
Canny 算子:功能比前面几种都要好,但是它实现起来较为麻烦,Canny 算 子是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny 算 子先利用高斯平滑滤波器来平滑图像以除去噪声,Canny 分割算法采用一阶偏导 的有限差分来计算梯度幅值和方向,在处理过程中,Canny 算子还将经过一个非 极大值抑制的过程,最后 Canny 算子还采用两个阈值来连接边缘。 从 Canny 算子的检测结果来看,它对于图像中的纹理丰富的地方和背景处的 边缘, 以及对比度弱的边缘都能得到很好的检出率, 但是对这些边缘点的组织结 构刻画得不是特别细致, 边缘点的位置有小范围的偏差;在大尺度上同样也丢失 了很多细节,只表现出一些轮廓特征。另外,Canny 边缘检测子不容易受到噪声 的干扰,
梯度方向: (1.3) 梯度 G 大于某一阀值则认为该点(x,y)为边缘点 b. Prewitt 边缘检测算子 Prewitt 算子是 3*3算子模板。 图 2 所示的 2 个卷积核 dx 和 dy 形成了 Prewitt 算子。与 Sobel 算子的方法一样,图像中的每个点都用这 2 个核进行卷积。
相关主题