ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Matlab频域高/低通滤波

2020-11-24 20:00:30  阅读:233  来源: 互联网

标签:subplot imshow img idx idy title 频域 Matlab 通滤波


建议参考书籍:数字图像处理_第三版 冈萨雷斯

写在前面:
对于给定的低通滤波器的函数表达式,可以得到高通滤波器的函数表达式:在这里插入图片描述

理想高/低通滤波器

理想高通

一个二维理想高通滤波器(IHPF)定义为:
在这里插入图片描述其中,D0为截至频率。D的表达式为:(后同)
在这里插入图片描述是频域率中点(u, v)与频率矩形中心的距离,其中P,Q为频率矩形的长宽。

具体实现代码:

clc;
clear;
close all;

img=imread('test.jpg');
subplot(221),imshow(img),title('原图');
F=fft2(img);
[M,N]=size(F);
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=M;% 可以自己调节截止频率
H=ones(M,N);
for i=1:M
    for j=1:N
        if D(i,j)^2<=D0
            H(i,j)=0;
        end
    end
end

shiftH=fftshift(H);
subplot(222),surf(shiftH(1:10:600,1:10:600)),title('理想高通滤波器透视图');
subplot(223),imshow(fftshift(H),[]),title('理想高通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('高频滤波');

代码效果:

在这里插入图片描述

理想低通

在以原点为圆心、以D0为半径的圆内,无衰减地通过所有频率,而在圆外‘切断‘所有频率的二维滤波器,称为理想低通滤波器(ILPF);它由以下函数确定:

在这里插入图片描述具体代码实现:

clc;
clear;
close all;

img=imread('test.jpg');
subplot(221),imshow(img),title('原图');
F=fft2(img);
[M,N]=size(F);
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=M;% 可以自己调节截止频率
H=zeros(M,N);
for i=1:M
    for j=1:N
        if D(i,j)^2<=D0
            H(i,j)=1;
        end
    end
end

shiftH=fftshift(H);
subplot(222),surf(shiftH(1:10:600,1:10:600)),title('理想低通滤波器透视图');
subplot(223),imshow(fftshift(H),[]),title('理想低通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('低通滤波');

代码效果:
在这里插入图片描述

高斯高/低通滤波

高斯高通

高斯高通滤波器函数表达式:

在这里插入图片描述
实现代码:

clc;
clear;
close all;


img=imread('test.jpg');
F=fft2(img);
[M,N]=size(F);
subplot(221),imshow(img),title('原图');
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=0.1*M;
H=1-exp(-(D.^2)/(2*(D0)^2));
shiftH=fftshift(H);
subplot(222),mesh(shiftH(1:10:600,1:10:600)),title('高斯高通滤波透视图');
subplot(223),imshow(fftshift(H),[]),title('高斯高通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('高斯高通滤波');

代码效果:
在这里插入图片描述

高斯低通

高斯低通滤波器函数表达式:

在这里插入图片描述
具体代码实现:

clc;
clear;
close all;


img=imread('test.jpg');
F=fft2(img);
[M,N]=size(F);
subplot(221),imshow(img),title('原图');
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=0.1*M;
H=exp(-(D.^2)/(2*(D0)^2));
shiftH=fftshift(H);
subplot(222),mesh(shiftH(1:10:600,1:10:600)),title('高斯低通滤波透视图');
subplot(223),imshow(fftshift(H),[]),title('高斯低通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('高斯低通滤波');

代码效果:
在这里插入图片描述

巴特沃斯高/低通滤波器

巴特沃斯高通

n阶巴斯沃特高通滤波器函数表达式为:

在这里插入图片描述代码效果:
在这里插入图片描述

巴特沃斯低通

截止频率位于距原点D0处的n阶巴特沃斯低通滤波器(BLPF)的传递函数为:
在这里插入图片描述
具体实现代码:

clc;
clear;
close all;


img=imread('test.jpg');
F=fft2(img);
[M,N]=size(F);
subplot(221),imshow(img),title('原图');
u=0:(M-1);v=0:(N-1);
idx = find(u > M/2);u(idx) = u(idx) - M;
idy = find(v > N/2);v(idy) = v(idy) - N;
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=0.1*M;
H=1-exp(-(D.^2)/(2*(D0)^2));
shiftH=fftshift(H);
subplot(222),mesh(shiftH(1:10:600,1:10:600)),title('高斯高通滤波透视图');
subplot(223),imshow(fftshift(H),[]),title('高斯高通滤波器图像表示');
g=real(ifft2(F.*H));
subplot(224),imshow(g,[]),title('高斯高通滤波');

代码效果展示:

在这里插入图片描述

标签:subplot,imshow,img,idx,idy,title,频域,Matlab,通滤波
来源: https://blog.csdn.net/qq_44310495/article/details/110008135

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有