1-边缘检测-sobel等.ppt
- 格式:ppt
- 大小:1.66 MB
- 文档页数:10
经典边缘检测算子比较一各种经典边缘检测算子原理简介图像的边缘对人的视觉具有重要的意义,一般而言,当人们看一个有边缘的物体时,首先感觉到的便是边缘。
灰度或结构等信息的突变处称为边缘。
边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。
需要指出的是,检测出的边缘并不等同于实际目标的真实边缘。
由于图像数据时二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失,再加上成像过程中的光照不均和噪声等因素的影响,使得有边缘的地方不一定能被检测出来,而检测出的边缘也不一定代表实际边缘。
图像的边缘有方向和幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈。
边缘上的这种变化可以用微分算子检测出来,通常用一阶或两阶导数来检测边缘,如下图所以。
不同的是一阶导数认为最大值对应边缘位置,而二阶导数则以过零点对应边缘位置。
(a )图像灰度变化(b )一阶导数(c )二阶导数基于一阶导数的边缘检测算子包括Roberts 算子、Sobel 算子、Prewitt 算子等,在算法实现过程中,通过22⨯(Roberts 算子)或者33⨯模板作为核与图像中的每个像素点做卷积和运算,然后选取合适的阈值以提取边缘。
拉普拉斯边缘检测算子是基于二阶导数的边缘检测算子,该算子对噪声敏感。
一种改进方式是先对图像进行平滑处理,然后再应用二阶导数的边缘检测算子,其代表是LOG 算子。
前边介绍的边缘检测算子法是基于微分方法的,其依据是图像的边缘对应一阶导数的极大值点和二阶导数的过零点。
Canny 算子是另外一类边缘检测算子,它不是通过微分算子检测边缘,而是在满足一定约束条件下推导出的边缘检测最优化算子。
1 Roberts (罗伯特)边缘检测算子景物的边缘总是以图像中强度的突变形式出现的,所以景物边缘包含着大量的信息。
由于景物的边缘具有十分复杂的形态,因此,最常用的边缘检测方法是所谓的“梯度检测法”。
设(,)f x y 是图像灰度分布函数;(,)s x y 是图像边缘的梯度值;(,)x y ϕ是梯度的方向。
Sobel边缘检测Sobel算⼦:[-1 0 1-2 0 2-1 0 1]⽤此算⼦与原图像做卷积,可以检测出垂直⽅向的边缘。
算⼦作⽤在图像的第⼆列,结果是:200,200,200;作⽤在第三列,结果是:200,200,200;边缘 – 是像素值发⽣跃迁的地⽅(变化率最⼤处,导数最⼤处),是图像的显著特征之⼀,在图像特征提取、对象检测、模式识别等⽅⾯都有重要的作⽤。
Sobel算⼦和Scharr算⼦(1)Sobel算⼦:是离散微分算⼦(discrete differentiation operator),⽤来计算图像灰度的近似梯度,梯度越⼤越有可能是边缘。
Soble算⼦的功能集合了⾼斯平滑和微分求导,⼜被称为⼀阶微分算⼦,求导算⼦,在⽔平和垂直两个⽅向上求导,得到的是图像在X⽅法与Y⽅向梯度图像。
缺点:⽐较敏感,容易受影响,要通过⾼斯模糊(平滑)来降噪。
算⼦是通过权重不同来扩⼤差异。
梯度计算:(在两个⽅向求导,假设被作⽤图像为 I)⽔平变化: 将 I 与⼀个奇数⼤⼩的内核 Gx进⾏卷积。
⽐如,当内核⼤⼩为3时, Gx的计算结果为:垂直变化: 将 I 与⼀个奇数⼤⼩的内核 Gy进⾏卷积。
⽐如,当内核⼤⼩为3时, Gy的计算结果为:在图像的每⼀点,结合以上两个结果求出近似梯度:有时也⽤下⾯更简单公式代替,计算速度快:(最终图像梯度)。
(2)Scharr:当内核⼤⼩为3时, 以上Sobel内核可能产⽣⽐较明显的误差(毕竟,Sobel算⼦只是求取了导数的近似值)。
为解决这⼀问题,OpenCV提供了 Scharr 函数,但该函数仅作⽤于⼤⼩为3的内核。
该函数的运算与Sobel函数⼀样快,但结果却更加精确,不怕⼲扰,其内核为:(3)Sobel/Scharr提取边缘(求导)步骤:1)⾼斯模糊平滑降噪:GaussianBlur( src, dst, Size(3,3), 0, 0, BORDER_DEFAULT ); 2)转灰度:cvtColor( src, gray, COLOR_RGB2GRAY );3)求X和Y⽅向的梯度(求导):Sobel(gray_src, xgrad, CV_16S, 1, 0, 3);Sobel(gray_src, ygrad, CV_16S, 0, 1, 3);Scharr(gray_src, xgrad, CV_16S, 1, 0);Scharr(gray_src, ygrad, CV_16S, 0, 1);4)像素取绝对值:convertScaleAbs(A, B); //计算图像A的像素绝对值,输出到图像B5)相加X和Y,得到综合梯度,称为振幅图像:addWeighted( A, 0.5,B, 0.5, 0, AB); //混合权重相加,效果较差或者循环获取像素,每个点直接相加,效果更好。
经典边缘检测算子比较一 各种经典边缘检测算子原理简介图像的边缘对人的视觉具有重要的意义,一般而言,当人们看一个有边缘的物体时,首先感觉到的便是边缘。
灰度或结构等信息的突变处称为边缘。
边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。
需要指出的是,检测出的边缘并不等同于实际目标的真实边缘。
由于图像数据时二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失,再加上成像过程中的光照不均和噪声等因素的影响,使得有边缘的地方不一定能被检测出来,而检测出的边缘也不一定代表实际边缘。
图像的边缘有方向和幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈。
边缘上的这种变化可以用微分算子检测出来,通常用一阶或两阶导数来检测边缘,如下图所以。
不同的是一阶导数认为最大值对应边缘位置,而二阶导数则以过零点对应边缘位置。
(a )图像灰度变化 (b )一阶导数 (c )二阶导数基于一阶导数的边缘检测算子包括Roberts 算子、Sobel 算子、Prewitt 算子等,在算法实现过程中,通过22⨯(Roberts 算子)或者33⨯模板作为核与图像中的每个像素点做卷积和运算,然后选取合适的阈值以提取边缘。
拉普拉斯边缘检测算子是基于二阶导数的边缘检测算子,该算子对噪声敏感。
一种改进方式是先对图像进行平滑处理,然后再应用二阶导数的边缘检测算子,其代表是LOG 算子。
前边介绍的边缘检测算子法是基于微分方法的,其依据是图像的边缘对应一阶导数的极大值点和二阶导数的过零点。
Canny 算子是另外一类边缘检测算子,它不是通过微分算子检测边缘,而是在满足一定约束条件下推导出的边缘检测最优化算子。
1 Roberts (罗伯特)边缘检测算子景物的边缘总是以图像中强度的突变形式出现的,所以景物边缘包含着大量的信息。
由于景物的边缘具有十分复杂的形态,因此,最常用的边缘检测方法是所谓的“梯度检测法”。
设(,)f x y 是图像灰度分布函数;(,)s x y 是图像边缘的梯度值;(,)x y ϕ是梯度的方向。
Sobel算⼦的边缘检测实现同上⼀篇,还是为了体现FPGA的强⼤功能,实现实时的边缘检测能⼒!这⼀部分简单的可以⽤Sobel实现,如果想做的好,可以⽤⾼斯+Canny来实现,总是,只要你想做,FPGA没有什么做不到的,只要你静得下⼼来以下仅仅介绍Soebl算法的Matlab算法实现,希望⼤家各⾃努⼒!1. Sobel算⼦的边缘检测实现1.1. 边缘检测概念所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征。
边缘存在于⽬标、背景和区域之间,所以,它是图像分割所依赖的最重要的依据。
由于边缘是位置的标志,对灰度的变化不敏感,,因此,边缘也是图像匹配的重要的特征。
边缘检测和区域划分是图像分割的两种不同的⽅法,⼆者具有相互补充的特点。
在边缘检测中,是提取图像中不连续部分的特征,根据闭合的边缘确定区域。
⽽在区域划分中,是把图像分割成特征相同的区域,区域之间的边界就是边缘。
由于边缘检测⽅法不需要将图像逐个像素地分割,因此更适合⼤图像的分割。
边缘⼤致可以分为两种,⼀种是阶跃状边缘,边缘两边像素的灰度值明显不同;另⼀种为屋顶状边缘,边缘处于灰度值由⼩到⼤再到⼩的变化转折点处。
边缘检测的主要⼯具是边缘检测模板。
边缘检测的有很多,典型的有索贝尔算⼦,普⾥维特算⼦,罗伯茨交叉边缘检测等边缘检测技术,在Matlab中有现成的IPT函数,提供边缘检测,如下,Sobel边缘检测:IMG1 = imread('D:\Matlab_Project\BMP\Lenna.jpg'); % 读取RGB⽂件,Lanna PlayBoysubplot(1,3,1)imshow(IMG1);title('原图像');IMG1 = rgb2gray(IMG1);[m,n] = size(IMG1); %⽤Sobel微分算⼦进⾏边缘检测IMG2 = edge(IMG1,'sobel');subplot(1,3,2);imshow(IMG2);title('Sobel边缘检测得到的图像');但效果不佳,灵活性也不⾼。