问题三十三:傅立叶变换——低通滤波

在这里插入图片描述
当我们使用傅里叶变换对图像进行频谱分析后,可以在频域中进行滤波操作,从而实现对图像的处理。低通滤波器可以用来去除高频信号,从而平滑图像。下面我们将使用Python和OpenCV来实现低通滤波。

首先,我们导入必要的库和加载一张图片。

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 加载图片
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)

接下来,我们对图片进行傅里叶变换,并将频谱中心化,以便于我们进行滤波。

# 进行傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)

# 将频谱中心化
magnitude_spectrum = 20*np.log(np.abs(fshift))

然后,我们定义一个低通滤波器的掩模,用于过滤高频信号。

# 定义低通滤波器掩模
rows, cols = img.shape
crow, ccol = rows//2, cols//2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

在本例中,我们将以图片中心为中心,设置一个大小为60x60的掩模,将该掩模区域内的所有像素设置为1,其余区域的像素为0。这将过滤掉高频信号。

接着,我们将掩模应用到频谱中。

# 将掩模应用到频谱中
fshift_masked = fshift * mask
magnitude_spectrum_filtered = 20*np.log(np.abs(fshift_masked))

最后,我们对经过滤波后的频谱进行傅里叶逆变换,将其转换为图像。

# 将频谱反变换为图像
f_ishift = np.fft.ifftshift(fshift_masked)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)

完整代码如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 加载图片
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)

# 进行傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)

# 将频谱中心化
magnitude_spectrum = 20*np.log(np.abs(fshift))

# 定义低通滤波器掩模
rows, cols = img.shape
crow, ccol = rows//2, cols//2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

# 将掩模应用到频谱中
fshift_masked = fshift * mask
magnitude_spectrum_filtered = 20*np
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值