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

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


在这里插入图片描述

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


在这里插入图片描述

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

  定义Prewitt算子如下:


在这里插入图片描述

  Prewitt算子计算方法:


在这里插入图片描述

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


在这里插入图片描述

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


在这里插入图片描述

  Sobel算子计算方法:


在这里插入图片描述

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


在这里插入图片描述

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

三、Laplacian算子

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

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

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


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

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


在这里插入图片描述

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


在这里插入图片描述

四、代码实现:

%由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算子检测');

结果
在这里插入图片描述

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('增强后');

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值