图像频域滤波python
时间: 2025-03-19 13:05:56 浏览: 44
### Python 实现图像频域滤波
以下是基于提供的引用以及专业知识编写的 Python 示例代码,用于展示如何通过频域滤波来实现图像降噪和增强。
#### 导入必要的库
为了完成频域滤波操作,需要导入 `numpy` 和 `matplotlib.pyplot` 库来进行数值计算和可视化。另外还需要 OpenCV (`cv2`) 来读取和显示图像[^3]。
```python
import numpy as np
import cv2
from matplotlib import pyplot as plt
```
#### 定义理想低通滤波器 (Ideal Low-Pass Filter)
理想低通滤波器是一种简单的频域滤波方法,可以保留低于指定截止频率的成分并抑制高于该频率的部分[^1]。
```python
def idealFilterLP(D0, shape):
P, Q = shape
U, V = np.meshgrid(range(Q), range(P))
D = np.sqrt((U - Q/2)**2 + (V - P/2)**2)
H = (D <= D0).astype(float)
return H
```
#### 加载灰度图像
加载一张测试图片作为输入数据,并将其转换为浮点数格式以便后续处理。
```python
img = cv2.imread('dog.png', 0).astype(np.float32) / 255
```
#### 计算傅里叶变换及其移位版本
利用 NumPy 的快速傅里叶变换函数对原始图像执行 FFT 转换,并将零频率分量移动到中心位置。
```python
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20 * np.log(np.abs(fshift))
```
#### 创建滤波后的频谱图
应用定义的理想低通滤波器于已平移到中间的频谱上,从而得到经过过滤的结果。
```python
filtered_magnitude = magnitude_spectrum * idealFilterLP(50, img.shape)
```
#### 反向傅里叶变换恢复空间域中的图像
最后一步是从修改过的频谱重建实际的空间表示形式。这涉及逆FFT过程加上再次调整原点回到角落处的操作。
```python
back_ishift = np.fft.ifftshift(filtered_magnitude)
img_back = np.fft.ifft2(back_ishift)
img_back = np.abs(img_back)
plt.figure(figsize=(8,6))
# 显示原始图像
plt.subplot(131), plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
# 展示未经任何改变前的幅度分布情况
plt.subplot(132), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
# 输出最终被理想低通滤镜作用之后的新影像效果
plt.subplot(133), plt.imshow(img_back, cmap='gray')
plt.title('After Ideal LPF'), plt.xticks([]), plt.yticks([])
plt.show()
```
以上就是完整的 Python 频域滤波流程演示[^2]。
---
阅读全文
相关推荐


















