边缘检测滤波器
来源:互联网 发布:怎么查看网页源码 编辑:程序博客网 时间:2024/06/16 01:36
图像中灰度变化较大的非连续像素可以看做是边缘,边缘是最为重要的图像特征之一,在目标检测、追踪、识别中都必不可少的使用到了边缘,人类视觉系统也对边缘信息非常敏感。如果在图像中检测到边缘并对其进行定位,那么对后续的算法将起到至关重要的作用。灰度的突然变化会在一阶导数中引起波峰或者波谷,或者在二阶导数中等效的引起零交叉。
在下面我们介绍一些边缘检测的方法。
- 一阶微分检测器
从数学上讲,像素的灰度值变化,可以用一阶微分来检测,对于二维离散函数,其微分可以表示为:∂x=f(x+1,y)−f(x,y)) ∂y=f(x,y+1)−f(x,y))
在进行离散图像处理的时候,上述运算可以通过,[-1 1]和[-1;1]两个模板来卷积完成,但是考虑到模板应该具有对称性,所以一般我们进行检测的模板大小都是(2n+1) x (2n+1)这样形式的,为此,我们利用下面的模板来进行一阶导数,虽然其领域变大了,但是我们仍然是处理的像素之间的差,因此,我们还是将其看做了一阶导数,这种最原始的边缘检测算子称为Prewitt算子:
如果将中心位置处的系数都换成2,那么我们可以得到如下图所示的Sobel算子。
Sobel算子具有对原始图像平滑的效果,因为如果对图像进行平滑,然后进行X方向上的滤波的话,我们可以证明如下:
正是因为这种平滑效果,使得Sobel的效果要好于Prewitt,并且也较为常用。
- 二阶微分检测器
二阶微分同样可以如一阶微分一样,检测到函数的变化。二阶微分其实就是拉普拉斯算子,一般使用下面的方法表示:
为了适应图像处理,我们将拉普拉斯算子写成离散形式,其中
因此最终结果为:
所以拉普拉斯算子在图像处理中的模板为:
如果我们考虑对角线方向和正负的话,我们可以得到如下几种拉普拉斯模板:
拉普拉斯算子对噪声和离散点极为敏感,所以在利用其进行边缘检测的时候,需要首先对图像进行平滑,除去噪声的影响。因为高斯运算和拉普拉斯运算可以叠加,我们可以将其的最终形式写为:
最终得到:
我们使用如下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滤波器的效果
%生产随机噪声信号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);
- OPenCV边缘检测滤波器
- 边缘检测滤波器
- 边缘检测:canny算子,sobel算子,laplace算子,scharr滤波器
- 5.4用形态学滤波器检测边缘和角点
- OpenCV使用Sobel滤波器实现图像边缘检测
- 基于Gabor滤波器的图像边缘检测实验
- OpenCV之十二 OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- 边缘检测综合-Canny算子,Sobel算子,Laplace算子,Scharr滤波器
- 边缘检测函数:Canny() Sobel() Laplacian()scharr滤波器
- OpenCV 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- opencv的Sobel导数、Scharr滤波器、Laplacian算子、Canny边缘检测
- 边缘检测综合示例——Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- 有关opencv的学习(17)—形态学滤波器检测边缘和角点
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑合辑
- OpenCV2编程手册笔记之 6.4高通滤波器检测边缘
- OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器
- opencv----边缘检测:canny算子、sobel算子、laplace算子、scharr滤波器
- 8基于opencv的边缘检测_Canny算子_Sobel算子_Laplace算子_Scharr滤波器
- CSS3 animation动画实现轮播图效果
- webstorm各个版本下载地址,和破解方法
- 程序8
- thymeleaf使用详解(1)
- 6个实例详解如何把if-else代码重构成高质量代码
- 边缘检测滤波器
- x86常用寄存器
- 设置mac自带的vim环境 语法高亮
- php中将一张图片缩略成200×200的新图片
- LeetCode-31-Next Permutation 贪心,排序
- [C++::STL]之vector的用法
- 120. Triangle
- 初识Spring(一)
- 【模板】Dinic求网络最大流