python-opencv(13)傅里叶变换(上)

简介: 文章目录1. 傅里叶变换的理论基础2. numpy实现傅里叶变换2.1. 相关的函数2.1 代码实现

1. 傅里叶变换的理论基础

离散的傅里叶变换建立的函数从空间域之间的转换关系,把空间域难以显示的特征在频率域中十分清楚的显示出来。在数字图像处理中,经常需要这种转换关系和转换规律。具体请看数字图像处理一书。

注意:

  • 傅里叶得到高频和低频的信息,针对低频,高频处理能够实现不同的目的。
  • 傅里叶过程是可逆的,图像经过傅里叶变换,逆傅里叶变换后,能够恢复到原始的图像。
  • 在频率对图像进行处理,在频域的处理会反映在逆变换图像上。

2. numpy实现傅里叶变换

2.1. 相关的函数

函数:numpy.fft.fft2

  • 实现傅里叶变换
  • 返回的是一个复数数组

函数:numpy.fft.fftshift

将零频率分量移动到频谱中心,有下图所示。

函数:20*np.log(np.abs(fshift))

经傅里叶变换的计算结果映射到[0,255]这个区间内。

2.1 代码实现

#%%傅里叶变换
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(r'C:\\Users\\lihuanyu\\Desktop\\opencv\\image\\lena.bmp',cv2.IMREAD_GRAYSCALE)
#进行傅里叶变换
f = np.fft.fft2(img)
mid_result = 20*np.log(np.abs(f))
fshift = np.fft.fftshift(f)
result = 20*np.log(np.abs(fshift))
fig,ax = plt.subplots(1,3,figsize=(10,3))
ax1 = plt.subplot(131)
ax1.imshow(img,cmap="gray")
ax1.axis("off")
ax2 = plt.subplot(132)
ax2.axis("off")
ax2.imshow(mid_result,cmap="gray")
ax3 = plt.subplot(133)
ax3.axis("off")
ax3.imshow(result,cmap="gray")
plt.show()

结果

3. numpy实现逆傅里叶变换

3.1 相关的函数

函数:numpy.fft.ifft2

  • 实现一个逆变换
  • 返回的是一个复数数组
    函数:numpy.fft.ifftshift
    fftshift函数的逆函数。如下图所示:
  • 函数:iimg = np.abs
    将逆傅里叶变换结果设置到[0,255]

3.2 代码实现

#%%傅里叶逆变换
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(r'C:\\Users\\lihuanyu\\Desktop\\opencv\\image\\boat.bmp',cv2.IMREAD_GRAYSCALE)
#进行傅里叶变换
f = np.fft.fft2(img)
ishift = np.fft.ifftshift(f)
#逆变换
iimg = np.fft.ifft2(ishift)
#设置区间
iimg = np.abs(iimg)
fig,ax = plt.subplots(1,2,figsize=(7,3))
ax1 = plt.subplot(121)
ax1.imshow(img,cmap="gray")
ax1.axis("off")
ax2 = plt.subplot(122)
ax2.axis("off")
ax2.imshow(iimg,cmap="gray")
plt.show()

结果

4. 在频域进行高通滤波

4.1 对高频、低频和滤波的理解

低频对应图像内变化缓慢的灰度分量。例如,在一幅大草原的图像中,低频对应着广袤的颜色趋于一致的草原。

高频对应图像内变化越来越快的灰度分量,是由灰度的尖锐过渡造成的。例如,在一幅大草原的图像中,其中狮子的边缘等信息。

滤波就是接受(通过)或者拒绝一定频率的分量。通过低频的滤波器称为低通滤波器;通过高频的滤波器称为高通滤波器。

相关文章
|
3月前
|
机器学习/深度学习 算法 Python
傅里叶变换算法和Python代码实现
傅立叶变换是物理学家、数学家、工程师和计算机科学家常用的最有用的工具之一。本篇文章我们将使用Python来实现一个连续函数的傅立叶变换。
68 8
|
3月前
|
存储 计算机视觉 Python
【python版CV】-直方图 & 傅里叶变换
【python版CV】-直方图 & 傅里叶变换
|
3月前
|
存储 计算机视觉
【OpenCV】—离散傅里叶变换
【OpenCV】—离散傅里叶变换
|
10月前
|
计算机视觉
OpenCV-离散傅里叶变换cv::dft&cv::idft
OpenCV-离散傅里叶变换cv::dft&cv::idft
100 0
|
计算机视觉
OpenCV_10 傅里叶变换:频域滤波+CV的应用
傅里叶变换是由法国的一位数学家Joseph Fourier在18世纪提出来的,他认为:任何连续周期的信号都可以由一组适当的正弦曲线组合而成。
142 0
OpenCV_10 傅里叶变换:频域滤波+CV的应用
|
计算机视觉 Python
cv2实现傅里叶变换---OpenCV-Python开发指南(32)
cv2实现傅里叶变换---OpenCV-Python开发指南(32)
133 0
cv2实现傅里叶变换---OpenCV-Python开发指南(32)
|
数据安全/隐私保护 计算机视觉 Python
傅里叶变换原理---OpenCV-Python开发指南(31)
傅里叶变换原理---OpenCV-Python开发指南(31)
219 0
傅里叶变换原理---OpenCV-Python开发指南(31)
|
数据安全/隐私保护 计算机视觉 Python
python-opencv(13)傅里叶变换(下)
文章目录 1. 傅里叶变换的理论基础 2. numpy实现傅里叶变换 2.1. 相关的函数 2.1 代码实现
107 0
python-opencv(13)傅里叶变换(下)
|
数据安全/隐私保护 计算机视觉 Python
opencv 傅里叶变换(python)
opencv 傅里叶变换(python)