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

这篇具有很好参考价值的文章主要介绍了【数字图像处理】边缘检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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文章来源地址https://www.toymoban.com/news/detail-434516.html

到了这里,关于【数字图像处理】边缘检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (数字图像处理MATLAB+Python)第七章图像锐化-第三节:高斯滤波与边缘检测

    高斯函数 :是一种常见的连续函数,通常用符号 G ( x ) G(x) G ( x ) 表示。它可以用下面的公式定义 G ( x ) = 1 σ 2 π e − x 2 2 σ 2 G(x)=frac{1}{sigma sqrt{ 2pi }}e^{-frac{x^{2}}{2sigma^{2}}} G ( x ) = σ 2 π ​ 1 ​ e − 2 σ 2 x 2 ​ 其中, x x x 是自变量, σ sigma σ 是一个正实数,表示高斯函

    2024年02月06日
    浏览(56)
  • 《数字图像处理-OpenCV/Python》连载(1)前言

    本书京东优惠购书链接:https://item.jd.com/14098452.html 写作背景 编写本书的初衷,源自作者学习数字图像处理的经历。 在创新实验班开设的专业创新教育课程中,我选择的是数字图像处理方向。老师向我推荐的教材是冈萨雷斯的《数字图像处理》。学习的开始阶段非常困难。教

    2024年02月11日
    浏览(64)
  • 图像处理:边缘检测原理

    很抱歉,前面推导三种边缘检测算子我不是很满意就发出去了,现在以我的知识储备看他们还是有着很大的问题,我潜下心的找资料,看视频,就是为了将我的基础打牢,所以,我在这一篇当中好好的抠细节,毕竟从实际的应用上来说,这是我的学习笔记,再怎么也不能糊弄

    2024年02月06日
    浏览(49)
  • 图像处理——边缘检测(MATLAB实现)

    实验表明,人眼对图像中边缘的识别不是通过设置阈值来分割的,目标的边缘一般表现为灰度(对彩色图像还包括色度)的特变。对于人类的视觉感知,图像边缘对理解图像内容起到关键作用。在灰度渐变的图像中无法区分其灰度变化的边界,但如果边界灰度有突变,则可以区

    2024年02月03日
    浏览(41)
  • 【图像处理】基于matlab蚁群聚类图像边缘检测

    目录 基于matlab蚁群聚类图像边缘检测 蚁群聚类是一种模拟自然界中蚂蚁群体行为的算法,常用于解决优化问题。该算法可以用于图像处理中的边缘检测。下面给出一个基于MATLAB的蚁群聚类图像边缘检测的示例代码。 我们首先读入待处理图像,并将其转换为灰度图像。然后,

    2023年04月22日
    浏览(51)
  • 图像处理之梯度及边缘检测算子

    梯度是一个量变化的速度,在数学中通常使用求导、求偏导获取梯度或者某一方向上的梯度。 在数字图像中梯度可以看为像素值分别在x,y方向上的变化速度,因为数字图像的离散型,以及像素是最小处理单元的特性,求数字图像的梯度时,不需要求导,只需要进行加减运算即

    2024年02月16日
    浏览(44)
  • ZYNQ图像处理(7)——sobel边缘检测

    所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征。边缘存在于目标、背景和区域之间,所以,它是图像分割所依赖的最重要的依据。由于边缘是位置的标志,对灰度的变化不敏感,,因此,边缘也是图像匹配的重要的特征。边缘检测和区域划分

    2024年02月05日
    浏览(71)
  • 我在Vscode学OpenCV 图像处理三(图像梯度--边缘检测【图像梯度、Sobel 算子、 Scharr 算子、 Laplacian 算子、Canny 边缘检测】)

    这里需要区分开边缘检测和轮廓检测 边缘检测并非万能,边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。 OpenCV 提供了查找图像轮廓的函数 cv2.findContours(),该函数能够查找图

    2024年02月04日
    浏览(60)
  • 图像处理 边缘检测 绘制金字塔 模板匹配

    Canny边缘检测器是一种多步算法,用于检测任何输入图像的边缘。 边缘检测步骤: 1.应用 高斯滤波器 ,以平滑图像,滤除噪声( 降噪 ) 2.计算图像中每个像素点的梯度大小(边缘两侧和卷积之间的像素差值和方向(x和y方向)(梯度Scole算子检测边缘) 3.使用非极大值抑制,

    2024年02月06日
    浏览(52)
  • 图像处理基础篇-形态学处理-边缘检测(matlab仿真与图像处理系列第4期)

    图像处理方面的老师,第一天学习以下内容和代码: 图像读取和显示:在Matlab中,可以使用imread函数读取图像,并使用imshow函数显示图像。以下是一个简单的示例代码: 图像滤波:滤波是图像处理中常用的一种技术,可以用来去除噪声、平滑图像等。以下是一些常见的滤波

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包