生成一段MATLAB程序,按下按钮1显示低通滤波器,并显示图像,按下按钮2显示高通滤波器,并显示图像,输入函数的频率是随着时间的变化而变化的
时间: 2024-03-17 16:44:23 浏览: 13
以下是可能实现上述功能的MATLAB代码:
```matlab
% 定义图像文件名
img_file = 'image.jpg';
% 读取图像文件
img = imread(img_file);
% 定义时间变化的频率函数
freq_func = @(t) sin(t);
% 定义低通滤波器
lp_filter = fspecial('gaussian', [5 5], 2);
% 定义高通滤波器
hp_filter = fspecial('laplacian');
% 创建GUI窗口
fig = uifigure('Name', 'Filter Image');
% 创建显示图像的Axes
ax = uiaxes(fig);
ax.Position = [50 100 500 400];
% 创建按钮1,按下显示低通滤波器处理后的图像
btn1 = uibutton(fig, 'push', 'Text', 'Low-pass Filter', 'Position', [50 50 150 30], 'ButtonPushedFcn', @(btn1,event) showFilteredImage(ax, img, lp_filter, freq_func));
% 创建按钮2,按下显示高通滤波器处理后的图像
btn2 = uibutton(fig, 'push', 'Text', 'High-pass Filter', 'Position', [250 50 150 30], 'ButtonPushedFcn', @(btn2,event) showFilteredImage(ax, img, hp_filter, freq_func));
function showFilteredImage(ax, img, filter, freq_func)
% 计算当前时间的频率
freq = freq_func(now);
% 应用滤波器
filtered_img = imfilter(img, filter, 'circular');
% 显示滤波后的图像
imshow(ax, filtered_img);
% 设置Axes标题
if filter == lp_filter
title(ax, sprintf('Low-pass Filter (Freq: %.2f)', freq));
elseif filter == hp_filter
title(ax, sprintf('High-pass Filter (Freq: %.2f)', freq));
end
end
```
这段代码创建了一个GUI窗口,包含一个显示图像的Axes和两个按钮。按下按钮1会显示低通滤波器(使用高斯核)处理后的图像,按下按钮2会显示高通滤波器(使用拉普拉斯核)处理后的图像。图像文件名、时间变化的频率函数、滤波器的类型和参数都可以根据需要进行修改。