opencv图像分析与处理(11)- 频率域滤波消除周期噪声

本节为opencv数字图像处理(11):图像复原与重建的第二小节,频率域滤波消除周期噪声,主要包括:带阻滤波器、带通滤波器、陷波滤波器以及最佳陷波滤波器的数学推导。

  频率域技术滤除周期噪声可行的原因是周期噪声在对应于周期干扰的频率处,以集中的能量脉冲形式出现。滤除的方法之一是选择性滤波器(带阻、带通和陷波)。

1. 带阻滤波器

  理想、巴特沃斯和高斯带阻滤波器表达式如下表:
在这里插入图片描述
  滤波器的透视图如下:
在这里插入图片描述
  带阻滤波器的主要应用之一是在频率域噪声分量的一般位置近似已知的应用中消除噪声。如下图1所示,被正弦噪声污染的图像,噪声分量可看成是下图2中的傅里叶频谱中对称的亮点对,而且噪声分量位于关于变换原点的近似圆上,因此可使用圆对称带阻滤波器,如下图3所示(4阶的巴特沃斯带阻滤波器),通过设置适当的半径和宽度,其完全包围了噪声脉冲,并且带组滤波中通常要求尖锐的窄滤波器以保持更多的细节,结果如下图4所示:
在这里插入图片描述

2. 带通滤波器

  带通滤波器和带阻滤波器执行的操作相反,但是通常不会在一幅图像上直接执行带通滤波【会消除太多的图像细节】。然而带通滤波在一幅图像中屏蔽选中频段导致的效果非常有用。

  我们可以在上图1上应用与带阻滤波器相对应的带通滤波器然后取带通滤波变换的反变换,得到上图1中的噪声图案,如下图所示:
在这里插入图片描述

3. 陷波滤波器

  陷波滤波器阻止或通过事先定义的中心频率的邻域内的频率,如下图所示,展示了理想、巴特沃斯和高斯陷波带阻滤波器的三维图:
在这里插入图片描述
  由于傅立叶变换的对称性,陷波滤波器必须以关于原点对称的形式出现【如果陷波滤波器位于原点处陷波滤波器是其本身】。同样,也可以得到陷波带阻滤波器相对应的陷波带通滤波器通过而不是已知陷波区域中所包含频率的陷波滤波器。

4. 最佳陷波滤波

  当存在几种干扰分量时上面讨论的滤波过程会消除过多的图像细节,而且此时干扰成分通常不是单频脉冲【通常携带干扰模式信息的宽边缘】。这种情况下可应用最佳陷波滤波的方法,第一步屏蔽干扰的主要成分,第二步是从被污染的图像中减去该模式的一个可变的加权部分。

  第一步是提取干扰模式的主频率分量,这可以通过在每个尖峰处放置一个陷波带通滤波器 H N P ( u , v ) H_{NP}(u,v) HNP(u,v)来完成。如果滤波器构建为只可通过与干扰模式相关的分量,那么干扰噪声模式的傅立叶变换如下:
在这里插入图片描述
   H N P ( u , v ) H_{NP}(u,v) HNP(u,v)的形式需要多方面判断那些是尖峰噪声干扰,为此需要观察显示的 G ( u , v ) G(u,v) G(u,v)(被污染图像的傅立叶变换)的频谱来交互地创建陷波带通滤波器。选择一个特殊的滤波器后,空间域的相应模式可由下式获得:
在这里插入图片描述
  因为被污染图像假设是由未污染图像 f ( x , y ) f(x,y) f(x,y)与干扰相加形成的,若 η ( x , y ) \eta(x,y) η(x,y)完全一致,则从 g ( x , y ) g(x,y) g(x,y)上减去该干扰模式得到 f ( x , y ) f(x,y) f(x,y)即可。但通常我们得到的是 η \eta η的一个估计值,因此,可以从 g ( x , y ) g(x,y) g(x,y)上减去 η ( x , y ) \eta(x,y) η(x,y)的一个加权部分得到 f ( x , y ) f(x,y) f(x,y)的近似值,如下式:
