opencv——Canny边缘检测

1、Canny边缘检测流程

a、使用高斯滤波器,以平滑图像,滤除噪声。
b、计算图像中每个像素点的梯度强度和方向。
c、应用非极大值抑制,以消除边缘检测带来的杂散效应。
d、应用双阈值检测来确定真实的和潜在的边缘。
e、通过抑制孤立的弱边缘最终完成边缘检测。

2、高斯滤波器

a、高斯核模板

opencv——Canny边缘检测_第1张图片

b、高斯滤波计算

opencv——Canny边缘检测_第2张图片

3、梯度和方向

opencv——Canny边缘检测_第3张图片

上面公式中右边的表示水平方向和竖直方向的sobel模板,G表示像素点梯度,表示像素点方向,其中表示像素点水平方向和竖直方向的梯度值。

opencv——Canny边缘检测_第4张图片
opencv——Canny边缘检测_第5张图片

4、非极大值(NMS)抑制

a、线性插值法

假设像素点c的梯度方向为下图的蓝色直线,则该直线与像素的邻近像素点有两个交点dTmp1和dTmp2,但由于该两个点为亚像素点(实际不存在的像素点),因为需要利用线性插值法来进行插值。

opencv——Canny边缘检测_第6张图片

如上图所示,假设的梯度幅值为的梯度幅值为,则dTmp1为,其中

NMS抑制:像素点c如果比dTmp1和dTmp2都大就保留该像素点,否则就会被抑制掉。

b、简便方法

opencv——Canny边缘检测_第7张图片

上面所述中,像素点的梯度方向的交点与哪个方向的邻近像素点最近,就计算哪个方向的梯度幅值。

5、双阈值检测

opencv——Canny边缘检测_第8张图片

上面所述的连有边界是指如果与已确定的边界相连就保留,否则就舍弃。

ps:阈值设定较小则可以显示更加细致的边界信息,但过小则容易产生噪声。

6、Canny代码效果

import cv2
img=cv2.imread("car.jpg",cv2.GRAYSCALE)
v1=cv2.Canny(img,120,250)
v2=cv2.Canny(img,50,100)
res=cv2.hstack((v1,v2))
cv2.imshow("res",res)
cv2.waitKey()
cv2.destroyAllWindows()
opencv——Canny边缘检测_第9张图片

你可能感兴趣的:(opencv,opencv,计算机视觉,人工智能)