【数字图像处理】边缘检测

2023-05-16

文章目录

  • 0. 前言
  • 1. Sobel算子
  • 2. Canny算子
  • 3. 深度学习算法
    • 3.1 Holistically-Nested Edge Detection(HED)
    • 3.2 Richer Convolutional Features(RCF)
  • 参考资料

0. 前言

边缘检测是一种图像处理技术,旨在标识和定位数字图像中的边缘和轮廓。边缘是图像中灰度值变化明显的位置,通常是物体的边缘或表面的变化。通过边缘检测算法,可以将图像中的物体和背景分离出来,从而实现目标检测、图像分割、计算机视觉和机器人视觉等应用。

边缘检测算法的基本原理是在数字图像中寻找灰度变化的位置。其中,最常见的方法是基于图像梯度的边缘检测算法,如Sobel算子、Prewitt算子、Roberts算子和Canny算子等。

1. Sobel算子

Sobel算子将数字图像与两个卷积核Gx和Gy进行卷积,Gx和Gy分别用于计算水平方向和垂直方向上的梯度:
G x = [ − 1 0 1 − 2 0 2 − 1 0 1 ] G_x = \begin{bmatrix}-1 & 0 & 1 \\-2 & 0 & 2 \\-1 & 0 & 1\end{bmatrix} Gx= 121000121 G y = [ − 1 − 2 − 1 0 0 0 1 2 1 ] G_y = \begin{bmatrix}-1 & -2 & -1 \\0 & 0 & 0 \\1 & 2 & 1\end{bmatrix} Gy= 101202101
在计算完Gx和Gy之后,可以计算每个像素的梯度强度和方向:
G = G x 2 + G y 2 G = \sqrt{G_x^2 + G_y^2} G=Gx2+Gy2 θ = tan ⁡ − 1 ( G y G x ) \theta = \tan^{-1}\left(\frac{G_y}{G_x}\right) θ=tan1(GxGy)

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图片
img = cv2.imread("example.jpg", cv2.IMREAD_GRAYSCALE)

# 定义Sobel算子
sobel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])

sobel_y = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])

# 对图片进行Sobel边缘检测
img_sobel_x = cv2.filter2D(img, -1, sobel_x)
img_sobel_y = cv2.filter2D(img, -1, sobel_y)

# 计算梯度幅值和梯度方向
gradient_magnitude = np.sqrt(img_sobel_x ** 2 + img_sobel_y ** 2)
gradient_magnitude = (gradient_magnitude / gradient_magnitude.max())*255
gradient_direction = np.arctan2(img_sobel_y, img_sobel_x)
gradient_direction = (gradient_direction / gradient_direction.max()) * 255

# 显示结果
fig, axs = plt.subplots(1, 4, figsize=(16, 4))
axs[0].imshow(img, cmap="gray")
axs[0].set_title("Original")
axs[1].imshow(img_sobel_x, cmap="gray")
axs[1].set_title("Sobel X")
axs[2].imshow(img_sobel_y, cmap="gray")
axs[2].set_title("Sobel Y")
axs[3].imshow(gradient_magnitude.astype(np.uint8), cmap="gray")
axs[3].set_title("Gradient Magnitude")
plt.show()

在这里插入图片描述
可以看到,Gx主要检测出了竖直方向上的边缘,Gy主要检测出了水平方向上的边缘。

2. Canny算子

Canny算子是在工业界广泛使用的边缘检测算法,它的主要原理是通过检测图像中像素灰度变化的一阶导数来检测边缘。