在这里插入图片描述
   w ( x , y ) w(x,y) w(x,y)为加权函数或调制函数,一种确定该函数的方法是使得 f ^ ( x , y ) \hat f(x,y) f^(x,y)在每一点 ( x , y ) (x,y) (x,y)的指定邻域上的方差最小。

  考虑关于点 ( x , y ) (x,y) (x,y)的大小为 ( 2 a + 1 ) ( 2 b + 1 ) (2a+1)(2b+1) (2a+1)(2b+1)的邻域,坐标 ( x , y ) (x,y) (x,y)处, f ^ ( x , y ) \hat f(x,y) f^(x,y)的局部方差可根据样本估计,如下:
在这里插入图片描述
  其中 f ^ ˉ ( x , y ) \bar {\hat f}(x,y) f^ˉ(x,y)是该邻域内 f ^ \hat f f^的平均值,即:
在这里插入图片描述
  图像边缘或接近图像边缘的点,可以用局部邻域或者0来填充。

  将上3式代入上2式,可以得到:
在这里插入图片描述
  因为 w ( x , y ) w(x,y) w(x,y)在邻域内基本保持不变,则当 − a ≤ s ≤ a -a\leq s \leq a asa − b ≤ t ≤ b -b \leq t\leq b btb时给出近似式:
w ( x + s , y + t ) = w ( x , y ) w(x+s,y+t)=w(x,y) w(x+s,y+t)=w(x,y)
  这样可在该邻域内得到:
在这里插入图片描述
  则上3式变为:
在这里插入图片描述
  最小化 σ 2 ( x , y ) \sigma^2(x,y) σ2(x,y),解 ∂ σ 2 ( x , y ) ∂ w ( x , y ) = 0 \frac{\partial \sigma^2(x,y)}{\partial w(x,y)}=0 w(x,y)σ2(x,y)=0得到 w ( x , y ) w(x,y) w(x,y):
在这里插入图片描述
  这样,要获得复原图像 f ^ ( x , y ) \hat f(x,y) f^(x,y),可根据上式计算 w ( x , y ) w(x,y) w(x,y)再计算得。如果调制函数在某一邻域假设为常量,则只需在每个非重叠邻域的中心点计算 w ( x , y ) w(x,y) w(x,y),然后用他处理邻域内的所有点。


欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
在这里插入图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
float DigFil(invar, setic) float invar; int setic; /******************************************************************************/ /* Filter Solutions Version 2009 Nuhertz Technologies, L.L.C. */ /* www.nuhertz.com */ /* +1 602-279-2448 */ /* 3rd Order Band Pass Butterworth */ /* Bilinear Transformation with Prewarping */ /* Sample Frequency = 5.000 KHz */ /* Standard Form */ /* Arithmetic Precision = 4 Digits */ /* */ /* Center Frequency = 300.0 Rad/Sec */ /* Pass Band Width = 20.00 Rad/Sec */ /* */ /******************************************************************************/ /* */ /* Input Variable Definitions: */ /* Inputs: */ /* invar float The input to the filter */ /* setic int 1 to initialize the filter to zero */ /* */ /* Option Selections: */ /* Standard C; Initializable; Internal States; Not Optimized; */ /* */ /* There is no requirement to ever initialize the filter. */ /* The default initialization is zero when the filter is first called */ /* */ /******************************************************************************/ /* */ /* This software is automatically generated by Filter Solutions */ /* no restrictions from Nuhertz Technologies, L.L.C. regarding the use and */ /* distributions of this software. */ /* */ /******************************************************************************/ { float sumnum=0.0, sumden=0.0; int i=0; static float states[6] = {0.0,0.0,0.0,0.0,0.0,0.0}; static float znum[7] = { -7.968e-09, 0.0, 2.39e-08, 0.0, -2.39e-08, 0.0, 7.968e-09 }; static float zden[6] = { .992, -5.949, 14.88, -19.86, 14.92, -5.981 }; if (setic==1){ for (i=0;i<6;i++) states[i] = [i] = [i]*invar; return 0.0; } else{ sumnum = sumden = 0.0; for (i=0;i<6;i++){ sumden += states[i]*zden[i]; sumnum += states[i]*znum[i]; if (i<5) states[i] = states[i+1]; } states[5] = invar-sumden; sumnum += states[5]*znum[6]; return sumnum; } }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值