在频率域中直接生成滤波器

除了之前说的从空间滤波器中获得频率域滤波器,还可以从频率域中直接生成滤波器,这些滤波器被规定为距滤波器中心点的距离不同的函数。可以创建一个用于实现频率滤波器的网格数组,最主要的是需要计算任何点到频率矩形中一个指定点的距离函数,FFT(快速傅里叶)算法是假设变换的原点位于频率矩形的左上角,因此需要将原点平移到频率矩形的中心,用fftshift。网格数组如下:

%(频域滤波函数) 提供了距离计算及其所需的网格数组
function [U,V] = dftuv(M,N)
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;
[V,U] = meshgrid(v,u);
end

一、低通(平滑)频率域滤波器

常见的频率域低通滤波器有三个,理想低通滤波器(ILPF),巴特沃斯低通滤波器(BLPF),高斯低通滤波器(GLPF)。

1)理想低通滤波器的传递函数如下:

其中,D0为正数,D(u,v)为点(u,v)到滤波器中心的距离,满足D(u,v)=D0的点的轨迹为一个圆。如果用滤波器乘以一幅图像的傅里叶变换,我们会看到一个理想滤波器会切断(乘以0)该圆之外的所有F(u,v)分量,而保留圆上和圆内的所有分量不变(乘以1)。

可以用之前的mesh将滤波器显示出来:

             

2)n阶巴特沃斯低通滤波器,在距离滤波器中心D0处具有截止频率,传递函数为:

与理想低通滤波器不同的是,巴特沃斯低通滤波器的传递函数在D0点并没有一个尖锐的不连续,对于具有平滑传递函数的滤波器,通常将截止频率轨迹定义在H(u,v)降低为其最大值的一个指定的比例的点处。用mesh同样可以将该滤波器显示出来:

                  

3)高斯低通滤波器的传递函数如下:

其中,为标准差。该滤波器可以用mesh显示出来

                   

4)低通滤波器的例子

用高斯低通滤波器对一幅500*500的图像进行滤波,效果如下:

该例子的代码如下:

%用高斯低通滤波器进行滤波
f=imread(‘G:\数字图像处理(冈萨雷斯)\DIP3E_CH04_Original_Images\DIP3E_Original_Images_CH04\Fig0441(a)(characters_test_pattern).tif‘);
subplot(221);imshow(f); title(‘原图‘)
f = im2double(f);
%[f,revertclass] = tofloat(f);
PQ = paddedsize(size(f));
[U,V] = dftuv(PQ(1),PQ(2));
D = hypot(U,V);
D0 = 0.05*PQ(2);
F = fft2(f,PQ(1),PQ(2));
H = exp(-(D.^2)/(2*(D0^2)));
g = dftfilt(f,H);
g = im2uint8(g);
%g = revertclass(g);
subplot(222);imshow(fftshift(H));  title(‘高斯低通滤波器图像‘); %显示滤波器图像
subplot(223);imshow(log(1+abs(fftshift(F))),[]);title(‘滤波器的谱‘);
subplot(224);imshow(g);title(‘滤波器后的图像‘)

 各种滤波器的传递函数不同,但是滤波的过程是一样的,因此,可以将这几种滤波器封装成一个函数,如下:

%频率域低通滤波函数,生成几个低通滤波器的传递函数
function [H,D] = lpfilter(type,M,N,D0,n)
[U,V] = dftuv(M,N);
D = sqrt(U.^2+V.^2);
switch type
    case ‘ideal‘
        H=double(D<=D0);
    case ‘btw‘
        if nargin ==4
            n=1;
        end
        H=1./(1+(D./D0).^(2*n));
    case ‘gaussian‘
        H=exp(-(D.^2)./(2*(D0^2)));
    otherwise
        error(‘unkown filter type‘);

end

  

原文地址:https://www.cnblogs.com/libai123456/p/11441075.html

时间: 2024-10-16 14:18:18

在频率域中直接生成滤波器的相关文章

openCV中的频率域变换

openCV中频率域增强的傅里叶变换已经比较成熟了,在他的官方tutorials文档里有一个完整的得到频谱图的例子,如下: #include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> int main(int argc, char **

频率域滤波_滤波基础

这节来介绍一下频率域滤波. 在空间域内,我们是直接对像素进行操作以增强图像的有用信息.像高斯平滑,是取一个模板与图像进行卷积操作,得到处理后的图像.不同的变换域可以很方便的解决某种问题,例如空间域中值滤波是取一个区域的中值替代中间像素的灰度,可以很好的去除椒盐噪声例如下图中的(1)(2)(3).           (1)原图        (2)带有椒盐噪声的图像 (3)图像(2)复原之后的图像 (4)部分区域带有周期噪声 但不是所有的图像都可以在空间域进行图像的增强,有的时候都不知道用什么滤