Canny算法主要分为以下几个步骤:

  • 去噪
    由于图像中可能存在噪声,并且噪声对边缘检测的影响较大(因为噪声也是高频信息),首先需要对图像进行去噪声处理。常见的方法是使用高斯滤波器对图像进行平滑处理,以减少噪声的影响。

  • 计算梯度
    在图像平滑之后,需要计算每个像素点的梯度值和方向。常用的方法是使用Sobel算子,对图像进行水平和垂直方向上的梯度计算。梯度方向的计算可以通过计算水平和垂直梯度值的反正切来得到。

  • 非极大值抑制
    由于Sobel算子计算的梯度值较大,图像中可能存在多个方向的梯度,需要进行非极大值抑制来确定每个像素点的主要梯度方向。具体来说,对于每个像素点,沿着其梯度方向上的两个邻域像素点进行比较,如果当前像素点的梯度值最大,则保留它,否则将其置为零。

  • 双阈值检测
    经过前面的处理之后,图像中只剩下边缘可能存在的位置。但是,由于图像中存在很多噪声和灰度变化,有些边缘可能会被误判为非边缘。因此需要使用双阈值检测来进一步筛选边缘。将梯度幅值分为两个阈值:高阈值和低阈值。如果一个像素点的梯度幅值大于高阈值,则被认为是边缘像素;如果一个像素点的梯度幅值小于低阈值,则被认为是非边缘像素。如果一个像素点的梯度幅值在两个阈值之间,则只有它与高阈值相连的像素点才被认为是边缘像素。

  • 边缘连接
    经过上述处理之后,图像中可能还存在一些不连续的边缘。因此,需要使用边缘连接算法将它们连接起来。一种常用的方法是使用基于滞后阈值的连接算法。具体来说,从高阈值像素开始,将与其相邻的低阈值像素加入到边缘中,直到不存在低阈。

3. 深度学习算法

3.1 Holistically-Nested Edge Detection(HED)

HED是一个端到端的边缘检测模型,总体架构如下:
在这里插入图片描述
在这里插入图片描述
将移除了全连接层的VGG16作为特征提取器,每个stage会外接一个卷积和sigmoid,用于输出单通道的边缘检测结果,即图中的Side-output。

  • 训练阶段:每个side-output的输出经过上采样至GT的分辨率,然后分别与GT求loss;考虑到图像中的边缘信息占据比例较小,因此引入了 β \beta β解决类别不均衡的问题,对于非边缘像素的损失分配较小的权重。
    在这里插入图片描述
    side部分的总损失等于各个side损失的加权求和
    在这里插入图片描述
    除了side-output,网络还有一个fuse输出,即将所有side输出concat后进行卷积(输出通道为1),然后经过sigmoid输出最终的fuse结果。fuse输出也要利用GT进行监督,损失函数为cross-entropy。
    在这里插入图片描述
    整个网络的优化目标为使side损失和fuse损失最低
    在这里插入图片描述

  • 测试阶段:将所有side-output和fuse-output平均后的结果作为最终的边缘检测结果

3.2 Richer Convolutional Features(RCF)

RCF是针对HED的改进,主要改进有两点:

  • 改进点1:HED的side-output是每个stage最后一个卷积输出的特征图经过卷积和sigmoid得来的,RCF中改为将每个stage中所有卷积的输出经过1×1卷积->求和->1×1卷积->sigmoid后的结果,利用了更丰富的特征信息。

在这里插入图片描述

  • 改进点2:设置一个阈值 η \eta η,小于阈值的不计算损失(分不清到底是边缘还是非边缘),计算非边缘部分的损失时分配一个较小的权重 α \alpha α,计算边缘部分的损失时分配一个较大的权重 β \beta β
    在这里插入图片描述

参考资料

