MATLAB绘制BLPF的三维图
时间: 2024-06-16 19:04:11 浏览: 141
MATLAB是一种常用的科学计算软件,它提供了丰富的绘图功能。在MATLAB中,可以使用不同的函数来绘制三维图形,包括低通滤波器(BLPF)的图形。
要绘制BL三维图,首先需要定义滤波的传递函数。BLPF是一种低通滤波器,它可以通过截断高频信号来现信号的平滑。传递函数表示为:
H(f) = 1 / (1 + (f / fc)^2)
其中,H(f)是频率响应,f是频率,fc是截止频率。
接下来,可以使用MATLAB中的meshgrid函数生成网格点,并计算每个点对应的频率响应值。然后,使用surf函数将这些点绘制成三维图形。
下面是一个示例代码,用于绘制BLPF的三维图:
```matlab
% 定义截止频率
fc = 10;
% 生成网格点
[x, y] = meshgrid(-20:0.5:20, -20:0.5:20);
% 计算频率响应
f = sqrt(x.^2 + y.^2);
H = 1 ./ (1 + (f / fc).^2);
% 绘制三维图形
figure;
surf(x, y, H);
xlabel('X');
ylabel('Y');
zlabel('H(f)');
title('BLPF的三维图');
% 设置视角
view(45, 30);
```
运行以上代码,即可在MATLAB中绘制出BLPF的三维图形。你可以根据需要调整截止频率和网格点的范围来获得不同的图形效果。
相关问题
MATLAB绘制巴特沃兹(BLPF)低通滤波器的三维图
MATLAB可以使用`freqz`函数来绘制巴特沃兹(BLPF)低通滤波器的三维图。下面是一个示例代码:
```matlab
% 定义滤波器参数
N = 6; % 滤波器阶数
fc = 0.2; % 截止频率
% 创建巴特沃兹低通滤波器
[b, a] = butter(N, fc);
% 绘制滤波器的频率响应
freqz(b, a);
% 设置图形标题和坐标轴标签
title('Butterworth Lowpass Filter Frequency Response');
xlabel('Frequency (normalized)');
ylabel('Magnitude (dB)');
```
运行上述代码后,MATLAB会绘制出巴特沃兹低通滤波器的三维图,横轴表示频率(归一化),纵轴表示幅度(以分贝为单位)。
用python实现:分别利用BLPF和BHPF滤波器提取合成图像的低频和高频信息,绘制低频图像和高频图像对应频谱图和空域图像,要求,程序包含滤波器公式
好的,以下是用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)
其中左侧的为原始图像,中间的为频谱图,右侧上方的为低频图像,右侧下方的为高频图像。可以看到,低频图像主要包含图像的平滑区域,高频图像主要包含图像的边缘和细节部分。频谱图上蓝色的区域为低频区域,红色的区域为高频区域。
阅读全文