高斯高通滤波器matlab代码

版权声明:<–本博客所有内容均为自己在学习工作中的总结、摘录等-- --转载请注明出处-- --如有侵权请联系删除–> https://mp.csdn.net/mdeditor/89389365#

function [g] =GaussianHighPassFilter (image_input , D0)
%GULS 高斯高通滤波器,D0为截至频率的(相当于设置在傅里叶谱图的半径值)
%判断图像是否为灰度图,不是灰度图的话,将图像变为灰度图
f = image_input;
f = mat2gray(f,[0 255]);
% 1.给定一幅大小为M*N的输入图像f(x,y),得到填充参数P = 2M,Q = 2N
[m,n] = size(f);
P = 2 * m;
Q = 2 * n; 
% 2.对f(x,y)添加必要数量的0,形成大小为P * Q的填充后的图像fp(x,y)
fp = zeros(P,Q);
fp(1:m,1:n) = f(1:m,1:n);
% 3.用(-1)^(x+y)乘以fp(x,y)移到其交换的中心
for i = 1 : m
    for j = 1 : n 
        fp(i,j) = double(fp(i,j)*(-1)^(i+j));
    end
end
% 4.计算来自步骤3的图像的DFT,得到F(u,v)
F = fft2(fp,P,Q);
% 5.生成一个实的、对称的滤波函数H(u,v),其大小为P*Q,中心在(P/2,Q/2)处。
% 用阵列相乘形成乘积G(u,v) = H(u,v)F(u,v);即G(i,k)=H(i,k)F(i,k)
H = zeros(P,Q);
a = 2 * D0^2;
for u = 1 :P
    for v = 1:Q
        D = (u-(m+1.0))^2+(v-(n+1.0))^2;
        H(u,v) = 1 - exp((-D)/a);
    end
end
G = H.*F;
% 6.得到处理后的图像
gp = ifft2(G); 
gp = real(gp);
for i = 1 : m
    for j = 1 : n 
        gp(i,j) = double(gp(i,j)*(-1)^(i+j));
    end
end
% 7.通过从gp(x,y)的左上象限提取M*N区域,得到最终处理结果g(x,y)
g(1:m,1:n) = gp(1:m,1:n);

结果图

在这里插入图片描述


  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值