[1] Holistically-Nested Edge Detection
[2] Richer convolutional features for edge detection

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数字图像处理】边缘检测 的相关文章

  • halcon边缘检测

    边缘检测 Ronny丶 博客园 寻找边缘的传统方法 xff0c 即图像中的暗 光转换 xff0c 是应用边缘滤波器 这些滤光器可以在光和暗区域的边界找到像素 从数学术语中来说 xff0c 这意味着这些滤波器决定了图像的梯度 此图像渐变通常作
  • 数字图像处理扭曲效果——挤压效果

    挤压效果 挤压效果是将图像向内挤压 产生收缩变形 挤压效果的实现可以看成是数学极坐标的一种体现 将当前像素点 图像正中心点和过中心点的水平线这三要素画出一个极坐标 然后根据用户指定的挤压度 在当前点与中心点所连的直线上映射出一个像素点 最后
  • 数字图像处理-python基于opencv代码实现 反转变换、对数变换和幂律(伽马)变换

    本文主要介绍对 数字图像处理 第三章书中示例图片实现 反转变换 对数变换以及伽马变换的代码 若要获取更多数字图像处理 python 深度学习 机器学习 计算机视觉等高清PDF以及 更多有意思的 分享 可搜一搜 微信公共号 分享猿 免费获取资
  • 高斯低通频率域滤波

    基本原理 频率域滤波 即将原图像通过傅里叶变换 转换至频率域 在频率域利用该域特有的性质进行处理 再通过傅里叶反变换把处理后的图像返回至空间域 所以 频率域的操作是在图像的傅里叶变换上执行 而不是在图像本身上执行 高斯低通滤波器传递函数表达
  • 数字图像处理-Matlab实现图像边缘检测

    1 边缘检测函数 1 1Sobel算子边缘检测 function OutImage SobelOperate InputImage Direction 功能 Sobel边缘检测 参数 InputImage为输入单通道图像 Dirction为
  • 【图像处理】彩色直方图均衡

    sourcePic imread D Images pic loc 1870358810205041517 jpg m n o size sourcePic grayPic rgb2gray sourcePic figure imshow
  • 深度学习边缘检测 HED 训练自己的数据

    深度学习边缘检测 HED 训练自己的数据 数据集制作 使用labelme标注 选择lineStrip 线条束 标注 生成json文件 之后使用批量处理脚本将json文件转为边缘数据集 具体过程如下 首先将所有的json文件放入一个文件夹内
  • 【图像处理】彩色图直方图统计

    首先要知道彩色图是没有直方图的 只能在rgb方向分别求直方图在合并一下 干脆不用这么麻烦 用rgb2gray转到灰度图 再在二维上进行直方图绘制 最后还提供了代码 找出直方图中横坐标 像素值 为50以下的纵坐标 以此为像素的个数 的和 cl
  • 全景图像拼接——基本流程

    图像拼接技术是数字图像处理技术一个重要的研究方向 它即是将两幅或多幅相互有部分重叠的场景照片拼接成具有超宽视角 与原始图像接近且失真小 没有明显缝合线的高分辨率图像 可以很好地解决广角镜 鱼眼镜头等全景图获取设备的不足 如下图 图像拼接产生
  • MATLAB—GUI新手入门教程

    GUI界面基本操作 1 GUI界面介绍 2 各个控件的使用方法 2 1 1 按钮 2 1 2 滑动条 2 1 3 文本框 2 1 4 单选框和复选框和切换按钮 2 1 5 弹出式菜单和列表框 2 1 6 按钮组 2 1 7 菜单编辑器 常见
  • 图像边缘及matlab实现

    图像边缘是图像的重要特征 是图像中特性 如像素灰度 纹理等 分布的不连续处 图像周围特性有阶跃变化或屋脊状变化的那些像素集合 图像的边缘部分集中了图像的大部分信息 一幅图像的边缘结构与特点往往是决定图像特质的重要部分 图像边缘的另一个定义是
  • 数字图像处理-基于opencv和kreas的手势(手语)识别

    基于opencv和kreas的手势 手语 识别 代码为实验需要 具体使用需要修改 tensorflow教程 推荐看这个 内容一 裁剪视频 获取手势 import cv2 import numpy as np import os import
  • 20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用

    真火 作为最近一段时间人工智能领域内的顶流之一 AIGC AI Generated Content 早已火爆出圈 频登各大互联网平台热搜 cite 微软亚洲研究院官方微博 这段时间以来 基于深度学习的内容生成在图像 视频 语音 音乐 文本等
  • 数字图像处理(冈萨雷斯 第三版)

    1 1 图像与图像处理的概念 图像 Image 使用各种观测系统以不同形式和手段观测客观世界而获得的 可以直接或间接作用于人眼并进而产生视觉的实体 包括 各类图片 如普通照片 X光片 遥感图片 各类光学图像 如电影 电视画面 客观世界在人们
  • 滤波去噪和小波去噪

    原文 http zhidao baidu com linkurl 7vqgj2oQ4MacZxGLdJXM lTCDdW3TrY6hbeInWeW7NWgcCFjO8qHbbm0U8lONrAanc6BQR7WwJB0GRzgZXZQLK
  • 图像均值、标准差、变异系数的意义

    目录 均值图像如何算 方差图像如何计算 变异系数是什么 极差 最大值 最小值 方差 数列中每个元素与均值之差的平方和 标准差 方差的开平方根 变异系数 正态分布 标准差 平均值 数字图像处理的配套视频教程 1 冈萨雷斯 数字图像处理 开始安
  • 数字图像处理——图像锐化

    图像增强是图像处理的一个重要环节 早期的图像处理就是从图像增强开始的 人们研究对质量低的图像进行处理以获得改善质量后的图像 现今的图像增强还为后续的图像处理 如图像信息提取 图像识别等 提供更高识别度的图像 从图像处理技术来看 图像的摄取
  • 【扫盲】机器学习图像处理中的深层/浅层、局部/全局特征

    浅层网络与深层网络浅层网络更注重于细节信息 深层网络更注重于语义信息 浅层网络 一般感受野较小 能够利用更多的细粒度特征信息 而且此时特征图每个像素点对应的感受野重叠区域还很小 这就保证了网络能够捕获更多细节 深层网络 随着下采样或卷积次数
  • 计算两幅图像的相似度(PSNR、SSIM、MSE、余弦相似度、MD5、直方图、互信息、Hash)& 代码实现 与举例

    MSE Mean Squared Error 均方误差 MSE公式 MSE 计算模型的预测 与真实标签 Y 的接近程度 公式表示为 对于两个m n的单通道图像I和K 它们的均方误差可定义为 优点 MSE的函数曲线光滑 连续 处处可导 便于使
  • 冈萨雷斯《数字图像处理》学习笔记(3)--频率域滤波(含傅里叶变换推导)

    频率域滤波所有的滤波都是通过傅里叶变换在频率域实现的 所以我们先重点提出傅里叶变换 一 傅里叶变换基础 一维傅里叶变换数学推导 首先 我们知道傅里叶级数 形如 f x a0 n 1 ancos n x bnsin n x 1 f x a 0

