【图像处理】图像的边缘检测(Matlab代码实现)

简介: 【图像处理】图像的边缘检测(Matlab代码实现)

👨‍🎓个人主页

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

💥1 概述

自然图像中检测边缘与对象边界一直都是计算机视觉中的一项基本问题,边缘检测在一些视觉领域,如图像分割、物体检测/识别、跟踪和运动分析、医学成像、3D 重建等传统任务,和现代应用自动驾驶中发挥着重要作用。多年来,许多研究者致力于提高边缘检测评估标准:单图最佳阈值(optimal image scale,OIS)、全局最佳阈值(optimal dataset scale,ODS)、平均准确率

(average precision,AP)。随着神经网络的快速发展,边缘检测分化为两个阵营:传统检测方法和基于深度学习的检测方法。图 1 显示了两种方法执行边缘检测任务的一般流程。

一些边缘检测[1] 方法仅基于颜色、文本或其他低级特征来预测边界:

1)早期梯度算子方法,如一阶边缘检测算子 Sobel 算子[2] 、Robert 算子[3] ,二阶边缘检测算

子 Laplacian 算子[4] ,还有工业界中常用的 Canny 算子[5] 。

2)基于人工设计特征方法,如统计边缘[6] 、概率边界 (probability boundary,Pb)PMI(pointwise mutual information),和结构化边缘检测算法,如 SE(struc-tured forests edge detection)算法[9] 等。传统的边缘检测方法提取边缘已经取得了相当大的进步,但是对噪声

抑制、边缘定位和精细边缘的处理仍得不到改善。

image.gif 编辑

边缘检测是一个经典的计算机视觉问题,需要识别图像中的边缘以建立对象边界并分离感兴趣的目标。 一张 M × N 的灰度图片表示为一个由二元函数组成的 二维矩阵:

image.gif 编辑

彩色图像中,每一个像素点又包含RGB三个通道,其强度范围都在 0~255 之间。把图像某一行中的所有像素绘制成三条曲线,可以得到由像素强度绘制的波形图,如图2所示。

image.gif 编辑

图中曲线的波动幅度表示为颜色等特征的变化程度,采样区域变化剧烈(如 pixels 坐标 130 处,图 2(a)中 白色网格框所示)。这表明变化剧烈的波可能是包含边缘的区域,也进一步说明波和图像之间联系紧密,图像的本质就是各种色彩波的叠加。利用图像滤波器将低频过滤,保留变化剧烈的区域,即图像中的边缘。边缘一般是指在像素强度局部剧烈变化的区域。其强度变化主要有两类:

1)阶跃变化,表示强度由暗到亮渐变的过程;

2)屋顶变化,表示由暗到亮,再由亮到暗的过程。把边缘检测的目标总结为找到具有阶跃变化或屋顶变化像素点的集合。计算某像素点及其邻域的微分找到变化剧烈的像素点,对于具有阶跃变化的像素点,其一阶微分最大或二阶微分为0则为边缘点;具有屋顶变化的像素点,其一阶微分为0或二阶微分最大则为边缘点。继而引出传统边缘检测基于梯度(一阶与二阶微分)的方法,如Sobel[2] 和Canny[5] 等经典算法。

图像的边缘检测研究

摘要

边缘检测是图像处理和计算机视觉中的关键技术,旨在识别图像中亮度或颜色变化剧烈的像素点,这些点通常对应于物体的边界。本文综述了边缘检测的基本原理、经典算法、应用领域及研究趋势,为相关领域的研究人员提供参考。

1. 引言

边缘检测是图像分割、目标识别和区域形状提取等图像分析任务的基础。通过边缘检测,可以极大地降低后续图像分析和处理的数据量,同时保留图像中重要的结构信息。边缘检测的研究在机器视觉、医学图像处理、工业检测等领域具有重要地位。

2. 边缘检测的基本原理

边缘检测的核心思想是通过计算图像中每个像素点与其周围像素点的亮度或颜色差异,来确定该像素点是否为边缘。这通常通过以下步骤实现:

  • 图像滤波:使用滤波器减少噪声,提高边缘检测的准确性。
  • 图像增强:增强边缘的基础是确定图像各点邻域强度的变化值,将邻域强度值有显著变化的点突出显示。
  • 图像检测:使用梯度幅值阈值或其他方法判断哪些点是边缘点。
  • 图像定位:在子像素分辨率上估计边缘的位置和方向。

3. 经典边缘检测算法

3.1 一阶微分算子

一阶微分算子基于图像梯度的计算,通过检测梯度幅值的极大值来定位边缘。常见的一阶微分算子包括:

  • Roberts算子:利用局部差分计算边缘,对具有陡峭低噪声的图像响应最好,但对噪声敏感。
  • Sobel算子:通过计算图像在水平和垂直方向上的梯度来寻找边缘,对噪声具有一定的平滑作用,但可能检测到伪边缘。
  • Prewitt算子:类似于Sobel算子,但使用不同的卷积核。

