Canny发现,在不同视觉系统上对边缘检测的要求较为类似,因此,可以实现一种具有广泛应用意义的边缘检测技术。

边缘检测的一般标准:

1)        低错误率:尽可能准确的捕获图像中尽可能多的边缘。

2)        高定位性:检测到的边缘应精确定位在真实边缘的中心。

3)        最小相应:图像中边缘只被标记一次,并且在可能的情况下,图像的噪声不应产生假的边缘。(canny最明显的特点 检测出来的边缘不会很粗)

Canny边缘检测算法步骤:

1)        图像降噪:使用高斯滤波器,以平滑图像,滤除噪声。

2)        计算每个像素点的梯度强度和方向。

3)        非极大值抑制:实现最小相应的手段

4)        双阈值筛选:应用双阈值检测来确定真实的和潜在的边缘。https://www.bilibili.com/video/BV13i4y187Ay?from=search&seid=16765896431854409294 34min处

5)        抑制孤立的弱边缘。

步骤缘由:

首先,图像降噪。梯度算子可以用于增强图像,本质上是通过增强边缘轮廓来实现的,也就是说是可以检测到边缘的。但是,它们受噪声的影响都很大。那么我们就要先去除噪声,因为噪声就是灰度变化很大的地方,容易被识别为伪边缘。

第二步,计算图像梯度,得到可能边缘。计算图像梯度能够得到图像的边缘,因为梯度是灰度变化明显的地方,而边缘也是灰度变化明显的地方。当然这一步只能得到可能的边缘。因为灰度变化的地方可能是边缘,也可能不是边缘。这一步就有了所有可能是边缘的集合。

第三步,非极大值抑制。通常灰度变化的地方都比较集中,将局部范围内的梯度方向上,灰度变化最大的保留下来,其它的不保留,这样可以剔除掉一大部分的点。将有多个像素宽的边缘变成一个单像素宽的边缘。即“胖边缘”变成“瘦边缘”。

第四步,双阈值筛选。通过非极大值抑制后,仍然有很多的可能边缘点,进一步的设置一个双阈值,即低阈值,高阈值。灰度变化大于high的,设置为强边缘像素,低于low的,剔除。在low和high之间的设置为弱边缘。进一步判断,如果其领域内有强边缘像素,保留,如果没有,剔除。

这样做的目的是只保留强边缘轮廓的话,有些边缘可能不闭合,需要从满足low和high之间的点进行补充,使得边缘尽可能的闭合。

参考博文:https://blog.csdn.net/saltriver/article/details/80545571

每个步骤具体见博文:https://www.cnblogs.com/techyan1990/p/7291771.html

步骤讲解的视频资料:https://www.bilibili.com/video/BV1U4411277i

code

import cv2
lenna = cv2.imread(r"C:\Users\Administrator\Desktop\picture2.png", 0)
lenna = cv2.GaussianBlur(lenna, (5, 5), 0) # 图像降噪
canny = cv2.Canny(lenna, 50, 150) # 设置阈值
cv2.imshow("canny", canny)
cv2.waitKey()
 

canny = cv2.Canny(lenna, 50, 150)
# Canny边缘检测,50为低阈值low,150为高阈值high
# 小于前面这个数值的 大于后面数值的 都不要
# 前面一个数字越小 线条越多
# 后面一个数字越小 线条越多

边缘检测-Canny相关推荐

  1. OpenCV——边缘检测Canny算子

    边缘检测Canny算子 该算法不容易受到噪声的影响,能够识别图像中的弱边缘和强边缘,并结合强弱边缘的位置关系,综和给出图像整体的边缘信息.Canny边缘检测算法是目前最优越的边缘检测算法之一,该方法的 ...

  2. Android OpenCV 边缘检测 Canny 的使用

    先看下实现的效果图 下面看下代码使用 Canny(Mat image, Mat edges, double threshold1, double threshold2, int apertureSiz ...

  3. OpenCV3学习(6.1)——边缘检测---Canny,Sobel,Prewitt,Robert,Laplace,LOG,DOG算子

    图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...

  4. opencv 图像边缘检测 Canny边缘检测算法使用

    图解边缘检测 opencv 应用Canny算法进行边缘检测 import cv2 as cv import numpy as npimg = cv.imread('baby_g.jpg', 0) # ...

  5. java边缘检测算子代码_图像边缘检测(Canny 算法)的Java实现

    快速排序 一. 算法描述 快速排序是对冒泡排序的一种改进.在冒泡排序中,记录每次都是与相邻位置上的数据作比较,因此每次只能移动一个位置.而在快速排序中,记录的比较和移动都是从两端向中间进行的. 其主要 ...

  6. 图像边缘检测 Canny边缘检测

    底下有详细代码 一.介绍 1.图像检测的原理. 图像检测的原理是检测相邻的几个点像素值之间的变化率,相对于对函数求导.求点P(x,y)的变换率,可以在点P周围选取一些点,求x方向的距离Gx,再求y方向 ...

  7. matlab彩色图像边缘检测,canny算法实现彩色图像边缘检测

    该程序将原始图像转换到YCbCr颜色空间,查找彩色图像的边缘.使用了canny算法进行边缘检测. YCbCr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片 ...

  8. 图像边缘检测(canny检测附完整代码与输出样例)

    首先通过用高斯核对输入图像进行卷积来平滑输入图像. 大小为(2k+1) × (2k+1)的高斯核的方程由下式给出: 导入所需模块: from __future__ import print_funct ...

  9. 边缘检测 - Canny算子

    一. Canny 算法简介 Canny边缘检测算子是 John F.Canny 于 1986 年开发出来的一个多级边缘检测算法.更为重要的是,Canny 创立了边缘检测计算理论(Computation ...

  10. opencv-5 边缘检测Canny和sober

    #include<opencv.hpp> #include<highgui.hpp> using namespace std; using namespace cv; /* 在 ...

最新文章

  1. 让文本垂直居中的几个方法
  2. java的reflection
  3. ssl mybatis实现数据库字段的加解密
  4. Intel Realsense 图像投影(Projection)翻译
  5. JVM类加载(2)—连接
  6. 五年了,别再把务虚会开 “虚” 了
  7. html 旋转木马 轮播,JS实现旋转木马式图片轮播效果
  8. 谷歌浏览器下载的文件保存在哪里?
  9. 关于“我的藏书阁:.NET/数据库应用开发”的几点看法。
  10. 删除virtual bridge
  11. React:Hook
  12. 数据血缘关系图 工具_MCGS组态软件实现数据报表
  13. 中国AI专利申请数超美国近2.5倍
  14. 厚着脸皮求领导写了一篇java小白进阶大牛之路!!!
  15. 管理信息系统需求调研分析指南
  16. u-boot编译构成之 MLO(1)
  17. (转)A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
  18. 目前计算机常用的硬盘类型,干货大放送,电脑硬盘分类你知道几个?
  19. 1.3 nest.js使用supertest单元测试及e2e测试
  20. 嗨!Java Coder,考考你们看代码的眼力

热门文章

  1. ACM 6174问题C++解决
  2. 腾讯校招20道选择题含答案
  3. 5.15java例题:水仙花 奇偶数 三个和尚 求和 偶数求和 两只老虎 逢七过 减肥案例
  4. 发邮件+实习+简历+
  5. 阳历和农历互相转换的js代码
  6. Dell R740服务器新版Raid设置图文教程
  7. 【贪玩巴斯】每日一练——《力扣:LeetCode 算法入门》(C++)——「存在重复元素」
  8. Android应用快捷方式
  9. 免费听歌下载歌曲的几个网站
  10. echarts字体大小自适应