滤.泼器:抑制或最小化某些频率的波或振荡的装直或材料
频率:自变量单位变化期间,一个周期函数重复相同值序列的次数
傅里叶指出任何周期函数都可以表示为不同频率的正弦和或余弦和的形式,每个正弦项和/余弦项和乘以不同的系数 (现在称该和为傅里叶级数)。 无论函数多么复杂,只要它是周期的,并且满足某些适度的数学条件,都可以用这样的和来表示。
至非周期函数(但该曲线下的面积是有限的)也可以用正弦和/或余弦乘以加权两数的积分来表示在这种情况下的公式就是傅里叶变换,其作用在多数理论和应用学科中甚至远大于傅里叶级数用傅里叶级数或变换表示的函数特征完全可以通过傅里叶反变换来重建,而不会丢失任何信息 。
复数C的定义如下:
C = R + j I C=R+jI C=R+jI
其中, 实数R和I是实数,j是一 个等于-1的平方根的虚数,即
J = − 1 J=\sqrt{-1} J=−1
R表示复数的实部,I是复数的虚部。实数是 I = 0 的复数的子集。
具有周期T的连续变量t的周期函数f(t) 可以被描述为乘以适当系数的正弦和余弦和, 这个和就是傅里叶级数。
f ( t ) = ∑ i = − ∞ ∞ c n e j 2 Π n T t f(t) = \sum^{\infty}_{i = -\infty}{c_ne^{j\frac{2Πn}{T}t}} f(t)=i=−∞∑∞cnejT2Πnt
其中,
c n = 1 T ∫ − T / 2 T / 2 f ( t ) e − j 2 Π n T t d t , n = 0 , ± 1. ± 2 , . . . . . . c_n=\frac{1}{T}\int^{T/2}_{-T/2}{f(t)e^{{-j\frac{2Πn}{T}t}}dt}, n=0, \pm1.\pm2,...... cn=T1∫−T/2T/2f(t)e−jT2Πntdt,n=0,±1.±2,......
是系数,f(t) 可展开为正弦与余弦之和这一事实来自欧拉公式。
线性系统和傅里叶变换研究的核心是冲激及其取样特性,连续变量t在t=0处的单位冲激表示为 δ \delta δ(t),其定义为
δ ( t ) = { 0 , t ≠ 0 ∞ , t = 0 \delta(t)= \lbrace ^ {\infty\qquad, t =0}_{0\qquad, t \not=0} δ(t)={0,t=0∞,t=0
它还被限制为满足等式
∫ − ∞ ∞ δ ( t ) d t = 1 \int_{-\infty}^{\infty} \delta(t)\, {\rm d}t = 1 ∫−∞∞δ(t)dt=1
两个函数的卷积涉及一个函数关于原点做翻转(旋转 180°)并滑过另一个函数。两个函数的卷积由算子★表示,卷积定义如下:
f ( t ) ★ h ( t ) = ∫ − ∞ ∞ f ( r ) h ( t − r ) d r f(t)★h(t)=\int^{\infty}_{-\infty}{f(r)h(t-r)}dr f(t)★h(t)=∫−∞∞f(r)h(t−r)dr
其中,负号表示刚刚提及的翻转。t是一个函数滑过另一个函数的位移,而r是积分假变量。 现在我们假定函数从-∞扩展到∞。
用计算机处理之前,连续函数必须转换为离散值序列。这是用取样和量化来完成的。
考虑一个连续函数f(t),我们希望以独立变量t的均匀间隔(ΔT)取样。我们假定雨数对于t从一到扩展。模拟取样的一种方法是用一个 ΔT 单位间隔的冲激串作为取样函数去乘以f(t),即
f ~ ( t ) = f ( t ) s Δ T = ∑ n = − ∞ ∞ f ( t ) δ ( t − n Δ T ) \tilde{f}(t)=f(t)s_{ΔT}=\sum^{\infty}_{n=-\infty}f(t)\delta(t-nΔT) f~(t)=f(t)sΔT=n=−∞∑∞f(t)δ(t−nΔT)
其中,f(t)表示取样后的函数。这一和式的每一个分量都是由在该冲激位置处f(t)的值加权后的冲激。
每个取样值由加权后的冲激“强度”给出,我们可通过积分得到它。
令F(μ)代表连续函数f(t)的傅里叶变变换。取样后的相应函数 f ~ ( t ) \tilde{f}(t) f~(t)是f(t)与一个冲激串的乘积。由卷积定理我们可知,空间域两个函数乘积的傅里叶变换是两个函数在频率域的卷积。这样,取样后的函数 f ~ ( t ) \tilde{f}(t) f~(t)的傅里叶变换 F ~ ( μ ) \tilde{F}(μ) F~(μ))是
F ~ ( μ ) = ℑ { f ~ ( t ) } = ℑ { f ( t ) s Δ T ( t ) } = F ( μ ) ★ S ( μ ) \tilde{F}(μ)= \Im\lbrace\tilde{f}(t)\rbrace= \Im\lbrace{f(t)}s_{ΔT}(t)\rbrace= F(μ)★S(μ) F~(μ)=ℑ{f~(t)}=ℑ{f(t)sΔT(t)}=F(μ)★S(μ)
取样定理:如果以超过函数最高频率的两倍的取样率来获得样本,连续的带限函数可以完全地从它的样本集来恢复
由函数欠取样导致的效果就是周知的频率混淆,或简称为混淆。在字面上,混淆是-一个过程,在这一过程中,一个连续函数的高频分量在取样后的函数中用低频“化妆”了。 这与通常所用的混淆一词是一致的, 其意思是“错认了”。
理解取样数据重建的基础是很重要的,卷积是这一理解的核心。
两个连续变量t和z的冲激δ(t, z)被定义为如式所示的形式:
δ ( t , z ) = { 0 , 其他 ∞ , t = z = 0 \delta(t,z)= \lbrace ^ {\infty\qquad, t=z=0}_{0\qquad, 其他} δ(t,z)={0,其他∞,t=z=0
和
∫ − ∞ ∞ ∫ − ∞ ∞ δ ( t , z ) d t d z = 1 \int_{-\infty}^{\infty}\int_{-\infty}^{\infty} \delta(t,z)\, {\rm d}t{\rm d}z = 1 ∫−∞∞∫−∞∞δ(t,z)dtdz=1
令f(t, z)是两个连续变量t和z的连续函数。则其二维连续傅里叶变换对由以下两个表达式给出:
F ( μ , v ) = ∫ − ∞ ∞ ∫ − ∞ ∞ f ( t , z ) e − j 2 Π ( μ t + v z ) d t d z F(μ,v)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} f(t,z)e^{{-j2Π(μt+vz)}} \, {\rm d}t{\rm d}z F(μ,v)=∫−∞∞∫−∞∞f(t,z)e−j2Π(μt+vz)dtdz
或
f ( t , z ) = ∫ − ∞ ∞ ∫ − ∞ ∞ F ( μ , v ) e j 2 Π ( μ t + v z ) d μ d v f(t,z)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} F(μ,v)e^{{j2Π(μt+vz)}} \, {\rm d}μ{\rm d}v f(t,z)=∫−∞∞∫−∞∞F(μ,v)ej2Π(μt+vz)dμdv
其中,μ和v是频率变量。当涉及图像时, t和z解释为连续空间变量。就像一维情况那样, 变量μ
和v的域定义了连续频率域。
类似于一维情况中的方式,二维取样可用取样函数(二维冲激串)建模:
s Δ T Δ Z ( t , z ) = ∑ m = − ∞ ∞ ∑ n = − ∞ ∞ δ ( t − m Δ T , z − n Δ Z ) s_{ΔTΔZ}(t,z)=\sum^{\infty}_{m=-\infty}\sum^{\infty}_{n=-\infty}\delta(t-mΔT,z-nΔZ) sΔTΔZ(t,z)=m=−∞∑∞n=−∞∑∞δ(t−mΔT,z−nΔZ)
其中,ΔT和ΔZ是连续函数f(t,z)沿t轴和z轴的样本间的间隔。
正如在一维情况下那样,如果只在两个坐标方向上无限扩展,二维连续变量t和z的连续函数通常可以被带限。限制一个函数时间的非常动作将引起在频率域无限扩展的有害的频率分量。因为我们不可能对一个函数无限地取样,所以,正像在取样后的一维函数中所存在的那样,在数字图像中混淆总是存在的。在图像中,存在两种主要的混淆现象:空间混淆和时间混淆。
空间混淆是由欠取样造成的。
时间混淆与图像序列中图像间的时间间隔有关。时间混淆最常见的例子之一是“车轮"效应,即在序列图像(如电影)中具有轮辐的车轮出现倒转的现象。这是由于序列中的帧率低于轮子转动的速度引起的。
就像在一维情形中那样,由样本集合完美地重建一个带限图像函数要求在空间域用sinc 函数做二维卷积。这种理论上的完美重建要求使用无限求和来内插,在实践中,迫使我们不得不寻求某种近似。在图像处理中,二维内插最普通的应用之一是调整图像的大小(放大和缩小)。放大可看成是过取样,缩小则可看成是欠取样。这两种操作和前面几节讨论的取样概念之间的主要区别是放大和缩小用于数字图像。
莫尔(波纹)模式”,它们有时是使用周期或近似周期分量对场景取样产生的。在光学中,莫尔模式指的是在两个近似等间隔的光栅之间产生的差拍模式。这些差拍模式通常每天都会发生。例如,我们从防昆虫纱窗重叠在一起,或从电视光栅线与条带材料间所看到的干涉那样。在数字图像处理中,当扫描介质印刷物如报纸和杂志时,或
者在具有周期分量的图像中,如果它的间隔与取样的间隔可比的时候,通常都会出现这一问题。与取样造成的人为缺陷相比,莫尔模式更为常见。
二维傅里叶变换(DFT)如下:
F ( u , v ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y ) e − j 2 Π ( u x / M + v y / N ) F(u,v)=\sum^{M-1}_{x=0}\sum^{N-1}_{y=0}f(x,y)e^{{-j2Π(ux/M+vy/N)}} F(u,v)=x=0∑M−1y=0∑N−1f(x,y)e−j2Π(ux/M+vy/N)
其中,f(x,y)是大小为MxN的数字图像。与一维中的情况一样,该式必须对离散变量u和v在u=0,1,2, …, M-1和v=0,1,2…,N-1范围内求值.
假定对连续函数f(t, z)取样生成了一幅数字图像f(x, y),它由分别在t和z方向所取的MxN个样点组成。令ΔT和ΔZ表示样本间的间隔,那么相应离散频率域变量间的间隔分别由
Δ u = 1 M Δ T Δu=\frac{1}{MΔT} Δu=MΔT1
和
Δ v = 1 N Δ Z Δv=\frac{1}{NΔZ} Δv=NΔZ1
给出。注意,频率域样本间的间隔与空间样本间的间距和样本数成反比。
直接代人二维离散傅里叶变换及其反变换的公式可以证明傅里叶变换对满足下列平移特性
f ( x , y ) e j 2 Π ( μ 0 x / M + v 0 y / N ) ⇔ F ( u − u 0 , v − v 0 ) f(x,y)e^{{j2Π(μ_0x/M+v_0y/N)}}\Leftrightarrow F(u-u_0,v-v_0) f(x,y)ej2Π(μ0x/M+v0y/N)⇔F(u−u0,v−v0)
和
f ( x − x 0 , y − y 0 ) ⇔ F ( u , v ) e j 2 Π ( μ x 0 / M + v y 0 / N ) f(x-x_0,y-y_0)\Leftrightarrow F(u,v)e^{{j2Π(μx_0/M+vy_0/N)}} f(x−x0,y−y0)⇔F(u,v)ej2Π(μx0/M+vy0/N)
也就是说,用指数项乘以f(x, y)将使DFT的原点移到点( u 0 , v 0 u_0,v_0 u0,v0);反之,用负指数乘以F(u,V)将使f(x, y)的原点移到点( x 0 , y 0 x_0,y_0 x0,y0)。平移不影响F(u, v)的幅度(谱)。使用极坐标
x=rcosθ,y=rsinθ, u = ω \omega ωCOSφ,V = ω \omega ωsinφ
可得到下列变换对:
f ( r , θ + θ 0 ) ⇔ F ( ω , φ + φ 0 ) f(r,θ +θ_0)\Leftrightarrow F(\omega,φ+φ_0) f(r,θ+θ0)⇔F(ω,φ+φ0)
它指出,若f(x,y)旋转 θ 0 θ_0 θ0角度,则F(u,v)也旋转相同的角度。反之,若F(u,v)旋转-一个角度,f(x, y)也旋转相同的角度。
如在一维情况中那样,二维傅里叶变换及其反变换在u方向和v方向是无限周期的,即
F ( u , v ) = F ( u + k 1 M , v ) = F ( u , v + k 2 N ) = F ( u + k 1 M , v + k 2 N ) F(u,v)= F(u+k_1M,v)= F(u,v+k_2N)= F(u+ k_1M,v+k_2N) F(u,v)=F(u+k1M,v)=F(u,v+k2N)=F(u+k1M,v+k2N)
和
f ( x , y ) = f ( x + k 1 M , y ) = f ( x , y + k 2 N ) = f ( x + k M , y + k 2 N ) f(x,y)= f(x+k_1M,y)= f(x,y+k_2N)= f(x+kM,y+k_2N) f(x,y)=f(x+k1M,y)=f(x,y+k2N)=f(x+kM,y+k2N)
其中,k和k2是整数。
变换及其反变换的周期性在基于DFT算法的实现上是重要的特性。
傅立叶变换结果是以原点为中心的共轭对称函数。偶函数是对称的,奇函数是反对称的。因为DFT和IDFT中的所有指数都是正的,当我们谈论对称(反对称)时,我们指的是关于序列中点的对称(反对称)。
根据周期性和共轭对称性,在对图像进行频谱分析处理时只需要关注一个周期就可以了,同时利用图像的傅里叶变换和傅里叶变换的共轭可以直接计算图像的幅度谱,因此使得图像的频谱计算和显示得以简化。
因为通常二维DFT 一般是复函数,因此可使用极坐标形式来表示:
F ( u , v ) = ∣ F ( u , v ) ∣ e j φ ( u , v ) F(u,v)=\left\vert F(u,v)\right\vert e^{j\varphi(u,v)} F(u,v)=∣F(u,v)∣ejφ(u,v)
其中,幅度
∣ F ( u , v ) ∣ = [ R 2 ( u , v ) + F @ ( u , v ) ] 1 / 2 \left\vert F(u,v)\right\vert = [R^2(u,v)+F^@(u,v)]^{1/2} ∣F(u,v)∣=[R2(u,v)+F@(u,v)]1/2
称为傅里叶谱(或频谱),而
φ ( u , v ) = a r c t a n [ I ( u , v ) R ( u , v ) ] \varphi(u,v)=arctan[\frac{I(u,v)}{R(u,v)}] φ(u,v)=arctan[R(u,v)I(u,v)]
称为相角
二维循环卷积的表达式:
f ( x , y ) ★ h ( x , y ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( m , n ) h ( x − m , y − n ) f(x, y)★h(x,y)=\sum^{M-1}_{x=0}\sum^{N-1}_{y=0}f(m,n)h(x-m,y-n) f(x,y)★h(x,y)=x=0∑M−1y=0∑N−1f(m,n)h(x−m,y−n)
其中,x=0, 1,2…,M-1,y=0,1,2…,N-1 。
二维卷积定理由下面的表达式给出:
f ( x , y ) h ( x , y ) ⇔ F ( u , v ) ★ H ( u , v ) f(x, y)h(x, y)\Leftrightarrow F(u,v)★H(u,v) f(x,y)h(x,y)⇔F(u,v)★H(u,v)
该性质的好处是将需要经过翻折、平移、相乘、求和等步骤实现的复杂的卷积运算简化为简单的乘法运算,这也是快速傅里叶变换(FFT)的出现使得该性质得到更广泛应用,同时,该性质对于理解信号的频率域处理方法特别重要,使得信号的空间域处理可以转换到频率域进行处理实现.
为什么要在频率域研究图像处理?
可以利用频率成分和图像外表之间的对应关系。一些在空间域表述困难的增强任务,在频率域中变得非常普通。
滤波在频率域更为直观,它可以解释空间域滤波的某些性质
可以在频率域指定滤波器,做反变换,然后在空间域使用结果滤波器作为空间域滤波器的指导
一旦通过频率域试验选择了空间滤波,通常实施都在空间域进行
低频对应图像内变化缓慢的灰度分量。
高频对应图像内变化越来越快的灰度分量,是由灰度的尖锐过渡造成的。
频率域滤波由修改一幅图像的傅里叶变换然后计算其反变换得到处理后的结果组成。由此,若给定一幅大小为M x N的数字图像f(x, y),则我们]感兴趣的基本滤波公式有如下形式:
g ( x , y ) = ξ − 1 [ H ( u , v ) F ( u , ) ] g(x,y)= \xi^{-1} [H(u,v)F(u,)] g(x,y)=ξ−1[H(u,v)F(u,)]
其中, ξ − 1 \xi^{-1} ξ−1 是IDFT, F(u, v)是输入图像f (x, y)的DFT, H(u, v)是滤波函数(也简称为滤波器,或者滤波传递函数),g(x, y)是滤波后的(输出)图像。函数F, H和g是大小与输入图像相同的MxN阵列。
空间域和频率域滤波间的纽带是卷积定理。
注:4.8、4.9、4.10、4.11偏实验部分 就不详细介绍了,读者感兴趣可以详阅原书。
通过低频的滤波器称为低通滤波器,可以使图像平滑
与理想低通滤波器(ILPF)不同,布特沃斯低通滤波器(BLPF) 传递函数并没有在通过频率和滤除频率之间给出明显截止的尖锐的不连续性。
通过高频的滤波器称为高通滤波器,可以使图像锐化
import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img = cv.imread('C:/Users/Yuao/Pictures/learningTest/gray.jpg', 0)
f = np.fft.fft2(img)
fShift = np.fft.fftshift(f)
# fftshift逆函数
ifShit = np.fft.ifftshift(fShift)
# fft2 逆函数
iimag = np.fft.ifft2(ifShit)
# 设置频谱范围
iimag = np.abs(iimag)
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('original')
# 关闭坐标轴
plt.axis('off')
plt.subplot(122)
plt.imshow(iimag, cmap='gray')
plt.title('ifft_result')
plt.axis('off')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img = cv.imread('C:/Users/Yuao/Pictures/learningTest/gray.jpg', 0)
# dft函数实现傅里叶变换 返回结果是双通道 一个通道是实数另一个是虚数 输入参数要求是原始图像(要求32位) 转换标识
dft = cv.dft(np.float32(img), flags=cv.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft)
iShift = np.fft.ifftshift(dftShift)
iImag = cv.idft(iShift)
iImag = cv.magnitude(iImag[:,:,0],iImag[:,:,1])
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('original')
plt.axis('off')
plt.subplot(122)
plt.imshow(iImag, cmap='gray')
plt.title('opResult')
plt.axis('off')
plt.show()
运行结果:
import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
# 低频对应图像内变化缓慢的灰度分量。
# 高频对应图像内变化越来越快的灰度分量,是由灰度的尖锐过渡造成的。
# 滤波
# 接受(通过)或者拒绝一定频率的分量
# 通过低频的滤波器称为低通滤波器
# 通过高频的滤波器称为高通滤波器
# 衰减高频而通过低频,低通滤波器,将模糊一幅图像
# 衰减低频而通过高频,高通滤波器,将增强尖锐的细节,但是会导致图像的对比度降低
img = cv.imread('C:/Users/Yuao/Pictures/learningTest/gray.jpg', 0)
f = np.fft.fft2(img)
fShift = np.fft.fftshift(f)
rows, cols = img.shape
crow, col = int(rows / 2), int(cols / 2)
fShift[crow - 30:crow + 30, col - 30:col + 30] = 0
ishift = np.fft.ifftshift(fShift)
io = np.fft.ifft2(fShift)
io = np.abs(io)
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('original')
# 关闭坐标轴
plt.axis('off')
plt.subplot(122)
plt.imshow(io, cmap='gray')
plt.title('hPFilter_result')
plt.axis('off')
plt.show()
运行结果:
import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img = cv.imread('C:/Users/Yuao/Pictures/learningTest/gray.jpg', 0)
dft = cv.dft(np.float32(img), flags = cv.DFT_COMPLEX_OUTPUT)
dftShit = np.fft.fftshift(dft)
rows, cols = img.shape
crow, col = int(rows / 2), int(cols / 2)
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow-30:crow+30,col-30:col+30] = 1
fShift = dftShit * mask
iShift = np.fft.ifftshift(fShift)
iImag = cv.idft(iShift)
iImag = cv.magnitude(iImag[:,:,0],iImag[:,:,1])
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('original')
plt.axis('off')
plt.subplot(122)
plt.imshow(iImag, cmap='gray')
plt.title('lPFilter_result')
plt.axis('off')
plt.show()
运行结果: