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);
       
相关推荐
fantasy_arch11 小时前
fpga demo测试hello world
fpga开发
沫璃染墨11 小时前
红黑树完全指南:从核心原理到插入验证全实现
开发语言·c++·算法
黑猫学长呀11 小时前
存储宝典第6篇:测试机台的PE板和PPB板有什么区别?
测试工具·fpga开发·ssd·芯片测试·ate·存储芯片·测试机台
拉拉拉拉拉拉拉马11 小时前
Windsurf 最新版进阶讲解:从 Cascade 到 Devin Local,重新理解 AI 编程工作流
人工智能·算法
嵌入式老牛11 小时前
液晶段码(米/日字格)识别—前言
opencv·段码
Mr_pyx11 小时前
面试题记录
jvm·数据结构·算法·spring·mybatis
zzzsde11 小时前
【Linux】线程同步和互斥(1):线程互斥与加锁实现
linux·运维·服务器·开发语言·算法
努力努力再努力wz11 小时前
【C++高阶数据结构系列】:时间轮定时器详解:原理分析与代码实现,带你从零手撕时间轮!(附时间轮的实现源码)
c语言·开发语言·数据结构·c++·qt·算法·ui
a flying bird11 小时前
【 LPIPS + 颜色保真 + 像素级相似度 + 生成逼真度的超分 / 图像增强】
人工智能·计算机视觉
mmz120712 小时前
广搜题目练习(c++)
c++·算法