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);
       
相关推荐
c++逐梦人2 小时前
记忆化搜索(DFS)
算法·深度优先
阿Y加油吧2 小时前
二分查找进阶:搜索二维矩阵 & 查找元素首尾位置 深度解析
线性代数·算法·矩阵
SEO-狼术2 小时前
Visualize Org Charts and Decision Trees in WinForms
算法·决策树·机器学习
UltraLAB-F2 小时前
GPU显存不足时的分配策略:渲染与仿真的显存争夺战解决方案
图像处理·算法·3d·ai·硬件架构
沐苏瑶2 小时前
Java算法之排序
java·算法·排序算法
Ricky111zzz2 小时前
leetcode学python记录2
python·算法·leetcode·职场和发展
查古穆2 小时前
二分查找-搜索二维矩阵
算法
会编程的土豆2 小时前
【数据结构与算法】堆排序
开发语言·数据结构·c++·算法·leetcode
会编程的土豆2 小时前
【数据结构与算法】希尔排序
数据结构·c++·算法·排序算法