简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理

一、算子简介
  在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率,根据导数的定义有:


在这里插入图片描述

  在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数,根据定义有:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第1张图片

二、Prewitt算子和Sobel算子
  Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。
  prewitt算子对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像素平均相当于对图像的低通滤波,低通滤波会造成高频的信息丢失,从而使图像模糊,无论这种程度或大或小,这种操作后的结果是存在的。

  定义Prewitt算子如下:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第2张图片

  Prewitt算子计算方法:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第3张图片

  水平方向,垂直方向,对角线方向梯度:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第4张图片

  Sobel算子是prewitt算子的改进形式,改进之处在于sobel算子认为,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越远,产生的影响越小。正因为Sobel算子对于像素的位置的影响做了加权,与Prewitt算子、Roberts算子相比因此效果更好。相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声。 sobel要比prewitt更能准确检测图像边缘。
  定义Sobel算子:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第5张图片

  Sobel算子计算方法:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第6张图片

  水平方向和垂直方向梯度:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第7张图片

  由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,即Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。

三、Laplacian算子

  拉普拉斯提取边缘属于使用二阶导提取边缘,它是一种各向同性的边缘提取算子。各向同性就是指使用这一个算子,就能对任何走向的界线和线条进行锐化,无方向性。而像sobel等,它们在提取x、y方向的边缘都是使用不同的算子来实现的。这拉普拉斯算子区别于其他一阶微分算子的优点。但是它的缺点相比较于一阶微分就是对噪声敏感。它对孤立像素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图像。正因为拉普拉斯算子对孤立点和噪声敏感。我们在使用拉普拉斯算子提取边缘之前,先使用高斯平滑图像,这一过程就是Laplacian-Gauss(LOG)算子。它把的高斯平滑滤波器和Laplacian锐化滤波器结合了起来,先平滑掉噪声,再进行边缘检测,所以效果会更好。
  Laplacian算子计算方法:

在这里插入图片描述
在这里插入图片描述

  其对应的矩阵形式分别如下:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第8张图片
简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第9张图片

  在用lapacian算子图像进行卷积运算时,当响应的绝对值超过指定阈值时,那么该点就是被检测出来的孤立点,具体输出如下:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第10张图片

  此外在平时的使用中还有以下2种扩展形式的拉普拉斯算子:


简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第11张图片

四、代码实现:

%由edge函数实现各算子对图像的边缘检测
clear all;
clc;
I = imread('lena.jpg');
I=rgb2gray(I);
BW1 = edge(I,'sobel');   %利用Sobel算子进行边缘检测
BW2 = edge(I,'roberts');  %利用roberts算子进行边缘检测
BW3 = edge(I,'prewitt');  %利用prewitt算子进行边缘检测
BW4 = edge(I,'log');     %利用log算子进行边缘检测
BW5 = edge(I,'canny');   %利用canny算子进行边缘检测
subplot(2,3,1),imshow(I);title('原始图像');
subplot(2,3,2),imshow(BW1);title('Sobel算子检测');
subplot(2,3,3),imshow(BW2);title('roberts算子检测');
subplot(2,3,4),imshow(BW3);title('prewitt算子检测');
subplot(2,3,5),imshow(BW4);title('log算子检测');
subplot(2,3,6),imshow(BW5);title('canny算子检测');

结果
简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第12张图片

Laplacian算子程序:

clc;
clear;
close all;
% img = imread('images/lena_gray.jpg');
img = imread('lena.jpg');
img =im2double(img);
% 拉普拉斯算子形式1
% lapla =[0,-1,0;-1,4,-1;0,-1,0];
% 拉普拉斯算子形式2
lapla =[0,1,0;1,-4,1;0,1,0];
img_lapla = imfilter(img,lapla,'replicate','same');
figure;imshow(img_lapla);title('拉普拉斯');
% 使用形式1时要相加
% img_f = img +img_lapla;
% 使用形式2时要相减
img_f = img -img_lapla;
%使用下面的语句会使图像变得模糊而不是增强
%img_f = img +img_lapla;
figure;imshow(img_f);title('增强后');

结果
简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第13张图片
简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理_第14张图片

你可能感兴趣的:(图像处理算子)