边缘检测-Canny
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相关推荐
- OpenCV——边缘检测Canny算子
边缘检测Canny算子 该算法不容易受到噪声的影响,能够识别图像中的弱边缘和强边缘,并结合强弱边缘的位置关系,综和给出图像整体的边缘信息.Canny边缘检测算法是目前最优越的边缘检测算法之一,该方法的 ...
- Android OpenCV 边缘检测 Canny 的使用
先看下实现的效果图 下面看下代码使用 Canny(Mat image, Mat edges, double threshold1, double threshold2, int apertureSiz ...
- OpenCV3学习(6.1)——边缘检测---Canny,Sobel,Prewitt,Robert,Laplace,LOG,DOG算子
图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...
- opencv 图像边缘检测 Canny边缘检测算法使用
图解边缘检测 opencv 应用Canny算法进行边缘检测 import cv2 as cv import numpy as npimg = cv.imread('baby_g.jpg', 0) # ...
- java边缘检测算子代码_图像边缘检测(Canny 算法)的Java实现
快速排序 一. 算法描述 快速排序是对冒泡排序的一种改进.在冒泡排序中,记录每次都是与相邻位置上的数据作比较,因此每次只能移动一个位置.而在快速排序中,记录的比较和移动都是从两端向中间进行的. 其主要 ...
- 图像边缘检测 Canny边缘检测
底下有详细代码 一.介绍 1.图像检测的原理. 图像检测的原理是检测相邻的几个点像素值之间的变化率,相对于对函数求导.求点P(x,y)的变换率,可以在点P周围选取一些点,求x方向的距离Gx,再求y方向 ...
- matlab彩色图像边缘检测,canny算法实现彩色图像边缘检测
该程序将原始图像转换到YCbCr颜色空间,查找彩色图像的边缘.使用了canny算法进行边缘检测. YCbCr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片 ...
- 图像边缘检测(canny检测附完整代码与输出样例)
首先通过用高斯核对输入图像进行卷积来平滑输入图像. 大小为(2k+1) × (2k+1)的高斯核的方程由下式给出: 导入所需模块: from __future__ import print_funct ...
- 边缘检测 - Canny算子
一. Canny 算法简介 Canny边缘检测算子是 John F.Canny 于 1986 年开发出来的一个多级边缘检测算法.更为重要的是,Canny 创立了边缘检测计算理论(Computation ...
- opencv-5 边缘检测Canny和sober
#include<opencv.hpp> #include<highgui.hpp> using namespace std; using namespace cv; /* 在 ...
最新文章
- 让文本垂直居中的几个方法
- java的reflection
- ssl mybatis实现数据库字段的加解密
- Intel Realsense 图像投影(Projection)翻译
- JVM类加载(2)—连接
- 五年了,别再把务虚会开 “虚” 了
- html 旋转木马 轮播,JS实现旋转木马式图片轮播效果
- 谷歌浏览器下载的文件保存在哪里?
- 关于“我的藏书阁:.NET/数据库应用开发”的几点看法。
- 删除virtual bridge
- React:Hook
- 数据血缘关系图 工具_MCGS组态软件实现数据报表
- 中国AI专利申请数超美国近2.5倍
- 厚着脸皮求领导写了一篇java小白进阶大牛之路!!!
- 管理信息系统需求调研分析指南
- u-boot编译构成之 MLO(1)
- (转)A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
- 目前计算机常用的硬盘类型,干货大放送,电脑硬盘分类你知道几个?
- 1.3 nest.js使用supertest单元测试及e2e测试
- 嗨!Java Coder,考考你们看代码的眼力