对图像尝试进行不同截止频率的 理想高/低通滤波,观察结果图像。对原图以及不同滤波后的 图像进行傅里叶变换,观察其频谱图差别。 内容包括源代码、源图像、以及变换后的频谱图,并试着比较评论一下
时间: 2024-10-21 19:16:06 浏览: 20
为了完成这个实验,你需要准备一个源图像,这里我们假设你有一个名为`source_image.jpg`的图片。我们将使用Python和OpenCV库来进行图像处理和傅里叶变换。
首先,我们需要加载图像,然后分别进行低通和高通滤波:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取源图像
src = cv2.imread('source_image.jpg')
gray_src = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
# 定义高通和低通滤波器
lowpass_filter = cv2.create bilateralFilter(src, 9, 75, 75)
highpass_filter = cv2.subtract(gray_src, lowpass_filter)
# 显示原图和滤波后的图像
plt.subplot(2, 2, 1), plt.imshow(src, cmap='gray'), plt.title('Original Image')
plt.subplot(2, 2, 2), plt.imshow(lowpass_filter, cmap='gray'), plt.title('Low Pass Filtered')
plt.subplot(2, 2, 3), plt.imshow(highpass_filter, cmap='gray'), plt.title('High Pass Filtered')
plt.show()
```
接下来,我们要计算每个图像的傅里叶变换:
```python
# 将灰度图像转换为复数数组
fft_lowpass = np.fft.fft2(lowpass_filter)
fft_highpass = np.fft.fft2(highpass_filter)
# 计算幅度和相位
magnitude_lowpass = np.abs(fft_lowpass)
magnitude_highpass = np.abs(fft_highpass)
# 取对角线部分(实部)
phase_lowpass = np.angle(fft_lowpass)
phase_highpass = np.angle(fft_highpass)
# 画出频谱图
fig, axs = plt.subplots(1, 2, figsize=(10, 5))
axs[0].imshow(magnitude_lowpass, cmap='gray'), axs[0].set_title('Magnitude - Low Pass')
axs[1].imshow(magnitude_highpass, cmap='gray'), axs[1].set_title('Magnitude - High Pass')
plt.show()
```
在查看源图像、低通滤波后的图像和它们的频谱图之后,你可以观察到以下差异:
1. **低通滤波**:频谱图的高频成分明显减弱,因为低通滤波器允许较低的频率(如颜色和大尺度结构)通过,而抑制高频细节。
2. **高通滤波**:频谱图的低频成分减少,高频成分增加,这使得边缘和细节更明显,因为高通滤波器强调了图像中的高频变化。
阅读全文