zoukankan      html  css  js  c++  java
  • 图像梯度(Image Gradient)


    图像梯度的定义(离散)

    对于一个二元函数 F ( x , y ) F(x,y) F(x,y)来说,其偏导数的定义为:

    δ F ( x , y ) δ x = lim ⁡ ϵ → 0 F ( x + ϵ , y ) − F ( x , y ) ϵ frac {delta F(x,y)}{delta x}=displaystyle lim_{epsilon ightarrow 0}frac {F(x+epsilon,y)-F(x,y)}{epsilon} δxδF(x,y)=ϵ0limϵF(x+ϵ,y)F(x,y)
    这是沿着x方向的定义。这种定义适用于连续函数,而图像是二维的离散函数, ϵ epsilon ϵ不能无限趋近于0,最小只能是1个像素,因此我们使用有限差分来近似计算梯度。上面的公式变为:
    X : δ F ( x , y ) δ x ≈ F ( x + 1 , y ) − F ( x , y ) 1 X:frac {delta F(x,y)}{delta x}approxfrac {F(x+1,y)-F(x,y)}{1} X:δxδF(x,y)1F(x+1,y)F(x,y)
    同理y方向的定义为:
    Y : δ F ( x , y ) δ x ≈ F ( x , y + 1 ) − F ( x , y ) 1 Y:frac {delta F(x,y)}{delta x}approxfrac {F(x,y+1)-F(x,y)}{1} Y:δxδF(x,y)1F(x,y+1)F(x,y)
    这种近似计算的方式属于前向差分。


    图像梯度理解

    在数学上,梯度的本意是一个向量,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

    N元函数在每一个点的梯度是一个由在N个方向的偏导数组成的N维向量。拿三元函数 f ( x , y , z ) f(x,y,z) f(x,y,z)来说,如果其梯度存在,则梯度的定义为:
    ∇ f = ϑ f ϑ x i + ϑ f ϑ x j + ϑ f ϑ x k abla f = frac {vartheta f}{vartheta x} extbf{i} + frac {vartheta f}{vartheta x} extbf{j} + frac {vartheta f}{vartheta x} extbf{k} f=ϑxϑfi+ϑxϑfj+ϑxϑfk
    这样梯度就提供了两种信息——大小和方向。梯度的方向告诉我们函数在这个点沿着这个方向上升最快(负梯度就代表函数在这个点沿着负梯度方向下降最快)。把函数比作一座“山”,我们站在半山腰上,如果我们要上山则沿着梯度方向可以最快到达山顶,如果是下山则沿着梯度的反方向(负梯度方向)则可以最快到达山脚。梯度的大小代表了沿着这个方向的变化率。

    由于梯度的定义只适用于连续的函数,而图像是二维的离散函数,因此对于图像来说我们需要使用有限差分(Finite differences)来近似计算梯度。我们以一元函数 f ( x ) f(x) f(x)来举例, f ( x ) f(x) f(x)在某一点的导数定义为:
    D e r i v a t i v e : f ′ ( x ) = lim ⁡ h → 0 f ( x + h ) − f ( x ) h Derivative:f'(x) = displaystyle lim_{h ightarrow 0}frac {f(x+h)-f(x)}{h} Derivative:f(x)=h0limhf(x+h)f(x)
    下面使用差分来近似,假设 h h h为一个非零固定值,则上面的导数定义变为:
    f ′ ( x ) ≈ f ( x + h ) − f ( x ) h f'(x) approxfrac {f(x+h)-f(x)}{h} f(x)hf(x+h)f(x)
    有限差分最常使用的有三种形式:前向、后向、中心。

    • 前向
      f ′ ( x ) ≈ f ( x + h ) − f ( x ) h f'(x) approxfrac {f(x+h)-f(x)}{h} f(x)hf(x+h)f(x)
    • 后向
      f ′ ( x ) ≈ f ( x ) − f ( x − h ) h f'(x) approxfrac {f(x)-f(x-h)}{h} f(x)hf(x)f(xh)
    • 中心
      f ′ ( x ) ≈ f ( x + 0.5 h ) − f ( x − 0.5 h ) h f'(x) approxfrac {f(x+0.5h)-f(x-0.5h)}{h} f(x)hf(x+0.5h)f(x0.5h)

    对于计算图像梯度来说我们使用中心差分来近似计算x、y两个方向的梯度。下面的例子演示了如何计算中间像素点(200)在x方向的中心差分(梯度)

    在这里插入图片描述

    所以在图像中每一个点的梯度指向灰度值增加最大的方向,其大小对应于这个方向的变化率。所以对于图像 f ( x , y ) f(x,y) f(x,y),梯度方向(Direction)和大小(Magnitude)的定义为:
    M a g n i t u d e : ∣ ∣ ∇ f ∣ ∣ = ( ϑ f ϑ x ) 2 + ( ϑ f ϑ y ) 2 Magnitude:|| abla f ||=sqrt {left(frac {vartheta f}{vartheta x} ight)^2+left(frac {vartheta f}{vartheta y} ight)^2} Magnitude:f=(ϑxϑf)2+(ϑyϑf)2
    D r e c t i o n : t a n − 1 ( ϑ f ϑ y / ϑ f ϑ x ) Drection:tan^{-1}(frac {vartheta f}{vartheta y}/frac {vartheta f}{vartheta x}) Drection:tan1(ϑyϑf/ϑxϑf)

    简而言之,沿x方向的图像梯度测量的是灰度(亮度)值的水平变化(0 ~ 255),沿y方向的图像梯度测量的是灰度值的垂直变化(0 ~ 255)

    在这里插入图片描述

    由于在边缘上图像的灰度值会发生突然的改变,因此最大的梯度值将出现在图像中一条边上(忽略噪声)。所以x方向的梯度能找到垂直的边缘,y方向的梯度能找到水平边缘,如图所示:
    在这里插入图片描述
    所以边缘是与梯度方向垂直的,因此图像梯度可以用于边缘检测。此外在使用高斯牛顿法实现光流追踪时,图像梯度用于计算雅可比矩阵。


  • 相关阅读:
    ? ?? 类?
    类 建索引
    访问局域网计算机文件
    JS 在元素后面添加新的元素
    js 网页加载完毕,执行js函数
    设置快捷键(3种方式)
    winform设置textbox设置水印
    ADO.NET 学生管理
    C#整理 条件语句
    ADO.NET 数据访问类查询、属性扩展
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860044.html
Copyright © 2011-2022 走看看