3.2 二阶微分算子

二阶微分算子通过检测图像二阶导数的过零点来定位边缘。常见的二阶微分算子包括:

  • Laplacian算子:具有旋转不变性,但对噪声敏感,且不能提供边缘方向信息。
  • LoG(Laplacian of Gaussian)算子:结合高斯滤波和Laplacian算子,先对图像进行平滑以减少噪声,再检测边缘。

3.3 Canny算子

Canny算子是一种多阶段优化的混合方法,包含以下步骤:

  1. 高斯滤波降噪:使用高斯滤波器平滑图像。
  2. 计算梯度幅值和方向:使用Sobel算子计算梯度。
  3. 非极大值抑制:细化边缘,只保留梯度方向上的局部最大值。
  4. 双阈值检测与边缘连接:使用高阈值和低阈值来区分强边缘和弱边缘,并通过连接弱边缘来形成完整的边缘。

Canny算子在边缘检测中表现出色,具有较高的定位精度和抗噪性,但计算复杂度较高。

4. 边缘检测的应用领域

边缘检测在多个领域具有广泛应用,包括但不限于:

  • 医学图像处理:如CT图像器官轮廓提取、显微图像红细胞分类等。
  • 工业检测:如零件尺寸检测、缺陷检测等。
  • 计算机视觉:如目标识别、场景理解等。
  • 遥感图像处理:如地质资源探测、农作物估产等。

5. 研究趋势与挑战

5.1 研究趋势

  • 传统算法优化:改进现有算法的性能,如提高抗噪性、减少计算复杂度等。
  • 跨学科方法融合:结合小波变换、深度学习等新技术,提升边缘检测的准确性和鲁棒性。
  • 三维边缘检测:开发适用于三维医学影像的边缘检测算法,解决投影信息丢失问题。

5.2 挑战

  • 抗噪性优化:如何在保持边缘细节的同时有效抑制噪声。
  • 算法普适性:开发适用于不同场景和图像类型的通用边缘检测算法。
  • 实时性要求:满足工业检测等应用对实时性的高要求。

📚2 运行结果

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑 image.gif 编辑

image.gif 编辑

部分代码:

function idxLocalMax=cannyFindLocalMaxima(direction,ix,iy,mag)

%功能:实现非极大抑制功能

%输入:direction-4个方向

%      ix-图像在x方向滤波结果

%      iy-图像在y方向滤波结果

%      mag-滤波幅度

[m,n,o]=size(mag);

%根据梯度幅度确定各点梯度的方向,并找出四个方向可能存在的边缘点的坐标。

switch direction

   case 1

       idx=find((iy<=0&ix>-iy)|(iy>=0&ix<-iy));

   case 2

       idx=find((ix>0&-iy>=ix)|(ix<0&-iy<=ix));

   case 3

       idx=find((ix<=0&ix>iy)|(ix>=0&ix<-iy));

   case 4

       idx=find((iy<0&ix<=iy)|(iy>0&ix>=iy));

end

%去除图像边界以外点

if~isempty(idx)

   v=mod(idx,m);

   extIdx=find(v==1|v==0|idx<=m|idx>(n-1)*m);

   idx(extIdx)=[];

end

%求出可能的边界点的滤波值

ixv=ix(idx);

iyv=iy(idx);

gradmag=mag(idx);

%计算4个方向的梯度幅度

switch direction

   case 1

       d=abs(iyv./ixv);

       gradmag1=mag(idx+m).*(i-d)+mag(idx+m-1).*d;

       gradmag2=mag(idx-m).*(i-d)+mag(idx-m+1).*d;

   case 2

        d=abs(ixv./iyv);

       gradmag1=mag(idx+1).*(i-d)+mag(idx+m-1).*d;

       gradmag2=mag(idx-1).*(i-d)+mag(idx-m+1).*d;

   case 3

       d=abs(ixv./iyv);

       gradmag1=mag(idx-1).*(i-d)+mag(idx-m-1).*d;

       gradmag2=mag(idx+1).*(i-d)+mag(idx+m+1).*d;

   case 4

       d=abs(iyv./ixv);

       gradmag1=mag(idx-m).*(i-d)+mag(idx-m-1).*d;

       gradmag2=mag(idx+m).*(i-d)+mag(idx+m+1).*d;

end

%进行非极大抑制

idxLocalMax=idx(gradmag>=gradmag1&gradmag>=gradmag2);

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]肖扬,周军.图像边缘检测综述[J].计算机工程与应用,2023,59(05):40-54.

[2]刘仲驰.基于果蝇算法的网络图像边缘检测方法[J].自动

相关文章
|
2月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
117 0
|
2月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
100 0
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
155 8
|
2月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
150 8
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
224 0
|
2月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
114 0
|
2月前
|
机器学习/深度学习 数据采集 测试技术
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
166 8
|
2月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
162 12
|
2月前
|
人工智能 数据可视化 网络性能优化
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
111 9

热门文章

最新文章