Sobel边缘检测(matlab)

  1. 边缘检测是为了将其周围像素灰度有阶跃变化的像素检测出来,这些像素组成的集合就是该图像的边缘。比较常用的边缘检测方法就是考察每个像素在某个领域内灰度的变化,然后利用边缘临近一阶或二阶方向导数变化规律检测边缘,即边缘检测局部算法。
  2. 而常用的边缘检测算子有sobel,Roberts,Prewitt,Laplace等等,这里先介绍sobel算子的检测过程。主要的方法就是将图像的每一个点都用sobel算子做卷积:一个用来检测垂直边缘,一个用来检测水平边缘,而最后两个卷积的最大值将作为该点的输出,即检测后的灰度。
  3. Sobel算子:可以看到sobel算子包括两组3*3的矩阵,左边的表示垂直,右边的表示水平。将它与图像作平面卷积,即可分别得出垂直及水平的亮度差分近似值。
    这里写图片描述
    这里写图片描述
    主要的代码如下:
clear all; 
close all;
imag = imread('face7.jpg');  %读取关键帧
imag = rgb2gray(imag);        %转化为灰度图
subplot(131);imshow(imag):title('原图'); 
[high,width] = size(imag);   % 获得图像的高度和宽度
F2 = double(imag);        
U = double(imag);       
uSobel = imag;
for i = 2:high - 1   %sobel边缘检测
    for j = 2:width - 1
        Gx = (U(i+1,j-1) + 2*U(i+1,j) + F2(i+1,j+1)) - (U(i-1,j-1) + 2*U(i-1,j) + F2(i-1,j+1));
        Gy = (U(i-1,j+1) + 2*U(i,j+1) + F2(i+1,j+1)) - (U(i-1,j-1) + 2*U(i,j-1) + F2(i+1,j-1));
        uSobel(i,j) = sqrt(Gx^2 + Gy^2); 
    end
end 
subplot(132);imshow(im2uint8(uSobel)):title('边缘检测后');  %画出边缘检测后的图像
% Matlab自带函数边缘检测
% K为获取得到的关键帧的灰度图
BW3 = edge(imag,'sobel', 0.09);
subplot(133);imshow(BW3,[]):title('Matlab自带函数边缘检测');

如果想用matlab自带的其他算子进行边缘检测的话,直接将edge中的sobel参数修改即可
检测结果对比

  • 41
    点赞
  • 273
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值