CV12 Canny边缘检测原理

简介: 高级卷积核。Sobel算子是高斯平滑加微分运算的联合运算,因此它更抗噪声。可以指定要采用的导数方向,垂直或水平(分别通过参数yorder和xorder)。还可以通过参数ksize指定内核的大小。如果ksize = -1 ,则使用3x3 Scharr滤波器,比3x3 Sobel滤波器具有更好的结果。

国内Python库的镜像网站


清华https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:http://pypi.hustunique.com/

山东理工大学:http://pypi.sdutlinux.org/

豆瓣:http://pypi.douban.com/simple/

边缘检测原理


实现图像的边缘检测,就是要用离散化梯度逼近函数根据二维灰度矩阵梯度向量来寻找图像灰度矩阵的灰度跃变位置,然后在图像中将这些位置的点连起来就构成了所谓的图像边缘(图像边缘在这里是一个统称,包括了二维图像上的边缘、角点、纹理等基元图)


图像梯度


Sobel 和 Scharr 算子


高级卷积核。Sobel算子是高斯平滑加微分运算的联合运算,因此它更抗噪声。可以指定要采用的导数方向,垂直或水平(分别通过参数yorder和xorder)。还可以通过参数ksize指定内核的大小。如果ksize = -1 ,则使用3x3 Scharr滤波器,比3x3 Sobel滤波器具有更好的结果。


边缘检测具体步骤


1.滤波:边缘检测的算法主要是基于图像强度的一阶导数和二阶导数。OpenCV提供了许多边缘搜索滤波器(包括Laplacian,Sobel和Scharr),这些滤波器将非边缘的区域变为黑色,将边缘区域变为白色,但它们容易把噪点误认为边缘。所以为了消除噪点对我们边缘检测的效果,我们需要对图像进行滤波。


2.增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来。在具体编程实现时,可通过计算梯度幅值来确定


3.检测:经过增强的图像,往往邻域中有很多点的梯度值比较大,而在特定的应用中,这些点并不是我们要找的边缘点,所以应该采用某种方法来对这些点进行取舍。实际工程中,常用的方法是通过阈值化方法来检测。


基于Canny的边缘检测


.1.高斯滤波去除图像噪声


 CV10 图像模糊(均值、高斯、中值、双边滤波)


.2.计算梯度


用一阶偏导的有限差分来计算梯度的幅值和方向


理论先让我求教大佬之后再贴上去了,这部分我都看睡着了。。。😴😴😴


.3.在边缘上应用非极大值抑制


图像梯度幅值矩阵的元素值越大,说明图像中该点的梯度越大。但不能说明这个点是边缘点。在Canny算法中,我们 要进行非极大值抑制,寻找像素点局部点的最大值,将非极大值点对应的灰度值置为0,从而达到剔除大部分非边缘 的点


7ae4fc2c1f5869aff909f80f36facce4.png


梯度方向垂直于边缘方向。


假设在梯度方向上有A、B、C三个像素点的梯度值,我们可以比较A/B/C的大小,找出最大梯度值的点(上图假设为 A),其余灰度值都置0,这样我们就可以得到一个白点。


多次在梯度方向上寻找比较,找出多个点,并连线,最后得到的结果是带有“细边”的二进制图像


.4.将双阈值应用于所有检测到的边缘,淘汰所有假正例结果


(最小阈值(threshold1)最大阈值(threshold2))


.5.分析所有边缘及其之间的连接,保留真正的边缘,并丢弃弱边缘

高阈值先把边缘链接成轮廓,当达到轮廓的端点时,该算法会自动寻找满足低阈值的点,再根据此点收集新的边缘, 直至整个图像闭合


找到Canny边缘后,我们可以对边缘进行轮廓检测。


cv2.Canny()函数


功能:Canny边缘检测


输入参数:


1.图像名(img)

2.最小阈值(threshold1)

3.最大阈值(threshold2)


注意:最大阈值用来检测图像中较明显的边缘,但其检测的边缘是断断续续的,所以这时候用最小阈值将这些断断续续的边缘连接起来


参考资料:Canny边缘检测算法原理及其VC实现详解(一)


程序代码


import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('love.jpg',0)
img = cv2.Canny(img,700,800)
cv2.imshow("canny",img)
cv2.waitKey()
cv2.destroyAllWindows()


效果图


3c1a2365f05cb1a886018909593facdf.png


39bf37a2847d114e169069d98c8f2c34.png

