点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

边缘检测是非常常见和广泛使用的图像处理,对于许多不同的计算机视觉应用非常必要,如数据提取,图像分割,在更细粒度的特征提取和模式识别中。它降低了图像中的噪声和细节数量,但保留了图像的结构。

Python中的Canny边缘检测是计算机视觉中最流行的边缘检测方法之一。以下是Canny边缘检测的步骤:

1.使用高斯平滑来减少噪声

2.计算梯度

3.应用非极大值抑制以减少噪声

4.找到上下阈值

5.应用阈值。

幸运的是,OpenCV库有cv2.canny()函数,可为我们执行Canny边缘检测。

在本文中,我们将直接使用OpenCV执行边缘检测。

import cv2 
import matplotlib.pyplot as plt

我们将使用以下图片进行今天的教程:

1f6dff19b51013ba268c7f3c87165e7d.jpeg

Canny边缘检测的第一步是应用高斯模糊。在模糊之前,将图像转换为灰度也很重要:

image = cv2.imread("meter.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)

现在,我们可以直接将cv2.Canny()方法应用于这个模糊的图像。

很简单。它需要三个参数:图像本身,较低的阈值和较高的阈值。选择这些阈值是棘手的。对于每个图像,这些阈值都将是不同的。

对于此图像,我们将尝试三个不同的范围并观察发生了什么:

wide = cv2.Canny(blurred, 50, 200)
mid = cv2.Canny(blurred, 30, 150)
tight = cv2.Canny(blurred, 210, 250)

在这里,我使用了三种不同类型的范围。在wide中,阈值的值具有宽范围。在mid中,阈值的值在中间范围内,在tight中,阈值的值具有紧密的范围,仅为210到250,非常接近。

为了检查图像,我只保存了这三个图像(wide,mid和tight)。

以下是wide的结果:

e031ffb8f72546f25cad0f7d961def10.jpeg

这是mid范围的结果:

ee52d398b2be5a05009be083bb662db8.jpeg

tight的结果:

d033cb4e0fc429bfac6d5d157bc6602c.jpeg

如果我们注意这三张图片,我相信中等范围给出了更加坚实的边缘。

记住,你不能一概而论这些范围。对于不同的图像,可能需要使用不同的范围。这就是为什么这么棘手的原因。

好消息是,有一些可用的统计技巧可以用来找到下限和上限阈值,而不需要像我们之前看到的试错方法那样。

这是自动边缘检测的函数:

def auto_canny_edge_detection(image, sigma=0.33):
    md = np.median(image)
    lower_value = int(max(0, (1.0-sigma) * md))
    upper_value = int(min(255, (1.0+sigma) * md))
    return cv2.Canny(image, lower_value, upper_value)

在上面的函数中,首先找到图像数组中的中位像素值。然后使用这个中位数和一个常数sigma值,可以找到下限和上限阈值。

这里使用了一个sigma值为0.33。在大多数应用程序中,0.33作为sigma值是有效的。但在某些情况下,如果它不能给出好的结果,请尝试一些其他的sigma值。

这是我们之前创建的模糊图像上使用auto_canny_edge_detection方法的结果:

auto_edge = auto_canny_edge_detection(blurred)
cv2.imwrite("auto.jpg", auto_edge)

这就是auto.jpg的样子:

dc89fa61bf635de931257afe1ee3a68d.jpeg

正如你所看到的,边缘在这里很清晰地出现了,而不需要尝试太多的阈值。

结论

在我看来,自动边缘检测函数为我们提供了最好的结果。

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇


 

6e9f8165255f7c8c5da47ee861aebaf2.jpeg

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