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参数修改即可
检测结果对比

你可能感兴趣的:(数字图像处理)