python进行图像边缘检测的详细教程

目录
  • 边缘检测
  • 边缘检测算子
    • 1、Roberts算子
    • 2、Prewitt算子
    • 3、Sobel算子
    • 4、Canny算子
    • 5、拉普拉斯算子
  • 效果实验
    • 1、 Roberts边缘检测
    • 2、Prewitt 边缘检测
    • 3、Sobel边缘检测
    • 4、Canny边缘检测
    • 5、Laplacian 边缘检测
  • 总结

边缘检测

图像边缘是指图像中表达物体的周围像素灰度发生阶跃变化的那些像素集合。

图像中两个灰度不同的相邻区域的交界处,必然存在灰度的快速过渡或称为跳变,它们与图像中各区域边缘的位置相对应,边缘蕴含了丰富的内在信息,如方向、阶跃性质、形状等,沿边缘走向的像素变化平缓,而垂直于边缘方向的像素变化剧烈。

图像的大部分信息都集中在边缘部分,边缘确定后实际上就实现了不同区域的分割。

边缘检测算子

求取边缘往往要借助一些边缘检测算子,这些算子有的是基于一阶导数的算子,有的是二阶微分算子

Roberts算子、Prewitt算子、Sobel算子它们包含x、y两个方向的模板,每种模板只对相应的方向敏感,对该方向上的方向有明显的输出,而对其他方向的变化响应不大。以下是一些常见的一阶微分算子及其特点:

算子名称 特点
简单微分算子 对噪声敏感,对噪声具有一定放大作用
Roberts算子 去噪声作用小,边缘检测能力优于简单微分算子
Prewitt算子 能够有效抑制噪声的影响,同时能够检测边缘点
Sobel算子 得到的边缘较宽,噪声抑制效果更强
Canny算子 检测的边缘位置准确且边缘较窄

1、Roberts算子

2、Prewitt算子

3、Sobel算子

Sobel算子检测到的边缘相比于Roberts算子的检测结果要连续一些,并且对于图像的细节检测能力更好,且Sobel边缘检测器引入了局部平均,对噪声的影响比较小,效果较好。

4、Canny算子

Canny得到的检测结果优于Roberts、Sobel算子的检测结果,边缘细节更丰富,边缘定位准确连续性较好,虚假边缘少且边缘均具有单像素宽度。
其算法实现具体分为以下4步:

  • 用高斯滤波器平滑图像
  • 用一阶偏导的有限差分来计算梯度的幅度和方向
  • 对梯度幅值进行非极大值抑制
  • 用双阈值算法检测和连接边缘

5、拉普拉斯算子

常见的二阶微分算子包括拉普拉斯算子,它是一种二阶导师算子,对图像中的噪声相当敏感,而且检测出的边缘常常是双像素宽,没有方向信息,所以拉普拉斯算子很少直接用于检测边缘,而主要用于已知边缘像素后,确定该像素是在图像的暗区还是明区。另外,一阶差分算子会在较宽范围内形成较大的梯度值,因此不能准确定位,而利用二阶差分算子的过零点可以精确定位边缘。
Laplace算子的噪声明显比Sobel算子的噪声大,但其边缘比Sobel要细很多,且Laplace变换作为二阶微分算子对噪声特别敏感,并且会产生双边沿,不能检测边缘方向。

效果实验

1、 Roberts边缘检测

Prewitt 算子代码:

Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int)
Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)

2、Prewitt 边缘检测

Prewitt 算子代码:

Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int)
Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)

3、Sobel边缘检测

Sobel函数:

edges = cv2.Sobel(img, -1, 1, 1)

4、Canny边缘检测

Canny函数:

edges = cv2.Canny(img, 5, 100)

5、Laplacian 边缘检测

Laplacian 函数:

edges = cv2.Laplacian(img, -1)

总结

