MATLAB高通滤波与低通滤波GUI实现代码

1.需搭建的GUI界面

两个axes,一个用于导入原始图像,一个用于输出处理后的头像,并且记好他们的Tag,在代码里会用到

2.导入图片功能代码实现

给一个String为导入图片的button添加callback函数,在这里提供了多种方法

function openImg_Callback(hObject, eventdata, handles)%菜单栏导入图片的控件
% hObject    handle to openImg (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% axes(handles.show_sourImg);%导入图片到框1
% image=imread('fruit.jpg');%导入flower图片
% imshow(image);
% title('yy')
%支持用户自己选定图片,任何格式的图片
%%选定axes show_sourImg
% [filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图像');
%    if isequal(filename,0)||isequal(pathname,0)
%       errordlg('没有选中文件','出错');
%    return;
%    else 
%    file=[pathname,filename];
%    end
% pic = imread(file);
% axes(handles.show_sourImg);
% imshow(pic);
% title('原始图像','color','b');
 [filename,pathname]=uigetfile(...
        {'*.bmp;*.jpg;*.png;*.jpeg','ImageFiles(*.bmp,*.jpg,*.png,*.jpeg)';...
            '*.*','AllFiles(*.*)'},...
            'Pickanimage');
    axes(handles.show_sourImg);%show_sourImg是输出图像的axes的Tag,换成自己的
    global fpath;%这个全局变量很重要,事关程序时候能正常运行,后续的全局变量也尽量要用这个名字
    fpath=[pathname filename];
    img_1=imread(fpath);
    imshow(img_1);
    title('原始图像');

2.高通滤波代码

给String为高通滤波的button添加如下callback函数

 

function pushbutton24_Callback(hObject, eventdata, handles)%高通滤波
axes(handles.show_proImg);
global fpath;
img_2=imread(fpath);
img_2=rgb2gray(img_2);
img_2=imnoise(img_2,'salt & pepper',0.06);
 img_2=double(img_2);
img_2=fft2(img_2);
img_2=fftshift(img_2);

[M,N,~]=size(img_2);
nn=2;
d0=50;
m=floor(M/2);n=floor(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=1/(1+0.414*(d0/d)^(2*nn));
        result(i,j)=h*img_2(i,j);
    end
end

result=ifftshift(result);
J2=ifft2(result);
J3=uint8(real(J2));
imshow(J3);
title('高通滤波图');

4.低通滤波代码

给String为低通滤波的button添加如下callback函数

 

function pushbutton23_Callback(hObject, eventdata, handles)%低通滤波
axes(handles.show_proImg);
global fpath;
img_2=imread(fpath);
img_2=rgb2gray(img_2);
img_2=imnoise(img_2,'salt & pepper',0.06);
img_2=double(img_2);
img_2=fft2(img_2);
img_2=fftshift(img_2);

[M,N,~]=size(img_2);
nn=2;
d0=50;
m=floor(M/2);n=floor(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=1/(1+0.414*(d/d0)^(2*nn));
        result(i,j)=h*img_2(i,j);
    end
end
result=ifftshift(result);
J2=ifft2(result);
J3=uint8(real(J2));
imshow(J3);
title('低通滤波');

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中,可以使用`fft2`函数计算二维快速傅里叶变换(FFT),然后将其与巴特沃斯滤波器的频率响应相乘,最后使用`ifft2`函数计算FFT的逆变换来实现巴特沃斯低通和高通滤波。 下面是一个MATLAB示例代码,演示如何使用巴特沃斯滤波器对图像进行低通和高通滤波: ```matlab % 原始图像 im = imread('lena.png'); % 计算图像的傅里叶变换 F = fft2(im); % 定义巴特沃斯低通滤波器 D0 = 30; % 截止频率 n = 4; % 阶数 H = 1 ./ (1 + (sqrt(2) - 1) * (freqspace(size(im), 'meshgrid') / D0).^(2*n)); % 应用巴特沃斯低通滤波器 G = H .* F; % 计算图像的傅里叶逆变换 g = uint8(real(ifft2(G))); % 显示结果 subplot(1, 2, 1), imshow(im), title('原始图像') subplot(1, 2, 2), imshow(g), title('巴特沃斯低通滤波后的图像') % 定义巴特沃斯高通滤波器 D0 = 30; % 截止频率 n = 4; % 阶数 H = 1 ./ (1 + (freqspace(size(im), 'meshgrid') / D0).^(2*n)); % 应用巴特沃斯高通滤波器 G = H .* F; % 计算图像的傅里叶逆变换 g = uint8(real(ifft2(G))); % 显示结果 subplot(1, 2, 1), imshow(im), title('原始图像') subplot(1, 2, 2), imshow(g), title('巴特沃斯高通滤波后的图像') ``` 在上面的示例代码中,我们首先加载了一张图像,然后使用`fft2`函数计算了它的二维FFT。接着,我们定义了一个巴特沃斯低通滤波器和一个巴特沃斯高通滤波器,并使用它们来过滤傅里叶变换。最后,我们使用`ifft2`函数计算了FFT的逆变换,并将结果显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值