边缘检测(edge detection)_Sobel导数 Laplace算子 Canny边缘检测
2014-10-30 21:52
645 查看
边缘检测
什么叫边缘?
"You can easily notice that in an edge, the pixel intensity changes in a notorious way."
边缘就是像素亮度剧烈变化的地方。
怎么检测边缘?
"A good way to express changes is by using derivatives. A high change in gradient indicates a major change in the image."
导数就用来描述变化,梯度变化越大图像改变越多。
一:Sobel算子
(一)理论依据:
假设我们有一副有一维图像,图像中灰度值的跳跃点就是边缘,如图1所示。
图1 一维图像中的边缘为“跳跃点”
图2 对一维图像求导,最高点为边缘点
"locating pixel locations where the gradient is higher than its neighbors (or to generalize, higher than a threshold)."
梯度比邻域像素或者特定阈值大的像素点就是边缘。
(二):Sobel算子
在水平x方向求导:
在竖直y方向求导:
梯度的运算和近似运算公式:
(运算公式)
(近似公式)
也即是说检测过程只需要对分别进行了x和y方向求导的输出图像用近似梯度相加合并得到最终图像。
二:Laplace算子
对上图2再求导得到图3所示的二阶导数图像:
图3 二阶导数
可以看到现在我们一阶导数检测边缘为边缘的地方像素变为0 ,所以我们可以认为从非零到0是一个边缘(图3的左上部分,亮度由暗变亮)同时0到非零是一个边缘(图3 的右下部分,原图是亮度亮由暗)。
也就是说拉普拉斯算子可以检测出双边缘!
【这里推荐一篇博客,可以对这个有较好的解释:http://blog.csdn.net/xiaowei_cqu/article/details/7829481】
三:Canny边缘检测
(一)1996年由John F. Canny提出的Canny边缘检测,是边缘检测算法中的最优良算法。
Canny算法旨在满足三个特性:
低错率:对边缘做出检测,并且不把不是的检测为边缘
高定位性:检测出的边缘和实际边缘位置的距离最小
小响应性:边缘最好只被标识一次
(二)Canny算法的步骤:
1:高斯平滑消去噪声
2:计算梯度的强度(幅值)和方向
A:用一下公式运行一次Sobel算子
B:用一下公式计算幅值和方向
最好能将角度控制在0,45,90,135度左右
3:非极大值抑制
这样除去了不是边缘的像素,留下的是候选的边缘
4:滞后阈值: 最后一步,Canny 使用了滞后阈值,滞后阈值需要两个阈值(高的和低的阈值):
1:如果某一像素位置的梯度超过 高阈值, 该像素被保留为边缘
b.如果某一像素位置的梯度小于 低阈值, 该像素被排除
c.如果某一像素位置的梯度在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。
Canny 推荐的高低阈值比在 2:1 到3:1之间。
什么叫边缘?
"You can easily notice that in an edge, the pixel intensity changes in a notorious way."
边缘就是像素亮度剧烈变化的地方。
怎么检测边缘?
"A good way to express changes is by using derivatives. A high change in gradient indicates a major change in the image."
导数就用来描述变化,梯度变化越大图像改变越多。
一:Sobel算子
(一)理论依据:
假设我们有一副有一维图像,图像中灰度值的跳跃点就是边缘,如图1所示。
图1 一维图像中的边缘为“跳跃点”
图2 对一维图像求导,最高点为边缘点
"locating pixel locations where the gradient is higher than its neighbors (or to generalize, higher than a threshold)."
梯度比邻域像素或者特定阈值大的像素点就是边缘。
(二):Sobel算子
在水平x方向求导:
在竖直y方向求导:
梯度的运算和近似运算公式:
(运算公式)
(近似公式)
也即是说检测过程只需要对分别进行了x和y方向求导的输出图像用近似梯度相加合并得到最终图像。
二:Laplace算子
对上图2再求导得到图3所示的二阶导数图像:
图3 二阶导数
可以看到现在我们一阶导数检测边缘为边缘的地方像素变为0 ,所以我们可以认为从非零到0是一个边缘(图3的左上部分,亮度由暗变亮)同时0到非零是一个边缘(图3 的右下部分,原图是亮度亮由暗)。
也就是说拉普拉斯算子可以检测出双边缘!
【这里推荐一篇博客,可以对这个有较好的解释:http://blog.csdn.net/xiaowei_cqu/article/details/7829481】
三:Canny边缘检测
(一)1996年由John F. Canny提出的Canny边缘检测,是边缘检测算法中的最优良算法。
Canny算法旨在满足三个特性:
低错率:对边缘做出检测,并且不把不是的检测为边缘
高定位性:检测出的边缘和实际边缘位置的距离最小
小响应性:边缘最好只被标识一次
(二)Canny算法的步骤:
1:高斯平滑消去噪声
2:计算梯度的强度(幅值)和方向
A:用一下公式运行一次Sobel算子
B:用一下公式计算幅值和方向
最好能将角度控制在0,45,90,135度左右
3:非极大值抑制
这样除去了不是边缘的像素,留下的是候选的边缘
4:滞后阈值: 最后一步,Canny 使用了滞后阈值,滞后阈值需要两个阈值(高的和低的阈值):
1:如果某一像素位置的梯度超过 高阈值, 该像素被保留为边缘
b.如果某一像素位置的梯度小于 低阈值, 该像素被排除
c.如果某一像素位置的梯度在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。
Canny 推荐的高低阈值比在 2:1 到3:1之间。
相关文章推荐
- OpenCV之imgproc 模块. 图像处理(2)实现自己的线性滤波器 给图像添加边界 Sobel 导数 Laplace 算子 Canny 边缘检测
- 各种边缘检测算法效果对比-差分运算法、Sobel、Scharr、Laplace(拉普拉斯)、Roberts、Canny
- OpenCV笔记:图像边缘检测Sobel,Laplace,Canny
- opencv的Sobel导数、Scharr滤波器、Laplacian算子、Canny边缘检测
- Canny Edge Detection Tutorial(Canny 边缘检测教程)
- 几种边缘检测算子的比较Roberts,Sobel,Prewitt,LOG,Canny
- 图像边缘检测Sobel,Laplace,Canny
- 【opencv学习之二十六】边缘检测算子:Canny,Sobel,Laplacian
- 使用OpenCV对图像作边缘检测(Canny、Sobel、Laplace)
- 13. 用Roberts、Sobel、Prewitt和Laplace算子对一幅灰度图像进行边缘检测。观察异同。
- 边缘检测(Edge Detection)的源代码(需要OPENCV库的支持)
- 边缘检测的各种微分算子比较(Sobel,Robert,Prewitt,Laplacian,Canny)
- canny边缘检测算子
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- canny/Sobel/Laplace边缘检测
- opencv学习(三十二)之图像边缘检测Soble_Laplace_Canny
- OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器
- 边缘检测:canny算子,sobel算子,laplace算子,scharr滤波器