图像梯度(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 \rightarrow 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}\approx\frac {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}\approx\frac {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
\nabla f = \frac {\vartheta f}{\vartheta x}\textbf{i} + \frac {\vartheta f}{\vartheta x}\textbf{j} + \frac {\vartheta f}{\vartheta x}\textbf{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 \rightarrow 0}\frac {f(x+h)-f(x)}{h}
Derivative:f′(x)=h→0limhf(x+h)−f(x)
下面使用差分来近似,假设
h
h
h为一个非零固定值,则上面的导数定义变为:
f
′
(
x
)
≈
f
(
x
+
h
)
−
f
(
x
)
h
f'(x) \approx\frac {f(x+h)-f(x)}{h}
f′(x)≈hf(x+h)−f(x)
有限差分最常使用的有三种形式:前向、后向、中心。
- 前向
f ′ ( x ) ≈ f ( x + h ) − f ( x ) h f'(x) \approx\frac {f(x+h)-f(x)}{h} f′(x)≈hf(x+h)−f(x) - 后向
f ′ ( x ) ≈ f ( x ) − f ( x − h ) h f'(x) \approx\frac {f(x)-f(x-h)}{h} f′(x)≈hf(x)−f(x−h) - 中心
f ′ ( x ) ≈ f ( x + 0.5 h ) − f ( x − 0.5 h ) h f'(x) \approx\frac {f(x+0.5h)-f(x-0.5h)}{h} f′(x)≈hf(x+0.5h)−f(x−0.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:||\nabla f ||=\sqrt {\left(\frac {\vartheta f}{\vartheta x}\right)^2+\left(\frac {\vartheta f}{\vartheta y}\right)^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:tan−1(ϑyϑf/ϑxϑf)
简而言之,沿x方向的图像梯度测量的是灰度(亮度)值的水平变化(0 ~ 255),沿y方向的图像梯度测量的是灰度值的垂直变化(0 ~ 255)
由于在边缘上图像的灰度值会发生突然的改变,因此最大的梯度值将出现在图像中一条边上(忽略噪声)。所以x方向的梯度能找到垂直的边缘,y方向的梯度能找到水平边缘,如图所示:
所以边缘是与梯度方向垂直的,因此图像梯度可以用于边缘检测。此外在使用高斯牛顿法实现光流追踪时,图像梯度用于计算雅可比矩阵。