Canny边缘检测
Canny的目标就是找到一个最优的边缘检测算法,具体含义:
1.最优检测:算法能够尽可能多地标识出图像中的实际边缘,漏检真实边缘的概率和误检非边缘的概率都尽可能小
2.最优定位准则:检测到的边缘点的位置距离实际边缘点的位置最近,或者是由于噪声影响引起检测出的边缘偏离物体的真实边缘的程度最小
3.检测点与边缘点一一对应:算子检测的边缘点与实际边缘点应该是一一对应
边缘检测的步骤:
1.使用高斯滤波,以平滑图像:降噪后,再做边缘检测,检测边缘一般用求梯度的方法计算,而求梯度时要先考虑把噪声处理掉。
经归一化处理得到H
2.计算图像中每个像素点的梯度强度和方向:可用Sobel算子计算x和y方向的梯度
3.应用非极大值抑制,以消除边缘检测带来的杂散效应:算完梯度之后,需要保留梯度最明显的,所以做非极大值抑制。比如检测一个目标,假设是只猫,有时候看半只猫的图片也能看出这是一只猫,但是如果看全部的话,置信度是不一样的,所以取最大的那一个就显得比较重要了
4.利用双阈值检测来确定真实的和潜在的边缘:
5.通过抑制孤立的弱边缘,最终完成边缘检测
1 import cv2 2 import numpy as np 3 4 img = cv2.imread('default.png', cv2.IMREAD_GRAYSCALE) 5 v1 = cv2.Canny(img, 80, 150) 6 v2 = cv2.Canny(img, 50, 100) 7 res = np.hstack((v1, v2)) 8 cv2.imshow('test', res) 9 cv2.waitKey(0) 10 cv2.destroyAllWindows()