Canny边缘检测
作者:互联网
Canny边缘检测
- 使用高斯滤波器,以平滑图像,滤除噪声。
- 计算图像中每个像素点的梯度强度和方向。
- 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
- 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
- 通过抑制孤立的弱边缘最终完成边缘检测。
- 高斯滤波器
- 梯度和方向
- 非极大值抑制
在理解的过程中需要注意以下两点:
1.非极大抑制是回答这样一个问题:“当前的梯度值在梯度方向上是一个局部最大值吗?“。所以,要把当前位置的梯度值与梯度方向上两侧的梯度值进行比较。
2.梯度方向垂直于边缘方向。但实际上,我们只能得到C点邻域的8个点的值,而dTmp1和dTmp2并不在其中,要得到这两个值就需要对该两个点两端的已知灰度进行线性插值,也即根据图中的g1和g2对dTmp1进行插值,根据g3和g4对dTmp2进行插值,这要用到其梯度方向,这是Canny算法中要求解梯度方向矩阵Thita的原因。完成非极大值抑制后,会得到一个二值图像,非边缘的点灰度值均为0,可能为边缘的局部灰度极大值点可设置其灰度为128。检测结果还是包含了很多由噪声及其他原因造成的假边缘。因此还需要进一步的处理。
非极大值抑制中有两种方法。 方法一:线性插值法
方法二:
- 双阈值检测
import cv2 as cv import numpy as np img = cv.imread('lena.jpg', cv.IMREAD_GRAYSCALE) c = cv.Canny(img, 80, 150) cv.imshow('c', c) cv.waitKey(0) cv.destroyAllWindows()
其中, c = cv.Canny(img, 80, 150) 后面两个数字表示双阈值检测中的最大值和最小值,适当的调整,可以改变检测结果。
标签:检测,梯度方向,边缘,极大值,灰度,Canny,cv 来源: https://www.cnblogs.com/missdx/p/12374255.html