美文网首页
边缘检测滤波器

边缘检测滤波器

作者: 学而时习之_不亦说乎 | 来源:发表于2017-07-29 05:54 被阅读259次

图像中灰度变化较大的非连续像素可以看做是边缘,边缘是最为重要的图像特征之一,在目标检测、追踪、识别中都必不可少的使用到了边缘,人类视觉系统也对边缘信息非常敏感。如果在图像中检测到边缘并对其进行定位,那么对后续的算法将起到至关重要的作用。灰度的突然变化会在一阶导数中引起波峰或者波谷,或者在二阶导数中等效的引起零交叉。
在下面我们介绍一些边缘检测的方法。

  • 一阶微分检测器
    从数学上讲,像素的灰度值变化,可以用一阶微分来检测,对于二维离散函数,其微分可以表示为:
    Prewitt算子

如果将中心位置处的系数都换成2,那么我们可以得到如下图所示的Sobel算子。


Sobel算子

Sobel算子具有对原始图像平滑的效果,因为如果对图像进行平滑,然后进行X方向上的滤波的话,我们可以证明如下:



因此最终结果为:


所以拉普拉斯算子在图像处理中的模板为:


如果我们考虑对角线方向和正负的话,我们可以得到如下几种拉普拉斯模板:


几种拉普拉斯滤波器模板

拉普拉斯算子对噪声和离散点极为敏感,所以在利用其进行边缘检测的时候,需要首先对图像进行平滑,除去噪声的影响。因为高斯运算和拉普拉斯运算可以叠加,我们可以将其的最终形式写为:


推导

最终得到:


高斯拉普拉斯

我们使用如下Matlab来看看LoG函数的样子

laplace_gaussian_filter = fspecial('log',[40 40],4.5);
subplot(121)
surf(laplace_gaussian_filter);
subplot(122)
surf(-laplace_gaussian_filter);
LoG函数,以及其倒过来的样子

如果把LoG函数倒过来,它的样子很像“墨西哥草帽”,所以它也被称作墨西哥草帽算子。使用LoG算子时,由于高斯滤波的原因,它会在尺寸上将结构的灰度(包括噪声)降低到远小于 σ的程度。下面我利用一个实验来看看LoG滤波器的效果

%生产随机噪声信号
D = rand(1,200)*0.5;
%产生一个阶跃信号
E = [zeros(1,100),5*ones(1,100)];
%将两个信号相加,得到我们进行处理的信号
S = E + D;

%首先定义滤波器
laplace_filter = fspecial('laplacian');
laplace_gaussian_filter = fspecial('log',[20 20],3);
gaussian_filter = fspecial('gaussian',20,3);

figure 
subplot(231)
plot(S);
title('原始信号')

subplot(232);
surf(G);
title('高斯滤波器')

guassian_signal = imfilter(S,gaussian_filter,'symmetric');
subplot(233);
plot(guassian_signal);
title('高斯滤波后信号');

laplace_gaussian_signal = imfilter(guassian_signal,laplace_filter,'symmetric');
subplot(234);
plot(laplace_gaussian_signal);
title('对高斯滤波后的信号施加拉普拉斯算子');

Log_signal  = imfilter(S,laplace_gaussian_filter,'symmetric');
subplot(235)
plot(Log_signal);
title('直接在原始信号上LoG算子');

laplace_signal = imfilter(S,laplace_filter,'symmetric');
subplot(236)
plot(laplace_signal);
title('直接在原始信号上施加拉普拉斯算子');

可视化

两个不同σ值的高斯滤波器的差,可以用来近似LoG滤波器。这一点不难想象,因为高斯滤波器是低通滤波器,两个低通滤波器的差可以构成一个带通滤波器(LoG是带通滤波器)(这一点在图像金字塔中有提及),我们可以通过一个简单的Matlab实验来实现。

gaussian_filter_1 = fspecial('gaussian',40,8);
gaussian_filter_2 = fspecial('gaussian',40,6);
T = gaussian_filter_2 - gaussian_filter_1;
subplot(131)
surf(gaussian_filter_1);
subplot(132)
surf(gaussian_filter_2);
subplot(133)
surf(T);
利用高斯滤波器之差来构成LoG

相关文章

  • python 3+opencv 3.4(四)--处理图像

    一. 高通滤波器: 检测图像的某个区域,然后根据像素和周围像素亮度差值来提升该像素亮度的滤波器--适用于边缘检测。...

  • 边缘检测滤波器

    图像中灰度变化较大的非连续像素可以看做是边缘,边缘是最为重要的图像特征之一,在目标检测、追踪、识别中都必不可少的使...

  • opencv 滤波器 边缘检测

  • (iOS)滤波器(边缘检测)

    https://www.jianshu.com/p/986ecd36537eCore Image框架详细解析(一)...

  • Canny边缘检测

    边缘检测一般步骤 使用高斯滤波 在x和y方向上使用Sobel滤波器,在此之上求出边缘的强度和边缘的梯度 对梯度幅值...

  • 卷积滤波器与边缘检测

    频率:对于声音,频率实际上是指声波振荡的速度 高低频率高频图像是强度变化很大的图像。并且亮度级别从一个像素到下一个...

  • Scharr(iOS)滤波器(边缘检测)

    我们一般直接称scharr为滤波器,而不是算子 计算图像差分:Scharr()函数 void Scharr( In...

  • canny边缘检测

    参考链接,原作者写的非常棒opencv官方文档解释 Canny边缘检测算法可以分为以下5个步骤: 使用高斯滤波器,...

  • OpenCV--边缘检测

    Canny边缘检测 1 使用高斯滤波器,以平滑图像,滤除噪声。 2 计算图像中每个像素点的梯度强度和方向。 3 应...

  • openCV:Canny边缘检测

    Canny边缘检测的步骤 使用高斯滤波器,以平滑图像,滤除噪声。 计算图像中每个像素点的梯度强度和方向。 应用非极...

网友评论

      本文标题:边缘检测滤波器

      本文链接:https://www.haomeiwen.com/subject/ghjqlxtx.html