数字图像处理第四章笔记(频率域滤波)
文章目录
1.1背景
前人提出:“任何周期函数,只要满足某些条件 都可以表示为 不同频率的 正弦和、余弦和 的形式”,其中的“和”即傅里叶级数,因此,傅里叶级数能够清晰地表明:信号由哪些频率分量组成 以及 其所占比重,有利于我们对信号进行分析处理,傅里叶变换就像棱镜,棱镜能把光分解为不同颜色的成分,每种成分的颜色由各自的波长决定
傅里叶变换的优点:用傅里叶级数或变换的函数 可以 通过傅里叶反变换 重建,不会丢失任何信息
1.2基本概念
1.2.1复数
复数C及其相关表示:
C
=
R
+
j
I
(1)
C=R+jI\tag1
C=R+jI(1)
共轭复数:
C
∗
=
R
−
j
I
(2)
C^*=R-jI\tag2
C∗=R−jI(2)
极坐标:
C
=
∣
C
∣
(
c
o
s
θ
+
j
s
i
n
θ
)
(3)
C=|C|(cosθ+jsinθ)\tag3
C=∣C∣(cosθ+jsinθ)(3)
若使用欧拉公式:
e
j
θ
=
c
o
s
θ
+
j
s
i
n
θ
(4)
e^{jθ}=cosθ+jsinθ\tag4
ejθ=cosθ+jsinθ(4)
C = ∣ C ∣ e j θ (5) C=|C|e^{jθ}\tag5 C=∣C∣ejθ(5)
1.2.2傅里叶级数
任何连续周期信号,可以由一组适当的正弦曲线组合而成
f(t)是 具有周期T 的 连续变量t 的周期函数,可以被描述为乘以适当系数的正余弦之和,即“傅里叶级数”,公式如下:
f
(
t
)
=
∑
n
=
−
∞
∞
c
n
e
j
2
π
n
T
t
(1)
f(t)=\sum_{n=-∞}^{∞}c_n e^{j\frac{{2πn}}{T}t}\tag1
f(t)=n=−∞∑∞cnejT2πnt(1)
c n = ∫ − T / 2 T / 2 f ( t ) e − j 2 π n T t d t , n = 0 , ± 1 , ± 2 , … (2) c_n=\int_{-T/2}^{T/2}f(t)e^{-j\frac{2πn}{T} t}dt,n=0,±1,±2,…\tag2 cn=∫−T/2T/2f(t)e−jT2πntdt,n=0,±1,±2,…(2)
1.2.3冲激及其取样特性
δ(t)为 连续变量t 在 t=0处的单位冲激,定义如(1)
δ
(
t
)
{
∞
,
t
=
0
0
,
t
≠
0
(1)
δ(t) \left\{ \begin{matrix} ∞,t=0\\ 0,t≠0 \end{matrix} \right.\tag1
δ(t){∞,t=00,t=0(1)
限制条件为(2)
∫
−
∞
∞
δ
(
t
)
d
t
=
1
(2)
\int_{-∞}^{∞}δ(t)dt=1\tag2
∫−∞∞δ(t)dt=1(2)
1.2.4连续变量函数的傅里叶变换
将一个连续时间或空间域函数转换为其频率域表示的技术。对于一个连续变量函数f(x),其傅里叶变换F(u)定义如下:
F
(
u
)
=
∫
−
∞
∞
f
(
t
)
e
−
j
2
π
u
t
d
t
(1)
F(u)=\int_{-∞}^{∞}f(t)e^{-j2πut}dt\tag1
F(u)=∫−∞∞f(t)e−j2πutdt(1)
傅里叶变换将函数f(x)分解为一系列正弦和余弦函数,每个函数的振幅和相位由F(w)给出。这个过程可以看作是将函数从时间或空间域转换为频率域。
同理也可以做傅里叶反变换:
f
(
t
)
=
∫
−
∞
∞
F
(
u
)
e
j
2
π
u
t
d
u
(2)
f(t)=\int_{-∞}^{∞}F(u)e^{j2πut}du\tag2
f(t)=∫−∞∞F(u)ej2πutdu(2)
1.2.5卷积
作用:对输入的图像、数据进行特征提取
过程:将滤波器与输入 做卷积,能得到输出的特征。卷积操作可以视为一种 加权求和操作,输入可视为 “矩阵”,滤波器可视为一个“矩形矩阵”,两个矩阵的元素逐个相乘,再逐个相加。这个操作能够提取“输入”的特征,且 卷积操作可以识别、计算出 同一个特征在不同位置的特征向量
定义如下:
f
(
t
)
※
h
(
t
)
=
∫
−
∞
∞
f
(
τ
)
h
(
t
−
τ
)
d
τ
(1)
f(t)※h(t)=\int_{-∞}^{∞}f(τ)h(t-τ)dτ\tag1
f(t)※h(t)=∫−∞∞f(τ)h(t−τ)dτ(1)
1.3取样和取样函数的傅里叶变换
1.3.1取样
连续函数的图像需要先转换为离散值 以便后期处理
1.3.2取样函数的傅里叶变换
F ( ω ) = 1 T ∑ k = − ∞ ∞ F s ( ω − k 2 π T ) (1) F(\omega) = \frac{1}{T}\sum_{k=-\infty}^{\infty}F_s(\omega - k\frac{2\pi}{T})\tag1 F(ω)=T1k=−∞∑∞Fs(ω−kT2π)(1)
其中,Fs(ω)是取样函数的频谱,定义为:
F
s
(
ω
)
=
1
T
∑
n
=
−
∞
∞
f
(
n
T
)
e
−
j
ω
n
T
(2)
F_s(\omega) = \frac{1}{T}\sum_{n=-\infty}^{\infty}f(nT)e^{-j\omega nT}\tag2
Fs(ω)=T1n=−∞∑∞f(nT)e−jωnT(2)
f(t)是原始信号,T是采样周期,ω是角频率。将取样函数的频谱复制到整个频域中,每个复制品都相差一个整数倍的基础频率,再将这些复制品加起来。这样做的结果是,在频域中形成了一系列相邻的频带,每个频带的中心频率都位于基础频率的整数倍处。这些频带的宽度由采样频率决定,而它们之间的间隔由采样周期决定。
需要注意的是,如果采样频率未达到一定的条件(下面有说,采样频率需要超过两倍的带宽上限),就可能会出现混叠现象。因此,在实际应用中,需要根据信号的特性合理地选择采样频率和采样周期,以避免混叠现象的发生。
1.3.3取样定理
取样定理也叫奈奎斯特定理,如果希望带限函数f(t)能完全从它的样本集恢复,则采样频率1/△T与带宽上限umax需满足下式:
1
△
T
>
=
2
u
m
a
x
\frac{1}{△T}>=2u_{max}
△T1>=2umax
在对连续信号做离散化的过程当中,可能会丢失部分信息。比如现在有一个正弦波信号,我每秒只采一个点,那么就会丢失很多数据,导致分析不出这是什么信号;所以,采集的点越密集,结果越能接近原始信号。
1.3.4混淆
这是一种错误,可能会导致将一个类别的图像错误地分类为另一个类别。如果采样频率低于两倍的带宽上限,可能产生“混淆”现象。
1.3.5由取样后的数据重建(复原)函数
通过已知的离散函数采样数据,重建出原本的连续函数。这个过程被称为信号重建或信号恢复。常用的方法是插值,即通过已知数据点之间的线性或曲线拟合来估计原本的函数值。
1.4单变量的离散傅里叶变换(DFT)
DFT是傅里叶变换在时域和频域上都呈现离散的形式,将信号从 时域 变换到 频域,再研究信号的频谱结构,但是计算量会很大,采样点多的时候算的很慢(应对措施为使用快速傅里叶变换FFT,以后可能会学到)
1.4.1由取样后的函数的连续变换得到DFT
尝试对一个一维信号sin(π**t)+2*sin(2π**t)+sin(3π*t)做离散傅里叶变换
代码如下:
# 设置采样点数
N = 128
signal = np.pi
# 生成正弦信号
x = np.linspace(0, signal, N)
y = np.sin(x)+np.sin(2*x)+np.sin(3*x)
# 绘制原始信号图像
plt.figure(figsize=(8, 6))
plt.plot(y)
plt.title('原始信号')
plt.xlabel('时间')
plt.ylabel('幅度')
plt.grid(True)
# 对信号做离散傅里叶变换
Y = np.fft.fft(y)
# 计算频率分量
freq = np.fft.fftfreq(N)
# 绘制采样点图像
plt.figure(figsize=(8, 6))
plt.stem(freq, np.abs(Y)/N, use_line_collection=True)
plt.title('离散傅里叶变换')
plt.xlabel('频率')
plt.ylabel('幅度')
plt.grid(True)
plt.show()
# IFT
x_n = np.fft.ifft(Y)
# 绘制采样点图像
plt.figure(figsize=(8, 6))
plt.stem(freq, np.abs(x_n)/N, use_line_collection=True)
plt.title('反离散傅里叶变换')
plt.xlabel('频率')
plt.ylabel('幅度')
plt.grid(True)
plt.show()
效果如下:
正弦信号图像
DFT取样(128个点)
IFT
DFT的原理是将时域信号乘以一个离散的fourier系数矩阵,对结果做矩阵相乘,得到一个离散的频域信号矩阵,矩阵中的每个元素对应一个频率
1.4.2取样和频率间隔间的关系
-
取样:在时域上对信号进行采样
-
频率间隔:在频域上对信号进行分割的频率间隔
举例,我有一个长度为N的时域信号x,希望将它转换为频域信号。欲做DFT,必先对这个时域信号取样。x的取样结果为x_n,等于x[t:(t+N-1)],t是采样时间,相当于裁剪掉x一部分。下一步就是对取样结果做离散化处理(即:时域信号转频域信号),用取样结果乘以矩阵M,用这个结果与矩阵M再相乘,则x的频域表示为Y=dft(x,M)。最后,对频域信号Y做IFT(反离散傅里叶变换),重新变为时域信号,x=IFT(Y)。
结论:取样频率不变,频率间隔越大,则频域信号的分辨率越高,如果间隔过大,会变得模糊。
1.5两个变量的函数的扩展
1.5.1二维冲激及其取样特性
二维冲激指一个二维函数 如式(1)(2)
δ
(
t
,
z
)
=
{
∞
,
t
=
z
=
0
0
,
t
≠
0
(1)
δ(t,z)=\left\{ \begin{matrix} ∞,t=z=0\\ 0,t≠0 \end{matrix} \right.\tag1
δ(t,z)={∞,t=z=00,t=0(1)
∫ − ∞ ∞ ∫ − ∞ ∞ δ ( t , z ) d t d z = 1 (2) \int_{-∞}^{∞}\int_{-∞}^{∞}δ(t,z)dtdz=1\tag 2 ∫−∞∞∫−∞∞δ(t,z)dtdz=1(2)
取样 指将连续信号转换为离散时间信号的过程,表示为 式(3)
∫
−
∞
∞
∫
−
∞
∞
f
(
t
,
z
)
δ
(
t
,
z
)
d
t
d
z
=
f
(
0
,
0
)
(3)
\int_{-∞}^{∞}\int_{-∞}^{∞}f(t,z)δ(t,z)dtdz=f(0,0)\tag 3
∫−∞∞∫−∞∞f(t,z)δ(t,z)dtdz=f(0,0)(3)
1.5.2二维连续傅里叶变换对
前面有提到一维连续傅里叶变换对(傅里叶正变换、逆变换),推广即存在二维连续傅里叶变换对,如式(1)(2)所示:
F
(
μ
,
v
)
=
∫
−
∞
∞
∫
−
∞
∞
f
(
t
,
z
)
e
−
j
2
π
(
μ
t
+
v
z
)
d
t
d
z
(1)
F(μ,v)=\int_{-∞}^{∞}\int_{-∞}^{∞}f(t,z)e^{-j2π(μt+ vz)}dtdz\tag 1
F(μ,v)=∫−∞∞∫−∞∞f(t,z)e−j2π(μt+vz)dtdz(1)
f ( t , z ) = ∫ − ∞ ∞ ∫ − ∞ ∞ F ( μ , v ) e j 2 π ( μ t + v z ) d μ d v (2) f(t,z)=\int_{-∞}^{∞}\int_{-∞}^{∞}F(μ,v)e^{j2π(μt+ vz)}dμdv\tag 2 f(t,z)=∫−∞∞∫−∞∞F(μ,v)ej2π(μt+vz)dμdv(2)
μ、v均为频率变量
1.5.3二维取样和二维取样定理
二维取样:在二维信号中,将信号从空间域转换到频域的过程
二维取样定理:通过适当的取样,可以完全保留信号的空间信息
1.5.4图像中的混淆
图像混淆是指通过改变图像的像素值来使其变得模糊、混淆或失真。
-
举一个对图像做混淆的例子,过程为:获取图像的宽、高;为了存储混淆后的内容,创建一个新的图像对象;然后对每个像素进行混淆(先获取每个像素的R、G、B,将它们随机化赋值);最后将重新赋值后的像素导入新的图像
-
核心代码如下:
width, height = img.size new_img = Image.new("RGB", (width, height), "white") # 对每个像素进行混淆 for x in range(width): for y in range(height): # 获取原始像素值 r, g, b = img.getpixel((x, y)) # 对每个像素的RGB值进行一些随机的操作 r = (r + random.randint(-10, 10)) % 256 g = (g + random.randint(-10, 10)) % 256 b = (b + random.randint(-10, 10)) % 256 # 将混淆后的像素值写入新的图像对象中 new_img.putpixel((x, y), (r, g, b))
效果如下:
原图:
混淆后:
1.5.5二维离散傅里叶变换及其反变换
二维离散傅里叶变换(DFT)是一种计算二维信号变幻的方法,将二维信号分解为一组正弦、余弦函数,用以提取信号中的频域信息;它的 反变换 称为离散二维傅里叶反变换(DFT-IFT)
1.6二维离散傅里叶变换的一些性质
1.6.1空间和频率间隔的关系
具体表示为:
△
μ
=
1
M
△
T
(1)
△μ= \frac {1}{M△T}\tag 1
△μ=M△T1(1)
△ v = 1 N △ Z (2) △v=\frac {1}{N△Z}\tag2 △v=N△Z1(2)
其中,M与N表示宽度和高度,△T和△Z表示样本间的间隔,△μ和△v分别表示两个维度的频率域间隔
1.6.2平移和旋转
两种操作均可以通过变换矩阵实现
- 平移:通过添加一个常量即可,如: X ′ = X + C X'=X+C X′=X+C
- 旋转:可以通过旋转矩阵实现,如: X ′ = R ∗ X X'=R*X X′=R∗X
1.6.3周期性
二维离散傅里叶变换是一个周期性函数,其周期性取决于 DFT 的系数,周期性是指 DFT 的系数矩阵在时间上或空间上重复
1.6.4对称性
DFT)具有许多对称性,这些对称性与 DFT 的系数有关,DFT 的系数数组通常表示为一个二维矩阵,其中每个元素表示一个频率分量的振幅
DFT 的系数矩阵具有许多对称性,包括轴对称性、中心对称性和周期性。
1.6.5傅里叶谱和相角
- 傅里叶谱:指的是 DFT变换后,数据在频域的分布情况。在DFT中,数据以二维矩阵的形式存在,矩阵的每一行代表数据的一个子集,通过DFT可以将二维矩阵转换为一个一维数组,它能提供数据的频域信息(峰值。频率、振幅),这个一位数组即傅里叶谱
- 相角:指频率的相位
1.6.6二维卷积定理
二维循环卷积的表达式如下:
f
(
x
,
y
)
※
h
(
x
,
y
)
=
∑
m
=
0
M
−
1
∑
n
=
0
N
−
1
f
(
m
,
n
)
h
(
x
−
m
,
y
−
n
)
(1)
f(x,y)※h(x,y) = \sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f(m,n)h(x-m,y-n)\tag1
f(x,y)※h(x,y)=m=0∑M−1n=0∑N−1f(m,n)h(x−m,y−n)(1)
二维卷积定理可以表示式(1),反变换为式(2):
f
(
x
,
y
)
※
h
(
x
,
y
)
<
−
>
F
(
μ
,
v
)
H
)
(
μ
,
v
)
(1)
f(x,y)※h(x,y)<->F(μ,v)H)(μ,v)\tag1
f(x,y)※h(x,y)<−>F(μ,v)H)(μ,v)(1)
f ( x , y ) h ( x , y ) < − > F ( μ , v ) H ) ※ ( μ , v ) (2) f(x,y)h(x,y)<->F(μ,v)H)※(μ,v)\tag2 f(x,y)h(x,y)<−>F(μ,v)H)※(μ,v)(2)
1.6.7二维离散傅里叶变换性质的小结
公式汇总:内容很多,需要回到书本160页
1.7频率域滤波基础
1.7.1频率域的其它特性
2D DFT 可以将信号分解成不同频率的成分,类似于一维 DFT,但可以处理二维信号。因此,2D DFT 也具有频域滤波的特性,可以通过选择不同频率的成分来过滤信号
1.7.2频率域滤波基础
滤波公式如下:
g
(
x
,
y
)
=
I
D
F
T
[
H
(
μ
,
v
)
F
(
μ
,
v
)
]
(1)
g(x,y)=IDFT[H(μ,v)F(μ,v)]\tag1
g(x,y)=IDFT[H(μ,v)F(μ,v)](1)
其中:IDFT是离散傅里叶变换的逆变换,F是f的DFT,H是滤波函数,g是滤波后的结果
1.7.3频率域滤波步骤小结
如果有需要,可以为实验处理的图像矩阵补零。
1.7.4 空间和频率域滤波间的对应
可以看作是一种信号处理中的映射关系。
在空间域中,滤波器可以被看作是一组矩阵或向量;
在频率域中,滤波器则可以被看作是一组复指数或多项式
1.8一些滤波器
理想滤波器 | 区别 | 应用范围 |
---|---|---|
低通 | 低频段的信号被完全保留,高频段的信号被完全衰减 | 去除信号中的高频段分量 |
高通 | 理想高通滤波器则是指信号在通过滤波器后,高频段的信号被完全保留,低频段的信号被完全衰减 | 保留信号中的高频段分量,例如图像信号处理中的高斯滤波器,可以平滑图像并保留图像的细节 |
布特沃斯滤波器 | 区别(都是二阶滤波器) | 应用范围 |
---|---|---|
低通 | 传递函数是一个二次函数 | 去除信号中的高频段分量 |
高通 | 传递函数是一个三次函数 | 保留信号中的高频段分量,例如图像信号处理中的高斯滤波器,可以平滑图像并保留图像的细节 |