一、Canny 边缘检测
canny 边缘检测五个流程:
- 使用高斯滤波器,用以平滑图像,滤除噪声。
- 计算每个像素点的梯度强度和方向。
- 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测中带来的杂散响应。
- 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
- 通过抑制孤立的弱边缘最终完成边缘检测。
(1)高斯滤波器
(2)梯度和方向
用的是上一节中的Sobel算子。
(3)非极大值抑制(Non-Maximum Suppression)
非极大值抑制(NMS):找到局部极大值,并抑制领域内的其他值。
应用方向:边缘检测,人脸检测,目标检测(DPM,YOLO,SSD,Faster R-CNN)等领域。
以目标检测为例,同一目标位置上会出现很多的候选框,并且每个候选框有一个置信度得分(confidence score),我们根据
最大的置信度分数确定最终的候选框。
(i)线性插值法
(ii)简化方法
(4)双阈值检测(Double-Threshold)
在实际的应用中,我们可以根据实际情况来调节 最大阈值 和 最小阈值,以期望获得最终的目的。
如果最小阈值过小,会导致噪音也被选中,导致结果驳杂。
如果最大阈值过大,会导致实际的边界被丢弃,影响效果。
二、代码示例
img_canny = cv2.Canny(img,threshold1=minval,threshold2=maxval)
minval 对应于双阈值检测中的最小阈值;
maxval 对应着双阈值检测中的最大阈值;
import cv2
img = cv2.imread('lena1.jpg',cv2.IMREAD_GRAYSCALE)
img_c = cv2.Canny(img,threshold1=30,threshold2=150)
cv2.imshow('img',img_c)
cv2.waitKey(0)
cv2.destroyWindow()
|