Sobel边缘检测算子数学原理再学习

Sobel边缘检测算子数学原理再学习

一.Sobel数学原理分析

  参考《History and Definition of the so-called "Sobel Operator",more appropriately named the Sobel-Feldman Operator》,《Expansion and Implementation of a 3x3 Sobel and Prewitt Edge Detection Filter to a 5x5 Dimension Filter》,并结合之前彭真明老师的博客,再一次学习了Sobel边缘检测算子的数学原理,并结合上述两篇参考文献所阐述的思路自己动手计算了5*5 Kernel所对应的Sobel算子系数,结果发现彭真明老师博客(Sobel算子的数学基础)所阐述的原理解析存在一定错误。

彭老师博文中提到Soble算子具有严格的数学基础,主要的关键点在于:

  1. 笛卡尔网格
  2. 前向差分
  3. 距离方向的四方向对梯度加权
  4. 城市距离

 

对比文献2中的一段话:

“To be more specific, we will refer here to the image function as a "density" function. (It could just as well be an "intensity" function - the difference depends on the physical

nature of the image source.) For a 3x3 neighborhood each simple central gradient estimate is a vector sum of a pair of orthogonal vectors. Each orthogonal vector is a directional

derivative estimate multiplied by a unit vector specifying the derivative's direction. The vector sum of these 4 simple gradient estimates amounts to a vector sum of the 8 directional derivative vectors”。

 

Thus for a point on a Cartesian grid and its eight neighbors

having density values as shown

abc
def
ghi

we define the magnitude of the directional derivative estimate

vector 'g' for a given neighbor as

|g| = <density difference>/<distance to neighbor>

 

上述英文大体意思为:对于3*3邻域中心梯度可以通过一系列正交向量之和求得。每一个正交向量是一个的方向导数,可以通过其导数(对于图像而言可用中心差表示)乘以表示导数方向的单位向量所确定。

并定义其方向导数的幅值为:

即方向导数幅值|g| =<灰度差>/<相邻像素之间的距离>

那么,在e点的梯度可以通过邻域内方向导数的幅值乘以对应的单位向量所对应的向量求和求的

而我们知道函数中某一点的梯度是一个这样的向量,它的方向与取得最大方向导数的方向一致,它的模为方向导数的最大值。梯度即函数在某一点最大的方向导数,梯度沿着方向导数有最大的变化率。

Sobel表示的数学公式也与函数的梯度类似。由于是正交向量相加减,最后的结果肯定会指向最大方向导数的方向。图像边缘也是沿着某一方向具有最大变化,其导数幅值最大,根据公式求出该点的梯度正好符合边缘灰度值的变化趋势。因此,Sobel能够检测各种方向边缘。我们常见的都是水平和竖直边缘,当然也可以检测45°、135°斜边边缘,不过其模板需要重新再计算。

由以上分析可知,至少彭老师所阐述的第二点、第三点、第四点存在错误。

更正确的表述为:

  1. 笛卡尔网格
  2. 中心差分
  3. 由导数和对应的单位向量所定义的方向导数所构成的正交向量求和
  4. 欧氏距离

二.3*3 kernel Sobel算子计算

根据上述原理的分析,我们来重新计算其Sobel算子模板参数。我们定义笛卡尔网格为:

abc
def
ghi

字母表示其灰度值,对应所表示的笛卡尔坐标坐标值为:

我们根据坐标的向量知识以及像素距离知识可知,计算其e点的梯度为:

由于我们是以X轴为横向基向量,Y轴为纵向基向量,故其x方向梯度和y方向梯度可以表示为:

 经过验证,其计算出来的结果与Sobel算子一致。

 

三.5*5 Kernel Sobel算子计算

理解了3*3 Kernel Sobel算子构建的基本原理,那么我们很容易构建出5*5 Kernel Sobel算子模板各参数。让我们开始吧!

 

点对(3,3)(1,1)构成的向量[2,2]和点对(1,3)(3,1)构成的向量[-2,2],其点积为0,互为正交向量;即ir 向量和gt向量互为正交向量

点对(1,4)(3,0)构成的向量[-2,4]和点对(4,3)(0,1)构成的向量[4,2],其点积为0,互为正交向量;即by向量和jp向量互为正交向量;

点对(3,4)(1,0)构成的向量[2,4]和点对(0,3)(4,1)构成的向量[-4,2],其点积为0,互为正交向量;即dw向量和fu向量互为正交向量;

同理可得:

ok向量和cx向量互为正交向量;

ev向量和az向量互为正交向量;

hs向量和nl向量互为正交向量;

如下图所示:

按照3*3 Sobel算子计算方法,我们可以计算的到其5*5 Sobel算子参数为:

 

因此,5*5 Sobel算子按照X,Y方向可以写成: 

  • 3*3 Sobel算子和5*5 Kernel Sobel算子边缘检测结果比较

 

从左至右分别是3*3 soble 5*5Soble计算结果

 

参考文献:

Expansion and Implementation of a 3x3 Sobel and Prewitt Edge Detection Filter to a 5x5 Dimension Filter

An Isotropic 3x3 Image Gradient Operator

 

 

 

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值