OpenCV 例程300篇250. 梯度算子的传递函数

Posted YouCans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV 例程300篇250. 梯度算子的传递函数相关的知识,希望对你有一定的参考价值。

『youcans 的 OpenCV 例程300篇 - 总目录』


【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=0M1y=0N1f(x,y)ej2π(ux/M+vy/N)=MN1u=0M1v=0N1F(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= 010141010 , K2= 111181111 , K3= 010141010 , K4= 111181111


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= 121000121 , Ky=以上是关于OpenCV 例程300篇250. 梯度算子的传递函数的主要内容,如果未能解决你的问题,请参考以下文章

youcans 的 OpenCV 例程200篇150. 边缘检测梯度算子

OpenCV 例程 300篇245. 特征检测之 BRISK 算子

OpenCV 例程 300篇245. 特征检测之 BRISK 算子

OpenCV 例程 300篇248. 特征描述之HOG描述符

OpenCV 例程 300篇248. 特征描述之HOG描述符

youcans 的 OpenCV 例程200篇151. 边缘检测中的平滑处理