首页 > 编程知识 正文

边缘检测算法,canny算子的边缘检测

时间:2023-05-05 18:50:04 阅读:22067 作者:583

Canny边缘检测是一种非常受欢迎的边缘检测算法,由John Canny于1986年提出。 这是一种多阶段算法,由多个步骤组成。

3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /

我们就事后诸葛亮分析这一步的理由。

1.图像降噪,图像降噪。 已知梯度算子可用于增强图像,本质上通过增强边缘的轮廓来实现,即可以检测边缘。 但是,它们受到噪音的影响很大。 现在,让我们先考虑消除噪音。 因为噪声是灰度变化较大的地方,所以容易被识别为伪边缘。

2.计算图像梯度,计算图像梯度,得到可能的边缘。 正如上一篇关于《图像梯度》的文章所介绍的,计算图像的梯度可以获得图像的边缘。 因为梯度是灰度变化明显的地方,边缘也是灰度变化明显的地方。 当然,这一步只能得到可能的边缘。 因为灰度变化的地方可能是边缘,也可能不是边缘。 在这一步中,有可能是边缘的所有集合。

3.非极大值抑制,不是极大值抑制。 通常,灰度变化的地方很集中。 通过保留局部范围内的梯度方向中灰度变化最大的梯度方向,而不保留其他梯度方向,可以消除大部分问题。 将多个像素宽度的边缘设置为1像素宽度的边缘。 也就是说,“胖端”就是“瘦端”。

4.阈值筛选,双重阈值筛选。 在通过极大值以外的抑制后,还存在很多可能的边缘点,进而设定双重阈值,即低阈值、高阈值)。 当灰度变化大于high时,设定为强边缘像素,当小于low时,进行间隔剔除。 low和high之间的设置是弱边。 进而,如果在该区域内有强的边缘像素则判断为残留,如果没有则判断为去除。

它的目的是只保留强边的轮廓,有些边可能没有闭合。 必须从满足low和high之间的点进行补充,以便边尽可能闭合。

让我们来看看效果:

#导入图像lenna=cv2.im read (images (lenna.png ),0 )图像降噪Lenna=cv2.Gaussianblur(Lenna,(5,5 ),0 ) # cacaran 150 ) cv2.im show (canny )、canny (cv2.wait key ) )在OpenCV中,canny函数本身是图像,因此在实施canny边缘检测时,在canny函数之外进行图像降噪的过程

调整低和高双阈值可以获得不同的边缘效果。

canny=cv2.canny(Lenna,100,200 ) )。

看看有噪音的情况:

#图像lenna=cv2.im read (导入imageslenna _ gauss.png ',0 )图像降噪Lenna=cv2.Gaussianblur(Lenna,(5,)

效果很差呢。 调整高斯模糊核的大小后,效果很快就好了很多。

Lenna=cv2.Gaussianblur(Lenna,(9,9 ),0 ) ) ) ) ) )。

因此,Canny在有噪声的情况下能否正常工作取决于前面的降噪过程。 因此,OpenCV将图像降噪排除在Canny函数之外吧。 你需要自己慎重地调整那个。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。