文章目录
一、Canny边缘检测
Canny边缘检测器是一种被广泛使用的算法,并被认为是边缘检测最优的算法,该方法使用了比高斯差分算法更复杂的技巧,如多向灰度梯度和滞后阈值化
步骤
1.平滑图像:使用高斯滤波器与图像进行卷积,平滑图像,以减少边缘检测器上明显的噪声影响。
使用高斯滤波器,以平滑图像,滤除噪声。
2.计算图像的梯度和方向:图像中的边缘可以指向各个方向,这里计算图像的梯度,并将梯度分类为垂直、水平和斜对角。
计算图像中每个像素点的梯度强度和方向。
3.非最大值抑制:利用上一步计算出来的梯度方向,检测某一像素在梯度的正方向和负方向上是否是局部最大值,如果是,则该像素点保留为边缘点,否则该像素点将被抑制。
应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
4.双阈值算法检测和连接边缘:仍然存在由于噪声和颜色变化引起的一些边缘像素。为了解决这些杂散响应,必须用弱梯度值过滤边缘像素,并保留具有高梯度值的边缘像素,可以通过选择高低阈值来实现
应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
5.通过抑制孤立的弱边缘最终完成边缘检测。
1.1高斯滤波器
2.1梯度和方向
3.1非极大值抑制
图像中的边缘可以指向各个方向,这里计算图像的梯度,并将梯度分类为垂直、水平和斜对角。
利用上一步计算出来的梯度方向,检测某一像素在梯度的正方向和负方向上是否是局部最大值,如果是,则该像素点保留为边缘点,否则该像素点将被抑制。
4.1双阈值检测
仍然存在由于噪声和颜色变化引起的一些边缘像素。为了解决这些杂散响应,必须用弱梯度值过滤边缘像素,并保留具有高梯度值的边缘像素,可以通过选择高低阈值来实现
核心代码
img=cv2.imread("lena.jpg",cv2.IMREAD_GRAYSCALE)
# 阈值最小和最大
v1=cv2.Canny(img,80,150)
v2=cv2.Canny(img,50,100)
res = np.hstack((v1,v2))
cv_show(res,'res')
可以从下图看出,阈值小得到的特征比较多
标签:阈值,边缘,梯度,图像,像素,opencv,检测 来源: https://blog.csdn.net/weixin_48167570/article/details/122653632
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。