【Opencv入门到项目实践】(五):边缘检测

边缘检测

在上一篇文章中,我们介绍了图像的梯度结算来检测图像边缘,但是我们之前只是检验了大小,不知道具体方向。

使用Canny边缘检测是一种经典而有效的边缘检测算法,Canny边缘检测算法包括以下五大步骤:

1.使用高斯滤波器,以平滑图像,滤除噪声

首先,对待处理的图像进行高斯滤波以降低噪声的影响。高斯滤波器可以平滑图像并减少局部变化的影响。这里和我们之前在平滑处理中介绍的一样,这里使用的高斯滤波器是归一化后的,具体如下:

然后根据这个滤波器,我们就可以计算每一个像素经过高斯平滑后的值

2.计算图像中每个像素点的梯度强度和方向

在经过高斯滤波后的图像上,使用Sobel算子或其他梯度算子计算图像的梯度大小和方向,表示图像中每个像素的灰度变化率和方向。

  • 在水平方向上计算梯度
  • 在垂直方向上计算梯度

两个方向的Sobel算子如下:

两个方向梯度计算结果如下:

  • 计算梯度幅值和方向:根据水平和垂直梯度计算每个像素的梯度幅值和方向。

这里和我们之前介绍的图像梯度计算中,多了一个方向,我们用​来表示:

3.应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。

对于每个像素,判断其是否为边缘像素。具体做法是检查梯度幅值沿着梯度方向上的两侧像素,如果当前像素的梯度幅值最大,则将其保留为边缘像素,否则将其抑制为非边缘像素。

4.应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘

根据设定的高阈值和低阈值,对经过非极大值抑制的图像进行分类。如果像素的梯度幅值高于高阈值,则将其确定为强边缘像素;如果像素的梯度幅值低于低阈值,则将其确定为弱边缘像素;如果像素的梯度幅值介于低阈值和高阈值之间,则根据其是否与强边缘像素相连来确定其是否为边缘像素。具体如下图所示

5.通过抑制孤立的弱边缘最终完成边缘检测

Canny边缘检测算法通过上述步骤,能够在图像中准确地检测到边缘,并且能够剔除噪声和细小的边缘。由于其高精度和可调节的参数,Canny边缘检测广泛应用于图像处理、计算机视觉和模式识别等领域。

下面我们调用Opencv中的cv2.Canny()函数实现,具体代码格式如下:

ini 复制代码
edges = cv2.Canny(img, threshold1, threshold2)

其中,threshold1threshold2是用于双阈值检测的阈值参数。通常,我们设定threshold1的值应该是threshold2的一半或者是三分之一。

我们现在来讨论一下这两个参数的影响,当minval设置的越小,我们能检测到的边缘就越多,当maxval设置的越大,我们能检测到的边缘就越少。

因此,在实际应用中,我们要根据自己的需求进行调整。下面我们来看一个具体的例子,还是使用小狗洋气的照片,我们将两组阈值分别设为80,160和50,100,看一下他们的区别

scss 复制代码
import cv2
​
def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()
    
img=cv2.imread("yangqi.jpg",cv2.IMREAD_GRAYSCALE)
​
v1=cv2.Canny(img,80,160) 
v2=cv2.Canny(img,50,100)
​
res = np.hstack((v1,v2)) #将图片水平堆砌
cv_show(res,'res')
​

我们对比一下两张图:

  • 左边阈值为:80,160
  • 右边阈值为:50,100

可以看到右边这张图检测到的边缘更多。

相关推荐
数字时代全景窗5 分钟前
从App时代到智能体时代,如何打破“三堵墙”
人工智能·软件工程
weixin_469163698 分钟前
金融科技项目管理方式在AI加持下发展方向之,需求分析精准化减少业务与技术偏差
人工智能·科技·金融·项目管理·需求管理
老蒋新思维26 分钟前
借陈修超之智,搭建 AI 与 IP 的创新增长桥梁|创客匠人
网络·人工智能·网络协议·tcp/ip·ip·知识付费·创客匠人
点PY36 分钟前
TR3D: Towards Real-Time Indoor 3D Object Detection论文精读
人工智能·目标检测·3d
九年义务漏网鲨鱼1 小时前
【大模型面经】千问系列专题面经
人工智能·深度学习·算法·大模型·强化学习
北京耐用通信1 小时前
“耐达讯自动化Profibus总线光端机在化工变频泵控制系统中的应用与价值解析”
人工智能·科技·物联网·网络安全·自动化·信息与通信
2401_865854881 小时前
AI软件可以帮助我自动化哪些日常任务?
运维·人工智能·自动化
WWZZ20252 小时前
快速上手大模型:深度学习7(实践:卷积层)
人工智能·深度学习·算法·机器人·大模型·卷积神经网络·具身智能
简佐义的博客2 小时前
Genome Biol. IF 9.4 Q1 | ATAC-seq 数据分析实用指南,根据本文就可以构建ATAC生信分析流程了
人工智能
老蒋新思维3 小时前
陈修超入局:解锁 AI 与 IP 融合的创新增长密码
网络·人工智能·网络协议·tcp/ip·企业管理·知识付费·创客匠人