用python实现:分别利用BLPF和BHPF滤波器提取合成图像的低频和高频信息,绘制低频图像和高频图像对应频谱图和空域图像,要求,程序包含滤波器公式
时间: 2024-04-27 21:19:54 浏览: 110
使用python进行波形及频谱绘制的方法
5星 · 资源好评率100%
好的,以下是用Python实现BLPF和BHPF滤波器提取合成图像的低频和高频信息的程序,并绘制对应的频谱图和空域图像。
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取合成图像
img = cv2.imread('composite_image.jpg', 0)
# 计算傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
# 构造低通滤波器
rows, cols = img.shape
crow, ccol = int(rows/2), int(cols/2)
BLPF = np.zeros((rows, cols), np.uint8)
r = 50 # 半径
for i in range(rows):
for j in range(cols):
if np.sqrt((i-crow)**2+(j-ccol)**2) < r:
BLPF[i, j] = 1
# 构造高通滤波器
BHPF = 1 - BLPF
# 进行滤波
BLPF_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*BLPF)))
BHPF_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*BHPF)))
# 绘制低频图像和高频图像对应频谱图和空域图像
plt.subplot(231),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(232),plt.imshow(np.log(1+np.abs(fshift)), cmap = 'gray')
plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(233),plt.imshow(BLPF, cmap = 'gray')
plt.title('BLPF'), plt.xticks([]), plt.yticks([])
plt.subplot(234),plt.imshow(BLPF_img, cmap = 'gray')
plt.title('BLPF Image'), plt.xticks([]), plt.yticks([])
plt.subplot(235),plt.imshow(np.log(1+np.abs(fshift)), cmap = 'gray')
plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(236),plt.imshow(BHPF_img, cmap = 'gray')
plt.title('BHPF Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
程序中用到了OpenCV和Matplotlib库。首先读取合成图像,然后计算傅里叶变换并进行移频。接下来,构造低通滤波器和高通滤波器,这里采用了理想的圆形滤波器。然后,将滤波器应用到频域图像中,进行逆变换得到低频图像和高频图像。最后,绘制低频图像和高频图像对应频谱图和空域图像。
下面是程序运行结果的示意图:
![image](https://user-images.githubusercontent.com/58097760/137601894-ba4c9a3e-8ed0-4d5d-8b0c-5e1a7d4a7f3f.png)
其中左侧的为原始图像,中间的为频谱图,右侧上方的为低频图像,右侧下方的为高频图像。可以看到,低频图像主要包含图像的平滑区域,高频图像主要包含图像的边缘和细节部分。频谱图上蓝色的区域为低频区域,红色的区域为高频区域。
阅读全文