到此这篇关于python进行图像边缘检测的文章就介绍到这了,更多相关python图像边缘检测内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python opencv实现图像边缘检测

    本文利用python opencv进行图像的边缘检测,一般要经过如下几个步骤: 1.去噪 如cv2.GaussianBlur()等函数: 2.计算图像梯度 图像梯度表达的是各个像素点之间,像素值大小的变化幅度大小,变化较大,则可以认为是出于边缘位置,最多可简化为如下形式: 3.非极大值抑制 在获得梯度的方向和大小之后,应该对整幅图像做一个扫描,去除那些非边界上的点.对每一个像素进行检查,看这个点的梯度是不是周围具有相同梯度方向的点中最大的.如下图所示: 4.滞后阈值 现在要确定那些边界才是真正的

  • 详解Python中图像边缘检测算法的实现

    目录 写在前面 1.一阶微分算子 1.1 Prewitt算子 1.2 Sobel算子 2.二阶微分算子 2.1 Laplace算子 2.2 LoG算子 3.Canny边缘检测 写在前面 从本节开始,计算机视觉教程进入第三章节——图像特征提取.在本章,你会见到一张简简单单的图片中蕴含着这么多你没注意到的细节特征,而这些特征将会在今后更高级的应用中发挥着极其重要的作用.本文讲解基础特征之一——图像边缘. 本文采用面向对象设计,定义了一个边缘检测类EdgeDetect,使图像边缘检测算法的应用更简洁,

  • python实现图像边缘检测

    本文实例为大家分享了python实现图像边缘检测的具体代码,供大家参考,具体内容如下 任务描述 背景 边缘检测是数字图像处理领域的一个常用技术,被广泛应用于图像特征提取.目标识别.计算机视觉等领域.边缘可以理解为像素值发生跃迁的地方,而边缘检测就是要找到这样的地方.如下图所示,对左图进行边缘检测,结果为右图. 基于卷积运算可实现边缘检测,对图像 1(设分辨率为 w×h)进行边缘检测的方法如下: 1)将图像 1 转换成灰度图,仍称为图像 1:2)新建图像 2,图像 2 为灰度图,分辨率与图像 1

  • Python+OpenCV 图像边缘检测四种实现方法

    目录 1.Sobel算子 2.Schaar算子(更能体现细节) 3.Laplacian算子(基于零穿越的,二阶导数的0值点) 4.Canny边缘检测(被认为是最优的边缘检测算法) 总结 import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 设置兼容中文 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = [

  • Python图像运算之图像锐化和边缘检测

    目录 一.图像锐化 1.一阶微分算子 2.二阶微分算子 二.Roberts算子 三.Prewitt算子 四.总结 一.图像锐化 由于收集图像数据的器件或传输图像的通道存在一些质量缺陷,或者受其他外界因素的影响,使得图像存在模糊和有噪声的情况,从而影响到图像识别工作的开展.一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息主要集中在其高频部分.这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现.为了减少这类不利效果的影响,就需要利用图像锐化技术,使

  • python进行图像边缘检测的详细教程

    目录 边缘检测 边缘检测算子 1.Roberts算子 2.Prewitt算子 3.Sobel算子 4.Canny算子 5.拉普拉斯算子 效果实验 1. Roberts边缘检测 2.Prewitt 边缘检测 3.Sobel边缘检测 4.Canny边缘检测 5.Laplacian 边缘检测 总结 边缘检测 图像边缘是指图像中表达物体的周围像素灰度发生阶跃变化的那些像素集合. 图像中两个灰度不同的相邻区域的交界处,必然存在灰度的快速过渡或称为跳变,它们与图像中各区域边缘的位置相对应,边缘蕴含了丰富的内

  • 用pip给python安装matplotlib库的详细教程

    Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形. 1.首先在python里安装pip,打开安装python的文件夹,找到python\scripts查看是否有pip.exe,如果有说明python里已经安装了pip,直接进入下一步.如果没有pip.exe,则需要先安装pip,官网上有详细教程,此处不再介绍.链接https://pip.pypa.io/en/stable/installing/ 2.添加环境变量,右键我的电脑

  • Python中使用ipython的详细教程

    ipython简介 ipython他是一个非常流行的python解释器,相比于原生的python解释器,有太多优点和长处,因此几乎是python开发人员的必知必会. 1.ipython相比于原生的python有什么优势 (1) python shell不能在退出保存历史:ipython历史记录自动保存:保存在history.sqlite文件下:可用"_"."__"."___"调用最近三次记录: (2) python shell不支持tab自动补全

  • Python正则表达式保姆式教学详细教程

    目录 一.re模块 1.导入re模块 2.findall()的语法: 二.正则表达式 1.普通字符 2.元字符 (二)正则的使用 1.编译正则 2.正则对象的使用方法 3.Match object 的操作方法 4.re模块的函数 正则作为处理字符串的一个实用工具,在Python中经常会用到,比如爬虫爬取数据时常用正则来检索字符串等等.正则表达式已经内嵌在Python中,通过导入re模块就可以使用,作为刚学Python的新手大多数都听说"正则"这个术语. 今天来给大家分享一份关于比较详细

  • python使用openai生成图像的超详细教程

    OpenAI 是一个人工智能的工具包,包括神经网络.遗传算法和有限状态机等.使用python可以非常便捷的操作OpenAI的API.一下是OpenAI官网列举的功能DEMO 首先使用python的pip进行openai库的安装 pip install openai 在openai官网中找到自己需要测试的api文档 https://platform.openai.com/docs/guides/images/introduction 这里以图像生成示例 在做这一切之前首先得确保你安装了reques

  • 彻底吃透理解Python基础33个关键字详细教程

    目录 1 and.or.not 2 if.elif.else 3 for.while 4 True.False 5 continue.break 6 pass 7 try.except.finally.raise 8 import.from.as 9 def.return 10 class 11 lambda 12 del 13 global.nonlocal 14 in.is 15 None 16 assert 17 with 18 yield 其实前面我已经为大家总结了<Python系统关键

  • 全网最全python库selenium自动化使用详细教程

    一.安装selenium pip install Selenium 二.初始化浏览器 Chrome 是初始化谷歌浏览器 Firefox 是初始化火狐浏览器 Edge 是初始化IE浏览器 PhantomJS 是一个无界面浏览器. from selenium import webdriver driver = webdriver.Chrome() 三.设置浏览器大小 maximize_window 最大化窗口 set_window_size 自定义窗口大小 from selenium import

随机推荐