图像边缘检测小结

边缘是图像中灰度发生急剧变化的区域边界。图像灰度的变化情况可以用图像灰度分布的梯度来表示,数字图像中求导是利用差分近似微分来进行的,实际上常用空域微分算子通过卷积来完成。

一阶导数算子

1)  Roberts算子

Roberts算子是一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘的走向垂直。Roberts操作实际上是求旋转45度两个方向上微分值的和。Roberts算子定位精度高,在水平和垂直方向的效果好,但对噪声敏感。两个卷积核Gx、Gy分别为:

采用1范数衡量梯度的幅度为:

2)  Sobel算子

Sobel算子是一组方向算子,从不同的方向检测边缘。Sobel算子不是简单的求平均再差分,而是加强了中心像素上下左右4个方向像素的权值,运算结果是一副边缘图。Sobel算子通常对灰度渐变和噪声较多的图像处理的比较好。两个卷积核Gx、Gy分别为:

采用范数衡量梯度的幅度为:

3)  Prewitt算子

Prewitt算子是一种边缘样板算子,利用像素点上下左右邻点灰度差,在边缘处达到极值检测边缘,对噪声具有平滑的作用。由于边缘点像素的灰度值与其邻域点的灰度值显著不同,在实际应用中通常采用微分算子和模板匹配的方法检测图像的边缘。Prewitt算子不仅能检测边缘点,而且能抑制噪声的影响,因此对灰度和噪声较多的图像处理得比较好。两个卷积核Gx、Gy分别为:

采用范数衡量梯度的幅度为:

二阶导数算子也可以检测边缘,利用二阶导数算子检测阶梯状边缘需将检测算子与图像卷积并确定过零点。

1)  Laplacian算子

拉普拉斯算子是一种常用的二阶导数算子。实际中可根据二阶导数算子过零点的性质来确定边缘的位置。对于一个连续函数f(x,y),它在位置(x,y)的拉普拉斯值定义如下:

在图像中,计算函数的拉普拉斯值也可借助各种模板实现。这里对模板的基本要求是对应中心像素的系数应是正的,而对应中心像素邻近像素的系数应是负的,且它们的和应该是零。拉普拉斯算子检测方法常常产生双像素边界,而且这个检测方法对图像中的噪声相当敏感,不能检测边缘的方向,所以很少直接使用拉普拉斯算子进行边缘检测。常用的两种模板分别如图所示:

2)  马尔算子

马尔算子是在Laplacian算子的基础上实现的。Laplacian算子对噪声比较敏感,为了减少噪声的影响,可先对图像进行平滑然后再运用Laplacian算子。由于成像时,一个给定的像素点所对应场景点的周围对该点的光强贡献呈高斯分布,所以所进行平滑的函数可以采用高斯加权平滑函数。

拉普拉斯算子与高斯滤波结合在一起,形成LOG算子,也成为拉普拉斯-高斯(Laplacian-Gauss)算子。LOG算子是对Laplacian算子的改进,他需要考虑5*5邻域的处理,从而获得更好的检测效果。

马尔算子的计算如下:

1.  用一个2-D的高斯平滑模板与原图像卷积

2.  计算卷积后拉普拉斯值。

3.  检测拉普拉斯图像的过零点作为边缘点。

3)  Canny算子

Canny算子把边缘检测问题转换为检测单位函数极大值的问题来考虑。他利用高斯模型,借助图像滤波的概念指出一个好的边缘检测算子应该具有3个指标:

1.低失误率,既要少将真的边缘丢弃,也要少将非边缘判为边缘;

2.高位置精度,检测出的边缘应在真正的边界上;

3.单像素边缘,即对每个边缘有唯一的响应,得到的边界为单像素宽。

考虑到上述三个条件,Canny提出了判定边缘检测算子的3个准则:信噪比准则、定位精度准则和单边缘响应准则。

1.  信噪比准则

信噪比越大,提取的边缘质量越高。信噪比SNR定义为:

其中,G(x)代表边缘函数,h(x)代表宽度为W的滤波器的脉冲响应。

2.  定位精度准则

边缘定位的精度L定义如下:

其中,G(x)和h(x)分别是G(x)和h(x)的导数。L越大表明定位精度越高。

3.  单边缘响应准则

为了保证单边缘只有一个响应。检测算子的脉冲响应导数的零交叉点的平均距离D(f)应满足

满足上述三个条件的算子称为Canny算子。Canny边缘检测算法的步骤如下:

(1)用高斯滤波器平滑图像;

(2)用一阶偏导的有限差分来计算梯度的幅值和方向;

(3)对梯度幅值进行非极大值抑制;

(4)用双阈值算法进行检测和链接边缘。

Opencv提供了边缘检测函数有—Canny()、Sobel()、Lapacian()、Scharr()。

Matlab边缘检测函数很简单,仅一个edge()函数就可以搞定,例如:

clear all
clc
close all
%%
I=imread('rice.tif');
J1=edge(I,'roberts');
J2=edge(I,'sobel');
J3=edge(I,'prewitt');
J4=edge(I,'log');
J5=edge(I,'canny');
subplot(231),imshow(I); title('src');
subplot(232),imshow(J1);title('roberts');
subplot(233),imshow(J2);title('sobel');
subplot(234),imshow(J3);title('preitt');
subplot(235),imshow(J4);title('log');
subplot(236),imshow(J5);title('canny');

