5.1 离散傅里叶变换
图像通过离散傅里叶变换,由空间域变换到频域,能量进行重新分布,可以通过对频域的数据进行处理,达到处理数字图像的目的。但在将图像变换到频率域处理完成后,还需要将其逆变换回 来,否则处理后的图像无法正常显示。
我们需要了解以下函数:
①cv2.dft(img / 255, flags=cv2.DFT_COMPLEX_OUTPUT):
cv2.dft是 OpenCV 用来执行离散傅里叶变换的函数。
img/255 是把图像像素值从[0, 255]归一化到[0, 1]范围。
flags=cv2.DFT_COMPLEX_OUTPUT 表示输出结果为复数形式,也就是每个像素会用实部和虚部来表示。
②np.fft.fftshift其作用是将零频率分量从频谱的左上角移到中心位置,这样能更方便地观察频谱特征。
③cv2.idft是OpenCV用于执行逆离散傅里叶变换的函数。它会把频域图像转换回空域图像。
④cv2.magnitude是OpenCV里用于计算复数的幅度的函数。由于前面的离散傅里叶变换结果是复数形式,每个像素由实部([:, :, 0])和虚部([:, :, 1])构成,所以通过该函数可计算出每个像素的幅度。具体作用可看代码注释。
⑤np.log是 NumPy 库中的自然对数函数。在频域中,图像的频谱值范围可能非常大,动态范围很宽,直接显示可能会导致大部分细节信息丢失,因为大部分值集中在较小的范围内,而少数较大的值会使得图像显示效果不佳,取自然对数可以压缩频谱的动态范围,使得原本很大的数值变得相对较小,从而在显示时能够更清晰地展示频谱的细节。
代码及运行结果如图2.26。
5.2 离散余弦变换
离散余弦变换是一种特殊的离散傅里叶变换,当函数为实偶函数时,傅里叶变换展开式只存在余弦项,故称为离散余弦变换。
我们需了解以下函数:
①cv2.dct是OpenCV提供的用于执行离散余弦变换的函数。
②cv2.idct是OpenCV中用于执行逆离散余弦变换的函数。
③abs()函数是NumPy库中的绝对值函数,对于复数,它计算复数的模。abs(img_dft) 会将img_dft中的每个复数元素转换为其对应的模值,得到一个只包含实数的数组。这一步是为了后续方便进行对数运算,因为对数函数的输入要求为正数。
代码及运行结果如图2.27。
1677

被折叠的 条评论
为什么被折叠?



