OpenCV 例程300篇250. 梯度算子的传递函数
Posted YouCans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV 例程300篇250. 梯度算子的传递函数相关的知识,希望对你有一定的参考价值。
【youcans 的 OpenCV 例程300篇】250. 梯度算子的传递函数
1. 空间卷积与频域滤波
空间域图像滤波是图像与滤波器核的卷积,而空间卷积的傅里叶变换是频率域中相应变换的乘积,因此频率域图像滤波是频率域滤波器(传递函数)与图像的傅里叶变换相乘。频率域中的滤波概念更加直观,滤波器设计也更容易。
对于二维图像处理,通常使用 x , y x, y x,y 表示离散的空间域坐标变量,用 u , v u,v u,v 表示离散的频率域变量。二维离散傅里叶变换(DFT)和反变换(IDFT)为:
F ( u , v ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y ) e − j 2 π ( u x / M + v y / N ) f ( x , y ) = 1 M N ∑ u = 0 M − 1 ∑ v = 0 N − 1 F ( u , v ) e j 2 π ( u x / M + v y / N ) \\beginaligned F(u,v) &= \\sum_x=0^M-1 \\sum_y=0^N-1 f(x,y) e^-j 2\\pi (ux/M+vy/N)\\\\ f(x,y) &= \\frac1MN \\sum_u=0^M-1 \\sum_v=0^N-1 F(u,v) e^j 2\\pi (ux/M+vy/N) \\endaligned F(u,v)f(x,y)=x=0∑M−1y=0∑N−1f(x,y)e−j2π(ux/M+vy/N)=MN1u=0∑M−1v=0∑N−1F(u,v)ej2π(ux/M+vy/N)
空间取样和频率间隔是相互对应的,频率域所对应的离散变量间的间隔为: Δ u = 1 / M Δ T , Δ v = 1 / N Δ Z \\Delta u = 1/M \\Delta T,\\Delta v = 1/N \\Delta Z Δu=1/MΔT,Δv=1/NΔZ。即:频域中样本之间的间隔,与空间样本之间的间隔及样本数量的乘积成反比。
空间域滤波器和频率域滤波器也是相互对应的,形成一个傅里叶变换对:
f
(
x
,
y
)
⊗
h
(
x
,
y
)
⇔
F
(
u
,
v
)
H
(
u
,
v
)
f
(
x
,
y
)
h
(
x
,
y
)
⇔
F
(
u
,
v
)
⊗
H
(
u
,
v
)
f(x,y) \\otimes h(x,y) \\Leftrightarrow F(u,v)H(u,v) \\\\f(x,y) h(x,y) \\Leftrightarrow F(u,v) \\otimes H(u,v)
f(x,y)⊗h(x,y)⇔F(u,v)H(u,v)f(x,y)h(x,y)⇔F(u,v)⊗H(u,v)
这表明 F 和 H 分别是 f 和 h 的傅里叶变换;f 和 h 的空间卷积的傅里叶变换,是它们的变换的乘积。
因此,计算两个函数的空间卷积,可以直接在空间域计算,也可以在频率域计算:先计算每个函数的傅里叶变换,再对两个变换相乘,最后进行傅里叶反变换转换回空间域。
也就是说,空间域滤波器和频率域滤波器实际上是相互对应的,也是可以相互转换的。空间域滤波的核心是卷积核,频域滤波的核心是构造滤波器的传递函数。有些空间域滤波器在频率域通过傅里叶变换实现会更方便、更快速。
在空间滤波中,除Laplacian算子之外还讨论了Sobel算子、Scharr算子,但在频域滤波中却很少提及。这是因为空间滤波中的平滑(模糊)/锐化的概念,与频域滤波中的低通滤波/高通滤波虽然相似,也有密切联系,但在本质上却是不同的。平滑滤波相当于低通滤波,但锐化与高通滤波是不同的。
对空间滤波器核进行傅里叶变换,得到空间滤波器在频域的传递函数,可以清晰和直观地理解二者的联系和区别。
2. 梯度算子在空间域的卷积核
2.1 拉普拉斯卷积核(Laplacian)
各向同性卷积核的响应与方向无关。最简单的各向同性导数算子(卷积核)是拉普拉斯算子(Laplace):
K 1 = [ 0 1 0 1 − 4 1 0 1 0 ] , K 2 = [ 1 1 1 1 − 8 1 1 1 1 ] , K 3 = [ 0 − 1 0 − 1 4 − 1 0 − 1 0 ] , K 4 = [ − 1 − 1 − 1 − 1 8 − 1 − 1 − 1 − 1 ] K1= \\beginbmatrix 0 & 1 &0\\\\ 1 & -4 &1\\\\ 0 & 1 &0\\\\ \\endbmatrix, \\ K2= \\beginbmatrix 1 & 1 &1\\\\ 1 & -8 &1\\\\ 1 & 1 &1\\\\ \\endbmatrix, \\ K3= \\beginbmatrix 0 & -1 &0\\\\ -1 & 4 &-1\\\\ 0 & -1 &0\\\\ \\endbmatrix, \\ K4= \\beginbmatrix -1 & -1 &-1\\\\ -1 & 8 &-1\\\\ -1 & -1 &-1\\\\ \\endbmatrix K1=⎣ ⎡0101−41010⎦ ⎤, K2=⎣ ⎡1111−81111⎦ ⎤, K3=⎣ ⎡0−10−14−10−10⎦ ⎤, K4=⎣ ⎡−1−1−1−18−1−1−1−1⎦ ⎤
2.2 Sobel 梯度算子
Sobel 算子是一种离散的微分算子,是高斯平滑和微分求导的联合运算,抗噪声能力强。
Sobel 梯度算子利用局部差分寻找边缘,计算得到梯度的近似值。
Sobel 梯度算子的卷积核为:
K
x
=
[
−
1
0
1
−
2
0
2
−
1
0
1
]
,
K
y
=
[
−
1
−
2
−
1
0
0
0
1
2
1
]
K_x = \\beginbmatrix -1 & 0 &1\\\\ -2 & 0 &2\\\\ -1 & 0 &1\\\\ \\endbmatrix, \\ K_y = \\beginbmatrix -1 &-2 &-1\\\\ 0 &0 &0\\\\ 1 &2 &1\\\\ \\endbmatrix
Kx=⎣
⎡−1−2−1000121⎦
⎤, Ky=⎣以上是关于OpenCV 例程300篇250. 梯度算子的传递函数的主要内容,如果未能解决你的问题,请参考以下文章
youcans 的 OpenCV 例程200篇150. 边缘检测梯度算子
OpenCV 例程 300篇245. 特征检测之 BRISK 算子
OpenCV 例程 300篇245. 特征检测之 BRISK 算子
OpenCV 例程 300篇248. 特征描述之HOG描述符