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);
       
相关推荐
如若12317 分钟前
TRACER 论文解读与复现:面向 ICU 长时程患者监测的多模态 Harness 架构、时序证据建模与工具增强推理
人工智能·深度学习·计算机视觉
NamoAmitabha1281 小时前
ARM 不懂寄存器,它只懂内存地址--deepseek
fpga开发·zynq--ps
ZhengEnCi10 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考10 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
小豆庄11 小时前
本地视频打码:多模型检测、帧间追踪与18种模糊的选型
opencv·目标检测·ai·自然语言处理·音视频·视频
夜不会漫长12 小时前
C++:红黑树
数据结构·算法
爱聊灵光的维C12 小时前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程
AI备案指南-满满13 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor13 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David13 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法