图像函数 f ( x , y ) f(x,y) f(x,y)在点 ( x , y ) (x,y) (x,y)的梯度是一个具有大小和方向的矢量,设为 G x G_x Gx和 G y G_y Gy分别表示 x x x方向和 y y y方向的梯度,这个梯度的矢量可以表示为:
∇ f ( x , y ) = [ G x , G y ] T = [ ∂ f ∂ x , ∂ f ∂ y ] T \nabla f(x,y)=[G_x,G_y]^T=[\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}]^T ∇f(x,y)=[Gx,Gy]T=[∂x∂f,∂y∂f]T
这个矢量的幅度为
m a g ( ∇ f ) = g ( x , y ) = ∂ 2 f ∂ x 2 , ∂ 2 f ∂ y 2 mag(\nabla f)=g(x,y)=\sqrt{\frac{\partial ^2 f}{\partial x ^2}, \frac{\partial ^2 f}{\partial y ^2}} mag(∇f)=g(x,y)=∂x2∂2f,∂y2∂2f
方向角为
ϕ ( x , y ) = a c t a n ∣ ∂ f ∂ y / ∂ f ∂ x ∣ \phi (x,y)=actan \mid \frac{\partial f}{\partial y} / \frac{\partial f}{\partial x} \mid ϕ(x,y)=actan∣∂y∂f/∂x∂f∣
对于数字图像而言,相当于对二维离散函数求梯度,如下:
G
(
x
,
y
)
=
d
x
(
i
,
j
)
+
d
y
(
i
,
j
)
G(x,y)=dx(i,j)+dy(i,j)
G(x,y)=dx(i,j)+dy(i,j)
d
x
(
i
,
j
)
=
I
(
i
+
1
,
j
)
−
I
(
i
,
j
)
dx(i,j)=I(i+1,j)-I(i,j)
dx(i,j)=I(i+1,j)−I(i,j)
d
y
(
i
,
j
)
=
I
(
i
,
j
+
1
)
−
I
(
i
,
j
)
dy(i,j)=I(i,j+1)-I(i,j)
dy(i,j)=I(i,j+1)−I(i,j)
数字图像中,更多的是用差分来近似函数,最简单的梯度近似表达式为:
G
x
=
f
(
x
,
y
)
−
f
(
x
−
1
,
y
)
G_x=f(x,y)-f(x-1,y)
Gx=f(x,y)−f(x−1,y)
G
y
=
f
(
x
,
y
)
−
f
(
x
,
y
−
1
)
G_y=f(x,y)-f(x,y-1)
Gy=f(x,y)−f(x,y−1)
梯度的方向是函数 f ( x , y ) f(x,y) f(x,y)变化最快的方向,当图像中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度,由图像梯度构成的图像成为梯度图像(we can get the gradient image through computing the gradient of each pixel in the image)
经典的图像梯度算法是考虑图像的每个像素的某个邻域内的灰度变化,利用边缘临近的一阶或二阶导数变化规律,对原始图像中像素某个邻域设置梯度算子,通常我们用小区域模板进行卷积来计算,有Sobel算子、Robinson算子、Laplace算子等。
One more thing
更多关于人工智能、Python、C++、计算机等知识,欢迎访问我的个人博客进行交流, 点这里~~