图像处理中的二维傅里叶变换
问题来源是对彩色图像进行压缩时得出的傅里叶系数的图像如何解释,导入图片,转化为灰度图片:
#彩色图片一般是由RGB组成,其实就是3个二维数组叠加而成,当R=G=B时,彩色图片就会变成一种灰度颜色,所以灰度颜色的图片其实就是一个二维数组 #灰度化处理总共有三种方法:最大值法、平均值法、加权平均法 A = imread(os.path.join('..','DATA','jelly.jpg')) Abw = np.mean(A, -1); # 转化为灰度图像也可以通过cv2库或者plt, #0:压缩行,对各列求均值,返回 1* n 矩阵,axis =1 :压缩列,对各行求均值,返回 m *1 矩阵
接下来利用快速傅里叶变换,求解二维矩阵(每个变量是灰度值)的傅里叶系数,将所得的绘制在对数坐标系中:At = np.fft.fft2(Abw)#计算二维的傅里叶变换 F = np.log(np.abs(np.fft.fftshift(At))+1) # 将图像中的低频部分移动到图像的中心;将 FFT 置于对数刻度上
。得到的图像如下:
下面介绍一下二维傅里叶变换:连续的傅里叶变换为:
F
(
u
,
v
)
=
∫
−
∞
∞
∫
−
∞
∞
f
(
x
,
y
)
e
−
2
π
i
(
u
x
+
v
y
)
,
d
x
,
d
y
F(u,v) = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x,y) e^{-2\pi i(ux+vy)} , dx , dy
F(u,v)=∫−∞∞∫−∞∞f(x,y)e−2πi(ux+vy),dx,dy离散的傅里叶变换为:
F
(
u
,
v
)
=
1
M
N
∑
x
=
0
M
−
1
∑
y
=
0
N
−
1
f
(
x
,
y
)
e
−
i
2
π
(
u
x
/
M
+
v
y
/
N
)
F(u,v)=\frac{1}{\sqrt{MN}}\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)\mathrm{e}^{-i2\pi(ux/M+vy/N)}
F(u,v)=MN1x=0∑M−1y=0∑N−1f(x,y)e−i2π(ux/M+vy/N)各变量的具体意义如下:
f
(
x
,
y
)
f(x,y)
f(x,y):输入图像的灰度矩阵,即空间域中的图像,也就是灰度值。
F
(
u
,
v
)
F(u,v)
F(u,v):变换后的复矩阵,表示频率域中的图像。其实部和虚部分别代表频率分量的幅度和相位。
x
,
y
x,y
x,y:空间域中的坐标,代表图像中的像素位置,取值范围都是从
0
∼
M
−
1
0 \sim M-1
0∼M−1,
0
∼
N
−
1
0\sim N-1
0∼N−1。
u
,
v
u,v
u,v:频率域中的坐标,代表图像中的频率分量。
M
,
N
M,N
M,N:图像的尺寸,即灰度矩阵的宽度和高度。
i
i
i:虚数单位。
u
u
u和
v
v
v是频率域中的坐标变量,它们分别代表了图像在水平方向和垂直方向上的频率分量。这些频率分量是图像中不同空间频率的正弦波和余弦波的叠加结果,
u
u
u和
v
v
v的取值范围和
x
,
y
x,y
x,y相同。
下面说一下具体意义:傅里叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数。图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈的区域,对应的频率值较高。
图像的频谱是图像灰度变化强度的指标,是灰度在平面空间中的梯度。 二维傅里叶变换算法的运行速度很慢的,算法的时间复杂度为O(n^ 4)。在实际应用中,由于直接计算二维离散傅里叶变换的计算量较大,通常会采用快速傅里叶变换(Fast Fourier Transform, FFT)算法来提高计算效率。FFT算法通过减少不必要的计算来加速DFT的计算过程,是图像处理中常用的傅里叶变换实现方法。此外,在图像处理中,还经常对DFT的结果进行中心化处理(即将频率域的原点移动到矩阵的中心),以便于观察和分析频谱的对称性。中心化后的频谱图通常能够更直观地展示图像的频率分布特征。
如上图右所示,利用快速傅里叶变换并且将低频部分移动到中心。