14、频率域滤波基础——傅里叶变换计算及应用基础

1.理解傅里叶变换 如果是理工科的学生 ,在高等数学和信号处理的课程中应该就已经学习过Fourier变换 ,但是这里还是进行一个简单的基本学习和理解,为时域转频域提供一个基础理论概念. 1.什么是傅里叶级数 周期函数的fourier级数是由正弦函数和余弦函数组成的三角级数.这里首先说结论周期为T的任意周期性函数f(t),若满足以下迪利克雷条件: 在一个周期内只有有限个不连续点: 爱一个周期内只有有限个极大和极小值 积分$\int_{-\frac{-T}{2}}^{\frac{T}{2}}|f(t

在域中获取域管理员权限的多种方法及一些缓解措施

翻译:hac425 前言 现在攻击者有很多方法可以用来获取域管理员权限.这篇文章的目的是介绍一些当前较受欢迎的方式.这里所介绍的技术的基本点是攻击者已经拿到了一台域中的服务器,并已获得域用户凭据. 对大多数企业来说有一个不幸的现实:对于一个攻击者来说,从域用户权限提升到域管理员权限往往不需要太长的时间.为什么会这样呢?本文会介绍其中使用的一些技巧. 现在针对一个企业,组织的攻击越来越频繁通过一些钓鱼手法来开始.比如通过发送大量的钓鱼邮件给目标的成员来在目标网络的机器上执行代码.一旦攻击者能够在企

通过Hibernate将数据库在myeclipse中逆向生成

1.首先准备好数据库. 2.在MyEclipse的右上角切换透视图,切换到MyEclipse Database Explorer 3.在最左边点击右键,选择New(也就是新建一个数据库连接),然后编写第一个页面, Driver template: MySQL Connector/J (因为是建立数据库连接) Driver name    :icloud(这个名字随便起,方便以后使用) Connection URL : jdbc:myslq://localhost:3306/icloud?useU

在不同域中各个系统拥有自已独立的用户系统时的单点登录问题

我们在实现业务中经常会碰到多个系统各自有各自的用户登录系统,而且这些系统是各自运行在各自的域下,所以要实现这些系统用户的单点登录就是个问题了,所以自己想了一个方案希望看看是否可行. 1.sso站点必须是单独一个站点. 我把sso单独设立一下站点,这个站点可以单独一个域名,主要存放各个系统的用户信息及登录的cookie信息. 2.保证各个系统的用户数据一致性和独立性. 各个系统拥有自己的用户数据表相互独立.每一个系统的CUD(创建,更新,删除)时都会触发其它系统的CUD.那么这里有个问题也会出现:

频率域去噪基本实现思想

1. 频率域去噪基本实现思想:首先将原始图像通过一些积分变换,将其变换到频率域,接着再通过频率域对其进行操作,得到的结果再反变换到空间域中,进而使图像得到增强.根据傅里叶频谱的特性可得到,图像的平均灰度级对应于频率为0成分,当从傅里叶变换的原点离开时,图像的慢变化分量对应着低频滤波,比如一幅图像中较平的区域:当再进一步离开原点时,较高的频率开始对应图像中变换越来越快的灰度级,它们反映了一幅图像中物体的边缘和灰度级突发改变和噪声部分的图像成分.频率域图像增强正是基于这种原理,通过对图像的傅里叶频谱

域中Win7客户端无法使用键盘鼠标唤醒屏幕(组策略排错)

用户域中设置了屏幕锁定的策略,并且已经稳定的运行数年,最近部分Win7客户端出现了一些奇怪的问题,客户端实行了这条域策略后屏幕无法使用鼠标或者键盘唤醒,正常情况下只要活动鼠标或键盘就可以进行密码输入,更郁闷的是一些用户不懂如何解决这样的问题,直接重启计算机造成了有的数据丢失,还好这个不怪我 域策略是对用户生效的,如果加入域的计算机使用本地账户登录也不会出现这种问题,所以跟策略还是有一定的关系 ===问题客户端 下图就是我滑动鼠标后出现的现象,正常情况下可以直接输入密码进入系统的 现在我的鼠标可以

C#获取AD域中计算机和用户的信息

如果你的计算机加入了某个AD域,则可以获取该域中所有的计算机和用户的信息. 所用程序集,需要.Net Framework 4. 添加程序集引用 System.DirectoryServices.AccountManagement 获取AD域名称,未加入AD域的,只能获取计算机名称. 如果未加入任何域,则后续的获取域用户.计算机等操作将无法进行,实例化域上下文对象时,会抛出异常. 1 IPGlobalProperties ipGlobalProperties = IPGlobalPropertie