【图像处理】边缘检测(Roberts、Prewitt、Sobel、Marr-Hildreth 和 Canny 边缘检测器)和图像分割(Otsu 方法)(matlab代码实现)

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

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

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

💥1 概述

图像处理中的边缘检测与图像分割算法研究

摘要

边缘检测是图像处理的基础任务,用于识别图像中物体的边界。Roberts、Prewitt、Sobel、Marr-Hildreth和Canny边缘检测器通过不同数学模型提取边缘特征,而Otsu方法通过自适应阈值实现图像分割。本文系统分析各算法的原理、优缺点及适用场景,为图像处理任务提供算法选型依据。

1. 边缘检测算法研究

Otsu方法是一种常用的图像分割技术,旨在将图像分成具有统计学意义的不同区域。该方法基于图像的灰度直方图,通过寻找一个阈值来将图像分成两个类别,使得类别内的方差最小化或方差之和最大化。这个阈值可以将图像中的前景和背景等不同区域有效地分开。Otsu方法适用于许多图像分割应用,包括目标检测、图像分析和模式识别等领域。

1.1 Roberts边缘检测器

原理:基于3×3微分算子,通过计算45°和135°方向的灰度差异检测边缘。
数学模型
使用两个2×2卷积核:

优点

  • 计算复杂度低(仅需4次乘加运算/像素)
  • 对斜向边缘敏感
    缺点
  • 对噪声敏感(未包含平滑操作)
  • 边缘定位精度较低(仅2×2邻域)
    典型应用:实时性要求高的简单场景(如工业零件轮廓提取)

1.2 Prewitt边缘检测器

原理:扩展3×3邻域,通过水平/垂直方向模板计算梯度。
数学模型
卷积核为:

优点

  • 3×3邻域提升抗噪性
  • 计算效率较高(9次乘加运算/像素)
    缺点
  • 边缘定位精度仍有限
  • 对细边缘检测效果一般
    典型应用:中等精度要求的医学图像处理(如X光片边缘提取)

1.3 Sobel边缘检测器

原理:在Prewitt基础上引入高斯加权,增强中心像素权重。
数学模型
卷积核为:

优点

  • 抗噪性优于Prewitt(中心权重更高)
  • 计算复杂度适中(9次乘加运算/像素)
    缺点
  • 边缘宽度可能过宽(需后续细化)
    典型应用:通用场景(如自动驾驶中的道路边界检测)

1.4 Marr-Hildreth边缘检测器

原理:基于LoG(Laplacian of Gaussian)算子,通过高斯平滑与二阶导数过零点检测边缘。
数学模型


  1. 优点
  • 理论最优(基于尺度空间理论)
  • 各向同性(方向无关性)
    缺点
  • 计算复杂度高(需卷积+二阶导数计算)
  • 对噪声敏感(需精确选择σ参数)
    典型应用:高精度要求场景(如卫星图像边缘检测)

1.5 Canny边缘检测器

原理:多阶段优化算法,包含噪声抑制、梯度计算、非极大值抑制和双阈值连接。
数学模型

  1. 高斯滤波:

  1. 梯度计算:使用Sobel算子计算幅值和方向。
  2. 非极大值抑制:保留梯度方向上的局部最大值。
  3. 双阈值检测:通过高阈值(如100)和低阈值(如50)连接边缘。
    优点
  • 边缘连续性好(通过滞后阈值)
  • 抗噪性强(多阶段处理)
    缺点
  • 计算复杂度高(需多阶段处理)
  • 参数调节依赖经验(阈值选择)
    典型应用:复杂场景(如人脸识别中的特征提取)

2. 图像分割算法研究

2.1 Otsu方法

原理:基于最大类间方差的自适应阈值分割。
数学模型


优点

  • 全局最优(无需参数调节)
  • 计算效率高(O(L)复杂度)
    缺点
  • 对光照不均图像效果差
  • 仅适用于双峰直方图图像
    典型应用:文档二值化、工业产品检测

3. 算法对比与选型建议

算法计算复杂度抗噪性边缘连续性参数调节难度适用场景
Roberts实时简单场景
Prewitt中等精度医学图像
Sobel通用场景
Marr-Hildreth高精度卫星图像
Canny复杂场景(如人脸识别)
Otsu--文档二值化、工业检测

选型建议

  1. 实时性要求高:选择Roberts或Sobel(如嵌入式设备)。
  2. 抗噪性要求高:选择Canny(需接受较高计算成本)。
  3. 理论最优边缘:选择Marr-Hildreth(需精确参数调节)。
  4. 图像分割任务:优先选择Otsu(双峰直方图图像)或结合边缘检测的分割方法。

4. 结论

边缘检测算法中,Canny在通用场景下表现最优,而Otsu方法为图像分割提供了高效的全局阈值解决方案。实际应用中,需根据任务需求(实时性、精度、抗噪性)进行算法选型,或通过多算法融合(如Canny+Otsu)提升处理效果。

📚2 运行结果

主函数部分代码:

clc; clear;
%% Read the original image
fig_original = remap_image(double(imread('data/building.tif')));
imwrite(fig_original, 'data/building.png');
figure('Name', 'Original image');
imshow(fig_original, []);

%% Roberts edge detector
figure('Name', 'Roberts edge detector');
gx = [-1 0;0 1];
gy = [0 -1;1 0];
subplot(1, 3, 1);
edge_x = remap_image(abs(filter2(gx, fig_original)));
imshow(edge_x, []);
imwrite(edge_x, 'data/roberts_x.png');
subplot(1, 3, 2);
edge_y = remap_image(abs(filter2(gy, fig_original)));
imshow(edge_y, []);
imwrite(edge_y, 'data/roberts_y.png');
subplot(1, 3, 3);
imshow(remap_image(edge_x + edge_y), []);
imwrite(remap_image(edge_x + edge_y), 'data/roberts_xy.png');

%% Prewitt edge detector
figure('Name', 'Prewitt edge detector');
gx = [-1 -1 -1;0 0 0;1 1 1];
gy = [-1 0 1;-1 0 1;-1 0 1];
subplot(1, 3, 1);
edge_x = remap_image(abs(filter2(gx, fig_original)));
imshow(edge_x, []);
imwrite(edge_x, 'data/prewitt_x.png');
subplot(1, 3, 2);
edge_y = remap_image(abs(filter2(gy, fig_original)));
imshow(edge_y, []);
imwrite(edge_y, 'data/prewitt_y.png');
subplot(1, 3, 3);
imshow(remap_image(edge_x + edge_y), []);
imwrite(remap_image(edge_x + edge_y), 'data/prewitt_xy.png');

%% Sobel edge detector
figure('Name', 'Prewitt edge detector');
gx = [-1 -2 -1;0 0 0;1 2 1];
gy = [-1 0 1;-2 0 2;-1 0 1];

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[[1]王非凡,陈希爱,任卫红等.基于图像自适应增强的低照度目标检测算法[J/OL].计算机工程:1-13[2024-03-11].https://doi.org/10.19678/j.issn.1000-3428.0068407.

🌈4 Matlab代码实现

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值