当前位置: 首页 > news >正文

谈Sobel算子的数学推导——原来是四个方向的相加

An Isotropic 3x3 Image Gradient Operator

看了Sobel算子的作者Irwin Sobel解释Sobel算子的推导,才知道Sobel算子中的系数不是拍脑袋想的。
在这里插入图片描述

原文表述的不清晰,我这里对原文做解释。
本质是四个方向一阶中心差分的相加, h h h为街区距离

目录

  • 基础知识
    • 一阶中心差分
    • 街区距离
    • 梯度
  • Sobel的推导
      • 四个方向的一阶中心差分

基础知识

一阶中心差分

对于一个函数 f ( x ) f(x) f(x),在点 x x x 处的一阶中心差分可以表示为:

f ′ ( x ) ≈ f ( x + h ) − f ( x − h ) 2 h f'(x) \approx \frac{f(x + h) - f(x - h)}{2h} f(x)2hf(x+h)f(xh)

其中, h h h 是一个小的正数,表示步长。

街区距离

在这里插入图片描述

梯度

原文是笛卡尔坐标系,我这里用图像坐标系。
在这里插入图片描述

首先是梯度的定义,一阶导数有方向,函数值增加最快的方向。
在这里插入图片描述在这里插入图片描述
把它理解为考虑两个方向的相加,向量相加符合:

三角形法则:将一个向量的尾部连接到另一个向量的头部,结果向量是从第一个向量的起点指向最后一个向量的终点的向量。
平行四边形法则:当两个向量从同一点出发时,以这两个向量为邻边构造一个平行四边形,结果向量就是从起点指向对角线另一端的向量。

f ( x , y ) f(x,y) f(x,y) 是一个二维离散函数,
∇ f ( x , y ) ≈ f ( x + 1 , y ) − f ( x − 1 , y ) 2 [ 1 0 ] + f ( x , y + 1 ) − f ( x , y − 1 ) 2 [ 0 1 ] \begin{aligned} \nabla f(x,y) \approx &\frac{f(x+1,y) - f(x-1,y)}{2} \begin{bmatrix} 1 \\0 \end {bmatrix} \\ &+ \frac{f(x,y+1) - f(x,y-1)}{2} \begin{bmatrix} 0 \\1 \end {bmatrix} \\ \end{aligned} f(x,y)2f(x+1,y)f(x1,y)[10]+2f(x,y+1)f(x,y1)[01]

Sobel的推导

使用四个方向上的差分的求和作为二维离散函数梯度的估计。

“Numerical analysis teaches us that for certain classes of surfaces an even better
estimate is obtained using a weighted average of three such central differences … These
expressions produce excellent estimates for the components of the gradient of the central point”.

四个方向的一阶中心差分

街区距离中, x x x方向和 y y y方向 h = 1 h=1 h=1 x y xy xy方向和 − x y -xy xy方向 h = 2 h=2 h=2

  • x x x方向: f ( x + 1 , y ) − f ( x − 1 , y ) 2 \frac{f(x+1,y)-f(x-1,y)}{2} 2f(x+1,y)f(x1,y)
  • y y y方向: f ( x , y + 1 ) − f ( x , y − 1 ) 2 \frac{f(x,y+1)-f(x,y-1)}{2} 2f(x,y+1)f(x,y1)
  • x y xy xy方向: f ( x + 1 , y + 1 ) − f ( x − 1 , y − 1 ) 4 \frac{f(x+1,y+1)-f(x-1,y-1)}{4} 4f(x+1,y+1)f(x1,y1)
  • − x y -xy xy方向: f ( x − 1 , y + 1 ) − f ( x + 1 , y − 1 ) 4 \frac{f(x-1,y+1)-f(x+1,y-1)}{4} 4f(x1,y+1)f(x+1,y1)

f ( x , y ) f(x,y) f(x,y) 是一个二维离散函数,它的梯度可以由4个方向相加进行估计:

∇ f ( x , y ) ≈ f ( x + 1 , y ) − f ( x − 1 , y ) 2 [ 1 0 ] + f ( x , y + 1 ) − f ( x , y − 1 ) 2 [ 0 1 ] + f ( x + 1 , y + 1 ) − f ( x − 1 , y − 1 ) 4 [ 1 1 ] + f ( x − 1 , y + 1 ) − f ( x + 1 , y − 1 ) 4 [ − 1 1 ] \begin{aligned} \nabla f(x,y) \approx &\frac{f(x+1,y) - f(x-1,y)}{2} \begin{bmatrix} 1 \\0 \end {bmatrix} \\ &+ \frac{f(x,y+1) - f(x,y-1)}{2} \begin{bmatrix} 0 \\1 \end {bmatrix} \\ &+ \frac{f(x+1,y+1) - f(x-1,y-1)}{4} \begin{bmatrix} 1 \\1 \end {bmatrix} \\ & + \frac{f(x-1,y+1) - f(x+1,y-1)}{4} \begin{bmatrix} -1 \\1 \end {bmatrix} \end{aligned} f(x,y)2f(x+1,y)f(x1,y)[10]+2f(x,y+1)f(x,y1)[01]+4f(x+1,y+1)f(x1,y1)[11]+4f(x1,y+1)f(x+1,y1)[11]

整理出 x x x y y y 两个方向。
在这里插入图片描述在这里插入图片描述

本应该除以4做平均,但是尺度不重要,那个时候计算能力不行,为了是整数,乘以4,就成了开篇的Sobel模板。实际是平均值的16倍。

一阶差分有方向,二阶差分没方向,拉普拉斯的原理和这个原理异曲同工。

冈萨雷斯的解释是加权平滑,这不是2的目的,但是可以做个解释。
在这里插入图片描述
在这里插入图片描述


http://www.mrgr.cn/news/51639.html

相关文章:

  • Linux驱动 --- AP3216C三合一环境光传感器驱动
  • 邻接矩阵表示法创建无向图
  • C++中的initializer_list类
  • 计算机挑战赛9
  • Gin框架操作指南02:JSON渲染
  • YoloV10改进:Neck层改进|使用ContextAggregation模块改善Neck的输出特征|即插即用
  • HarmonyOS开发(ArkUI简单使用)
  • 基本计算器 II
  • stm32启动时用到的systeminit、__main说明
  • 使用IMX6UL实现UART串口通信
  • 网络编程(21)——通过beast库快速实现http服务器
  • Shiro认证
  • 2. MySQL数据库基础
  • 本地typora编辑的.md文件上传到【语雀】->【CSDN】
  • Java-IO流使用场景
  • 4、CSS3笔记
  • 【Web前端概述】
  • mybatis-plus的Iservice接口的save方法,返回true,但是数据库表里却没有看到新记录
  • torchserve在转转GPU推理服务架构下的实践
  • 教学资料管理|基于springBoot的教学资料管理系统设计与实现(附项目源码+论文+数据库)