Sobel边缘检测的MATLAB实现

本文实现了一个基于Sobel算子的图像边缘检测算法。算法首先读取灰度图像,定义水平和垂直方向的Sobel卷积核,然后对图像进行卷积运算计算梯度幅值。通过设定阈值(默认220)将梯度幅值二值化,大于阈值的像素点标记为边缘(1),否则为背景(0)。处理过程中考虑了图像边界问题,最终输出二值化的边缘检测结果图。该算法能有效提取图像中的边缘特征,通过调整阈值可以控制边缘检测的灵敏度。

Matlab 复制代码
% function Q = soble_detector(IMG,thresh)

clear all; close all; clc;
IMG = rgb2gray(imread('../素材/0_images/Scart.jpg'));     % 读取jpg图像
imshow(IMG);

thresh = 220;
[h,w] = size(IMG);
Q = ones(h,w);

% ----------------------------------------------------
%   Gx               Gy                 Pixel
% [-1 0 1]     [-1 -2 -1]       [p1  p2  p3]
% [-2 0 2]     [ 0   0  0]       [p4  p5  p6]
% [-1 0 2]     [ 1   2  1]       [p7  p8  p9]
sobel_x = [-1,0,1,-2,0,2,-1,0,1];
sobel_y = [-1,-2,-1,0,0,0,1,2,1];

img_gray = double(IMG);
img_sobel = ones(h,w);

n = 3;
for i = 1 : h
    for j = 1 : w
        if(i<(n-1)/2+1 || i>h-(n-1)/2 || j<(n-1)/2+1 || j>w-(n-1)/2)
            img_sobel(i,j) = 0;
        else
            temp1 = sobel_x(1)*img_gray(i-1,j-1) + sobel_x(2)*img_gray(i-1,j) + sobel_x(3)*img_gray(i-1,j+1) +...
                            sobel_x(4)*img_gray(i,j-1) + sobel_x(5)*img_gray(i,j) + sobel_x(6)*img_gray(i,j+1) +...
                            sobel_x(7)*img_gray(i+1,j-1) + sobel_x(8)*img_gray(i+1,j) + sobel_x(9)*img_gray(i+1,j+1);
            temp2 = sobel_y(1)*img_gray(i-1,j-1) + sobel_y(2)*img_gray(i-1,j) + sobel_y(3)*img_gray(i-1,j+1) +...
                            sobel_y(4)*img_gray(i,j-1) + sobel_y(5)*img_gray(i,j) + sobel_y(6)*img_gray(i,j+1) +...
                            sobel_y(7)*img_gray(i+1,j-1) + sobel_y(8)*img_gray(i+1,j) + sobel_y(9)*img_gray(i+1,j+1);
            temp3 = sqrt(temp1^2 + temp2^2);
            if (uint8(temp3) > thresh)
                img_sobel(i,j) = 1;
%                 img_sobel(i,j) = uint8(temp3);
            else
                img_sobel(i,j) = 0;
            end
        end
    end
end

Q = img_sobel;
figure;
imshow(img_sobel);
       
相关推荐
cskywit几秒前
用扩散模型“一次生成图像和标注”:CoSimGen 如何实现可控的图像-Mask 同步生成
人工智能·深度学习·计算机视觉
EdmundXjs7 分钟前
大模型核心概念解读
人工智能·算法
lookaroundd9 分钟前
llm-compressor 普通量化调用链分析
python·算法
小羊在睡觉23 分钟前
力扣239. 滑动窗口最大值
数据结构·后端·算法·leetcode·go
人工智能培训24 分钟前
中国人工智能培训网—AI系列录播课
大数据·人工智能·机器学习·计算机视觉·知识图谱
兰令水26 分钟前
topcode【随机算法题】【2026.5.20打卡-java版本】
java·开发语言·算法
此生决int36 分钟前
算法从入门到精通——前缀和
c++·算法·蓝桥杯
大大杰哥1 小时前
leetcode hot100(4)矩阵
算法·leetcode·矩阵
小白|1 小时前
cmake:昇腾CANN构建系统完全指南
java·c++·算法
nebula-AI1 小时前
人工智能导论:模型与算法(未来发展与趋势)
人工智能·神经网络·算法·机器学习·量子计算·automl·类脑计算