博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LoG和DoG
阅读量:5057 次
发布时间:2019-06-12

本文共 934 字,大约阅读时间需要 3 分钟。

Laplacian of Gaussian(LoG)

Difference of Gaussian(DoG)

一幅图像可以引出两种观点:

第一,将图像看作是像素的集合,对于计算机来说,这是一种直观并且合适的观点。

第二,将图像看作是在x,y方向的二维函数,而计算机中的表示是对这个连续函数的采样。

图像边界的检测的一种方法是使用梯度算子(Roberts, Sobel and Prewitt),这些方法的原理是计算图像每个点的梯度。当梯度大于某个阈值的时候即将这个像素认定为边界像素。

但是,使用梯度算子效果并不好。特别当图像的灰度值变化比较慢的时候。这时候梯度算子会产生一条很宽的边界,或者由于梯度小于阈值而检测不到。这时一个很直观的想法是使用拉普拉斯算子。

拉普拉斯算子(The Laplace Operator)的定义:

它是对于像素点X,Y方向上二次偏导的和。

由于图像实际是离散像素形式,所以对于图像作用拉普拉斯算子可以转化为对于图像进行离散卷积运算。我们知道,在离散状态,导数(偏导)可以用差分近似。

 

\begin{displaymath} \bigtriangleup = \bigtriangledown^2 =\bigtriangledown \cdot ... ... x_N}\right)^T =\sum_{n=1}^N \frac{\partial^2}{\partial x_n^2} \end{displaymath}  : N = 2  
  : $\displaystyle f[m+1,n]+f[m-1,n]+f[m,n+1]+f[m,n-1]-4f[m,n]$

于是图像在(m,n)点作用拉普拉斯算符后的值约等于对该点进行离散卷积,卷积核为:

\begin{displaymath}\bigtriangleup f(x,y) =\frac{\partial^2 f}{\partial x^2}+\frac{\partial^2 f}{\partial y^2} \end{displaymath} 。

由于可以有多种近似方式,所以该卷积核不唯一。

 

对于一幅图像进行上述离散卷积后,可以得到一幅新图像,该图像每个像素的值约等于该点作用拉普拉斯算符后的值,及该点X,Y方向上二次偏导的和。

值得注意的是,施加离散卷积后的像素值等于0的点并不能作为图像的边界,正确的做法是对于一个像素的邻域(3×3,5×5,etc.)进行分析,如果其中有一个像素值大于0,一个小于0,则认为这个像素为边界。

下面进入正题:

由于采用拉普拉斯算子后对于那些孤立点的噪声很敏感,一个自然的想法是先对图像进行平滑处理,以减少噪声。\begin{displaymath} \bigtriangleup[G_{\sigma}(x,y) * f(x,y)]=[\bigtriangleup G_{\sigma}(x,y)] * f(x,y)=LoG*f(x,y) \end{displaymath} 

其中*表示卷积运算(连续),该结论表明可以将高斯和拉普拉斯统一为LoG算子。

LoG的定义为:

\begin{displaymath} LoG \stackrel{\triangle}{=}\bigtriangleup G_{\sigma}(x,y)=\f... ...) =\frac{x^2+y^2-2\sigma^2}{\sigma^4}e^{-(x^2+y^2)/2\sigma^2} \end{displaymath} 

在离散状态下,通过对LoG采样形成离散卷积。比如:

\begin{displaymath} \left[ \begin{array}{ccccc} 0 & 0 & 1 & 0 & 0 \\ 0 & 1 &... ... 0 & 1 & 2 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 \end{array} \right] \end{displaymath} 

DoG的定义是两个高斯卷积的差分,即:

\begin{displaymath}g_1(x,y)-g_2(x,y)=G_{\sigma_1}*f(x,y)-G_{\sigma_2}*f(x,y) =(G_{\sigma_1}-G_{\sigma_2})*f(x,y)=DoG*f(x,y) \end{displaymath} 

未完待续。。

 

转载于:https://www.cnblogs.com/mantic-block/archive/2012/11/24/2747301.html

你可能感兴趣的文章
C# 实现Bresenham算法(vs2010)
查看>>
基于iSCSI的SQL Server 2012群集测试(一)--SQL群集安装
查看>>
list 容器 排序函数.xml
查看>>
存储开头结尾使用begin tran,rollback tran作用?
查看>>
Activity启动过程中获取组件宽高的五种方式
查看>>
java导出Excel表格简单的方法
查看>>
SQLite数据库简介
查看>>
利用堆实现堆排序&优先队列
查看>>
Mono源码学习笔记:Console类(四)
查看>>
Android学习路线(十二)Activity生命周期——启动一个Activity
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
App.config自定义节点读取
查看>>
unity3d根据手机串号和二维码做正版验证
查看>>
二十六、Android WebView缓存
查看>>
django Models 常用的字段和参数
查看>>