MATLAB的几种边缘检测算子(Sobel、Prewitt、Laplacian)

MATLAB的几种边缘检测算子(Sobel、Prewitt、Laplacian)

Matlab 复制代码
clc;close all;clear all;warning off;%清除变量
rand('seed', 100);
randn('seed', 100);
format long g;


% 读取图像
image = imread('lena.png');
% 转换为灰度图像
gray_image = rgb2gray(image);
% 转换为double类型以进行计算
gray_image = double(gray_image);

% 定义Sobel算子
sobel_x = [-1 0 1; -2 0 2; -1 0 1];
sobel_y = [1 2 1; 0 0 0; -1 -2 -1];

% 计算图像大小
[height, width] = size(gray_image);
% 初始化输出图像
edge_image = zeros(height, width);

% 对图像进行卷积以检测边缘
for i = 2:height-1
    for j = 2:width-1
        % 提取3x3邻域
        neighborhood = gray_image(i-1:i+1, j-1:j+1);
        % 计算x和y方向的梯度
        gradient_x = sum(sum(sobel_x .* neighborhood));
        gradient_y = sum(sum(sobel_y .* neighborhood));
        % 计算梯度幅度
        gradient_magnitude = sqrt(gradient_x^2 + gradient_y^2);
        % 设置阈值,将梯度幅度大于阈值的像素点视为边缘
        if gradient_magnitude > 20
            edge_image(i, j) = 1;
        end
    end
end

% 显示结果
figure;
imshow(image);
title('原图');

figure;
imshow(edge_image);
title('Sobel边缘检测');



% 定义Prewitt算子
prewitt_x = [-1 0 1; -1 0 1; -1 0 1] / 3;
prewitt_y = [-1 -1 -1; 0 0 0; 1 1 1] / 3;

% 使用MATLAB内置函数conv2进行卷积
gradient_x = conv2(gray_image, prewitt_x, 'same');
gradient_y = conv2(gray_image, prewitt_y, 'same');

% 计算梯度幅度
gradient_magnitude = sqrt(gradient_x.^2 + gradient_y.^2);

% 设置阈值并进行二值化处理,得到边缘图像
edge_image = gradient_magnitude > 0.1; % 阈值可根据实际情况调整

% 显示原图像

% 显示边缘检测后的图像
figure;
imshow(edge_image);
title('Prewitt边缘检测');

% 定义Laplacian算子
laplacian_mask = [0 1 0; 1 -4 1; 0 1 0];

% 使用MATLAB内置函数conv2进行卷积
laplacian_image = conv2(gray_image, laplacian_mask, 'same');

% Laplacian算子会增强图像中的噪声,因此通常需要先对图像进行平滑处理
% 这里我们可以使用Gaussian滤波进行平滑
smoothed_image = imgaussfilt(gray_image, 2); % 第二个参数是高斯核的标准差
laplacian_image_smoothed = conv2(smoothed_image, laplacian_mask, 'same');

% 为了可视化,将Laplacian处理后的图像进行零均值化处理
laplacian_image_smoothed = laplacian_image_smoothed - mean(laplacian_image_smoothed(:));



% 显示Laplacian边缘检测后的图像
figure;
imshow(laplacian_image_smoothed); % []使得imshow自动调整显示范围
title('Laplacian边缘检测');
相关推荐
chen_zn951 分钟前
《VLA 系列》Human-to-Robot Transfer | 人类视频共训练 | 跨本体涌现迁移 | 论文解析
人工智能·深度学习·transformer·具身智能·vla
CCC:CarCrazeCurator6 分钟前
DeepSeek‑Harness Windows 本地快速上手
深度学习·数据挖掘
还不秃顶的计科生1 小时前
具身智能论文学习8:Octo: An Open-Source Generalist Robot Policy
人工智能·深度学习·学习·机器学习·语言模型·vla·vlm
lucas_AI2 小时前
1.2B 小模型赢过 235B 大模型:NaviDC-OCR 把文档解析卷明白了
人工智能·深度学习·算法
杀生丸学AI2 小时前
【稀疏重建】StructSplat:基于非校准稀疏视图的可泛化3DGS
深度学习·3d·音视频·transformer·三维重建·空间智能
qfljg4 小时前
如何学习opencode和openclaw源码
深度学习
在世修行4 小时前
深度图像数据格式与RAW文件解析:从字节到三维世界的桥梁
人工智能·数码相机·计算机视觉
zhenaibo5215 小时前
摘要、研究背景、文献综述AI风险高,怎么优化?
人工智能·深度学习·自然语言处理
hhzz7 小时前
Tiger AI 平台「手势识别」功能全解析:从数字手势 0–9,到中国手语字母,再到本地视频批量识别——一条链路,三种输入,双模型可同开;双手比划,机器秒懂
人工智能·python·深度学习·aigc·音视频
AndrewHZ7 小时前
图像处理入门006:图像质量评价三剑客:PSNR / SSIM / MSE 原理与代码实战
图像处理·计算机视觉·cv·psnr·rse·ssim