随机推荐

  • vscode设置代理

    1 通过命令行方式设置 参考 xff1a https liliyuanshangcaoyisuiyikurongyehuoshaobujinchunfengchuiyousheng com 2021 vscode socks5 proxy
  • springboot oa 办公系统,springboot权限系统

    springboot oa 自动化办公系统 43 springboot 完整权限管理系统合二为一 xff01 办公自动化 xff08 OA xff09 是面向组织的日常运作和管理 xff0c 员工及管理者使用频率最高的应用系统 xff0c
  • linux下的shell运算(加、减、乘、除)

    关注微信公众号 虾米聊吧 获取所有资料干货 xff0c 每天更新技术干货 xff0c 一起交流一起学习 i 61 j 43 k 等价于 i 61 96 expr j 43 k 96 i 61 j k 等价于 i 61 96 expr j k
  • 仿QQ聊天程序(java)

    简易版qq聊天 xff1a qq聊天 简易版 resourcecode cn 推荐java最新聊天项目 xff08 java仿微信聊天 xff09 java 简单仿微信聊天 springboot Garry1115的博客 CSDN博客 sp
  • yum出错Error: Cannot find a valid baseurl for repo: base

    关注微信公众号 虾米聊吧 xff0c 每天更新一篇技术文章 xff0c 文章内容涵盖架构师成长必经之路应掌握的技术 xff0c 一起学习 xff0c 一起交流 最近在安装mysql的rpm包时 xff0c 出现了一个问题 xff0c 当使用
  • java web简单权限管理设计

    注 xff1a 由于该项目比较老 xff0c 所以没有采用maven管理 xff0c 建议下载java后台通用权限管理系统 springboot xff09 xff0c 对学习和使用会更有帮助 最近在做一个网站类型项目 xff0c 主要负责
  • C/C++ 开发神器 CLion 使用入门

    关注微信公众号 虾米聊吧 xff0c 每天分享知识干货 xff0c 和博主一起打卡 xff0c 进步 CLion是Jetbrains公司旗下新推出的一款专为开发C C 43 43 所设计的跨平台IDE xff0c 它是以IntelliJ为基
  • java后台通用权限管理系统(springboot)

    推荐 xff1a Java秒杀系统优化 高性能高并发 xff08 Java秒杀系统优化 高性能高并发 Garry1115的博客 CSDN博客 xff09 说明 xff1a 这是本人正在使用的一款通用权限管理系统 来源 xff1a 通过对网上
  • Kali Linux-2021.4a下载安装全过程

    一 镜像下载 xff1b 下载镜像地址通过阿里云开源镜像站进行下载 xff1b https mirrors aliyun com kali images 二 系统安装 xff1b 说明 xff1a 本次安装流程通过虚拟机进行 1 虚拟机配置
  • RH8的ansible安装与配置

    Ansible安装与配置 自定义环境 角色主机名ip地址组名控制主机server example com192 168 157 100server受控主机1node1 example com192 168 157 134node1受控主机2
  • UOS开发者调试签名

    开发者调试签名 2022 01 18 20 03 03 一 证书生成 xff08 1 xff09 打开统信应用商店 xff0c 搜索 证书工具 xff0c 单击安装证书工具 xff08 2 xff09 使用cert tool工具生成证书 执
  • JAVA 分解质因数

    7 3 分解质因数 求出区间 a b 中所有整数的质因数分解 输入格式 输入两个整数a xff0c b 数据规模和约定 2 lt 61 a lt 61 b lt 61 10000 输出格式 每行输出一个数的分解 xff0c 形如k 61 a
  • 使用customRef自定义ref,解决setup中处理异步问题。

    setup中不允许使用async await使用customRef可以让请求到的数据自动获取响应式状态详见下方demo lt template gt lt div gt num lt div gt lt button 64 click 61
  • apache2.4 中文乱码问题

    PHP ini里面的default charset 61 34 UTF 8 34 lt meta http equiv 61 34 content type 34 content 61 34 text html charset 61 UTF
  • VScode自定义配置代码片段详细教程(附带转码链接)

    目录 前言 1 定义自己常用的代码片段 2 通过转码链接进转译 3 Vscode中设置 3 1找到配置代码片段进行设置 3 2点击全局配置进入粘贴转译过的代码 4 检验自定义代码段是否成功 小结 xff1a 前言 众所周知在VScode的h
  • 注意力机制总结

    文章目录 1 通道注意力1 1 SENet xff08 谁用谁知道 xff0c 用了都说好 xff09 2 通道 amp 空间2 1 CBAM2 2 scSE2 3 Coordinate Attention 3 self attention
  • 轻量级网络总结

    文章目录 1 SqueezeNet2 ShuffleNet2 1 v12 2 v2 3 MobileNet3 1 v13 2 v23 3 v3 4 GhostNet4 1 v14 2 v2 1 SqueezeNet SqueezeNet A
  • 【低光增强】Zero-DCE

    文章目录 一 前言二 算法理解2 1 低光增强曲线2 2 整体框架2 3 网络结构2 4 损失函数2 4 1 空间一致性2 4 2 曝光控制2 4 3 色彩恒常2 4 4 光照平滑 2 5 Zero DCE 43 43 三 效果测试 一 前
  • 【对比度增强】Learning Tone Curves for Local Image Enhancement(LTMNet)

    文章目录 0 前言1 理解1 1 整体框架1 2 网络结构1 3 细节 2 亮点3 总结 0 前言 LTMNet这篇文章借鉴了CLAHE算法 xff0c 所有步骤与CLAHE一致 xff0c 不同之处在于LTMNet中局部映射曲线是通过CN
  • 【数字图像处理】边缘检测

    文章目录 0 前言1 Sobel算子2 Canny算子3 深度学习算法3 1 Holistically Nested Edge Detection xff08 HED xff09 3 2 Richer Convolutional Featu