时间: 2024-11-10 07:47:19

图像边缘检测小结的相关文章

基于matlab的经典图像边缘检测算法

图像边缘检测算法 (1)Robert算子边缘检测 (2)Sobel算子边缘检测 (3)Prewitt算子边缘检测 (4)LOG算子边缘检测 (5)Canny边缘检测 Matlab的实现. 其实还只是掉包侠,一点算法没有写 争取有空用openCV写一遍 I=imread('1.jpg'); I0=rgb2gray(I); subplot(231); imshow(I); BW1=edge(I0,'Roberts',0.16); subplot(232); imshow(BW1); title('R

图像边缘检测--OpenCV之cvCanny函数

图像边缘检测--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 ); image单通道输入图像.edges单通道存储边缘的输出图像threshold1第一个阈值threshold2第二个阈值aperture_sizeSobel 算子内核大小 (见 cvSobel). 函数 cvCa

OpenCV使用Sobel滤波器实现图像边缘检测

纯粹阅读,请移步OpenCV使用Sobel滤波器实现图像边缘检测 效果图 源码 KqwOpenCVFeaturesDemo Sobel滤波器也叫Sobel算子,与Canny边缘检测一样,需要计算像素的灰度梯度,只不过是换用另一种方式. 使用Sobel算子计算边缘的步骤 将图像转为灰度图像 // 原图置灰 Imgproc.cvtColor(src, grayMat, Imgproc.COLOR_BGR2GRAY); 计算水平方向灰度梯度的绝对值 Imgproc.Sobel(grayMat, gra

图像操作小结

花了两天时间弄图像. 今天做一个小结 关于图像操作. 小结 相关类.Drawable  就是一个可画的对象. 官方文档原话是:A Drawable is a general abstraction for "something that can be drawn."Canvas 画布. 官方文档如是说: 用这个类来画一些东西, 前提要有4个基本的部件    1. 一个bitmap用来确定像素. 可以看一下Canvas() 的构造函数, 有三个: Canvas(); Canvas(Bit

OpenCV使用Canny边缘检测器实现图像边缘检测

纯粹阅读,请移步OpenCV使用Canny边缘检测器实现图像边缘检测 效果图 源码 KqwOpenCVFeaturesDemo Canny边缘检测器是一种被广泛使用的算法,并被认为是边缘检测最优的算法,该方法使用了比高斯差分算法更复杂的技巧,如多向灰度梯度和滞后阈值化. Canny边缘检测器算法基本步骤 平滑图像:通过使用合适的模糊半径执行高斯模糊来减少图像内的噪声. 计算图像的梯度:这里计算图像的梯度,并将梯度分类为垂直.水平和斜对角.这一步的输出用于在下一步中计算真正的边缘. 非最大值抑制:

OpenCV高斯差分技术实现图像边缘检测

纯粹阅读,请移步OpenCV高斯差分技术实现图像边缘检测 效果图 源码 KqwOpenCVFeaturesDemo 边缘是图像中像素亮度变化明显的点. 高斯差分算法步骤 将图像转为灰度图像 // 原图置灰 Imgproc.cvtColor(src, grayMat, Imgproc.COLOR_BGR2GRAY); 用两个不同的模糊半径对灰度图像执行高斯模糊(取得两幅高斯模糊图像) // 以两个不同的模糊半径对图像做模糊处理 Imgproc.GaussianBlur(grayMat, blur1

OpenCV3入门(八)图像边缘检测

1.边缘检测基础 图像的边缘是图像的基本特征,边缘点是灰度阶跃变化的像素点,即灰度值的导数较大或极大的地方,边缘检测是图像识别的第一步.用图像的一阶微分和二阶微分来增强图像的灰度跳变,而边缘也就是灰度变化的地方.因此,这些传统的一阶微分算子如Robert.Sobel.prewitt等,以及二阶微分算子Laplacian等等本质上都是可以用于检测边缘的.这些算子都可以称为边缘检测算子. 边缘检测可以大幅度的减少数据量,剔除那些不相关的信息,保留图像重要的结构属性,一般的边缘检测的步骤有: 1)滤波

基于 FPGA 的图像边缘检测

本文主要内容是实现图像的边缘检测功能 目录 mif文件的制作 调用 ip 核生成rom以及在 questasim 仿真注意问题 灰度处理 均值滤波 sobel边缘检测 图片的显示 结果展示 mif文件的制作 受资源限制,将图片像素定为 160 * 120,将图片数据制成 mif 文件,对 rom ip 核进行初始化.mif文件的制作方法网上有好多办法,因此就不再叙述了,重点说mif文件的格式. 1.mif文件的格式为: 1 WIDTH=16 ; //数据位宽 2 DEPTH=19200 ; //

图像边缘检测——Sobel算子

边缘是图像最基本的特征,其在计算机视觉.图像分析等应用中起着重要的作用,这是因为图像的边缘包含了用于识别的有用信息,是图像分析和模式识别的主要特征提取手段. 1.何为“图像边缘”? 在图像中,“边缘”指的是临界的意思.一幅图像的“临界”表示为图像上亮度显著变化的地方,边缘指的是一个区域的结束,也是另一个区域的开始.“边缘点”指的是图像中具有坐标[x,y],且处在强度显著变化的位置上的点. 2.如何表示边缘检测? 在数学上,用导数来表示改变的快慢.基于此,有许多方法用于边缘检测,他们绝大部分可以划