相关文章
请问单位机房自建服务器,如何备案?
事业单位,领导要求自建web服务器,服务器放在单位机房,请问如何备案?如何域名在阿里云购买,如何备案。
|
8月前
|
JSON API 网络架构
如何用Flask构建API
这篇文章介绍了如何使用Python的轻量级框架Flask构建自己的API。通过简单步骤,你将学会创建响应请求的基础API、返回JSON格式数据,并实现动态路由处理用户输入。从“Hello, World!”示例到返回水果信息列表,再到根据具体水果名称提供详细信息,逐步深入理解API的工作原理。最后,通过动态路由增强API灵活性。适合初学者快速上手,开启API开发之旅!
|
8月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
本文介绍了在Spring Boot项目中如何通过创建`GlobalExceptionHandler`类来全局处理系统异常。通过使用`@ControllerAdvice`注解,可以拦截项目中的各种异常,并结合`@ExceptionHandler`注解针对特定异常(如参数缺失、空指针等)进行定制化处理。文中详细展示了处理参数缺失异常和空指针异常的示例代码,并说明了通过拦截`Exception`父类实现统一异常处理的方法。虽然拦截`Exception`可一劳永逸,但为便于问题排查,建议优先处理常见异常,最后再兜底处理未知异常,确保返回给调用方的信息友好且明确。
1184 0
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
|
安全 前端开发 中间件
中间件中HTTP/HTTPS 协议
【6月更文挑战第3天】
293 3
|
弹性计算 API 云计算
使用LobeChat轻松打造私人智能聊天助手
阿里云计算巢提供了一键部署LobeChat的功能,无需下载代码或安装复杂依赖,通过简单几步即可搭建私人聊天助手,非常适合非技术人员。LobeChat是一款现代化设计的开源聊天应用,支持语音合成及多模态插件系统。部署前需确保已开通阿里云账号且余额充足。
使用LobeChat轻松打造私人智能聊天助手
|
存储 NoSQL 算法
Redis内存回收
Redis 基于内存存储,性能卓越,但单节点内存不宜过大,以免影响持久化或主从同步。可通过配置 `maxmemory` 限制最大内存。内存达到上限时,Redis采用两种策略:内存过期策略和内存淘汰策略。过期策略包括惰性删除和周期删除,后者分为 SLOW 和 FAST 模式。内存淘汰策略有八种,如 LRU、LFU 和随机淘汰等,用于在内存不足时释放空间。官方推荐使用 LFU 算法。
238 2
Redis内存回收
|
消息中间件 SQL 容灾
深度剖析 RocketMQ 5.0,消息进阶:如何支撑复杂业务消息场景?
本文主要学习 RocketMQ 的一致性特性,一致性对于交易、金融都是刚需。从大规模复杂业务出发,学习 RocketMQ 的 SQL 订阅、定时消息等特性。再从高可用的角度来看,这里更多的是大型公司对于高阶可用性的要求,如同城容灾、异地多活等。
109347 287
|
前端开发 JavaScript
async和await的错误处理
在TypeScript中,`async`和`await`是处理异步操作的语法糖,能够让异步代码看起来像同步代码。`async`函数返回的总是`Promise`对象。当`await`后跟的表达式为`reject`状态的`Promise`时,会抛出错误,需要通过`try/catch`、链式`.catch()`或外部`Promise`包装来处理错误,防止代码崩溃。
507 0
async和await的错误处理
|
机器学习/深度学习 人工智能 异构计算
【Docker 专栏】Docker 与 GPU 加速应用的结合
【5月更文挑战第9天】GPU加速技术在处理大规模数据和复杂计算时展现强大性能,尤其在AI和深度学习领域。Docker作为轻量级容器化工具,提供隔离、可移植和高效的环境。结合GPU加速,关键在于容器访问GPU设备和安装相应驱动。NVIDIA提供了支持工具,允许Docker利用GPU。应用场景包括人工智能、科学计算和视频处理。优势包括资源利用率提升和部署灵活性,但面临驱动兼容性、资源管理和监控调试的挑战。未来,随着技术发展,Docker与GPU加速在边缘计算中的应用将有广阔前景。
674 1
【Docker 专栏】Docker 与 GPU 加速应用的结合
|
Java Maven Windows
SpringBoot工程打包与运行(Windows版)
SpringBoot工程打包与运行(Windows版)
SpringBoot工程打包与运行(Windows版)