【数字图像处理+MATLAB】通过 Roberts, Prewitt, Sobel, LoG 等算子实现图像边缘检测:使用 edge 函数

引言

边缘检测是图像处理中的一种技术,用于识别图像中的物体边界。边缘是图像亮度函数快速变化的地方,通常对应于物体或物体部分的边界。边缘检测的目标是显著减少图像中的数据量,同时保留有用的结构信息。常用的边缘检测算法包括Sobel、Prewitt、Roberts、Canny等。


函数详解

edge

edge是MATLAB中的一个函数,用于检测图像中的边缘。

基本语法:

matlab 复制代码
BW = edge(I)
BW = edge(I,method)
BW = edge(I,method,threshold)
BW = edge(I,method,threshold,direction)
[BW,threshOut] = edge(___)

参数详解:

  • I:输入图像,应为二维灰度图像。
  • method:边缘检测方法,可选值包括 'Sobel'(默认值)、'Prewitt''Roberts''Log''Canny'等。
  • threshold:阈值,用于确定边缘的强度。如果未指定,edge函数会自动计算阈值。
  • direction:方向,仅在method'Sobel''Prewitt''Roberts'时使用。可选值为'horizontal''vertical'

返回值详解:

  • BW:输出图像,是一个二值图像,其中边缘像素为1,非边缘像素为0。
  • threshOut:实际使用的阈值。如果输入参数中未指定阈值,edge函数会自动计算一个阈值,并通过threshOut返回。

应用案例

matlab 复制代码
% 读取图像
img1 = imread("Fig1016(a)(building_original).tif");

% 创建一个新的图形窗口
figure;

% 显示原始图像
subplot(3, 2, 1);
imshow(img1);
title("Original image");

% 使用Roberts方法检测边缘
roberts = edge(img1, 'roberts');
subplot(3, 2, 3);
imshow(roberts);
title("Roberts");

% 使用Prewitt方法检测边缘
prewitt = edge(img1, 'prewitt');
subplot(3, 2, 4);
imshow(prewitt);
title("Prewitt");

% 使用Sobel方法检测边缘
sobel = edge(img1, 'sobel');
subplot(3, 2, 5);
imshow(sobel);
title("Sobel")

% 使用Log方法检测边缘
log = edge(img1, 'log');
subplot(3, 2, 6);
imshow(log);
title("Log")
相关推荐
小大宇1 小时前
python sqlalchemy 案例
开发语言·python
名字还没想好☜1 小时前
Go 结构体内存对齐:调整字段顺序,同样的字段省下 40% 内存
开发语言·后端·golang·go·内存对齐
玛丽莲茼蒿1 小时前
很难出错的Spring5(十)—— IOC进阶
java·开发语言·jvm
Ulyanov1 小时前
雷达导引头仿真中的坐标系——从惯性系到量测角
开发语言·python·算法·系统仿真·雷达信号处理·雷达导引头
上海安当技术2 小时前
车间电脑指纹登录怎么做?从 FIDO2 公钥体系到统一身份认证的技术拆解
开发语言·电脑·php
前鼻音太阳熊2 小时前
【MES系统】- 工业HMI状态机可视化实践:从手写SVG到Cytoscape.js的技术选型与踩坑
开发语言·javascript·ecmascript
阿米亚波2 小时前
【C++ STL】std::array
java·开发语言·c++
wuyk5553 小时前
66.嵌入式C语言进阶:共用体(Union)实战指南——单片机内存省一半的神级技巧
c语言·开发语言·stm32·单片机·嵌入式硬件
Ivanqhz3 小时前
Rust #[derive(Serialize)]浅析
开发语言·后端·rust
怪奇云呼军3 小时前
闪电智能 Voice Agent 怎样根据语速、停顿和追问方式切换话术?策略引擎拆解
开发语言·人工智能·网络协议·算法·语音识别·web app