灰度图像--频域滤波 滤波器

学习DIP第26天

转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意。有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!!

开篇废话

依然是废话开始,滤波器的起源就是频域来的,针对频域特性,滤波器被设计成各种各样的功能,但是频域滤波器都是线性的,转换到空域生成的卷积模板也是线性的,而有些从空域出发设计的滤波模板并不是线性的,判断是不是线性可以使用以下判断方法,也是信号与系统中常用的方法,F(ax+by)==aF(x)+bF(y)如果满足就是线性的,不满足则不是。常见的滤波模板中涉及到排序的,都不是线性模板,而通过频域设计然后转换为空域模板的,都是线性的模板。

由于滤波原理上一篇中已经做了详细的介绍,本篇主要记录几种常见的滤波器,并分析其滤波特点。主要介绍内容如下:

由于同态滤波的特殊性,将在下一篇中介绍,对于每种滤波器,都会分析其功率和振铃现象。

现在给出一个常用的距离函数,将在所有下面所有滤波器中使用,使用欧氏距离,因为频率域的距离代表的是带宽,所以,截止频率,带宽意义重大(P,Q)为频谱大小,也是上篇中填充后的空域图像大小,并且我们使用的频谱都是中心化了的:

测试图片为:

平滑-低通滤波器

低通滤波器,顾名思义,只通过低频信号截断高频成分,在频谱中,中间部分为低频,四周为高频,截断点由滤波器的宽度决定,也就是截止频率,不同的截止频率对应于不同的效果和不同的剩余功率。

ILPF

理想低通滤波器,就是简单的截断,或者说设置一个频率阈值,大于阈值的频谱置零,小于等于阈值的不变:

这个效果就是频域的一个圆形,我们来观察,频域截止频率为50,P,Q为512的ILPF:

下面来观察滤波器在截止频率为10,20,30的振铃和频率特性:

截止频率10,滤波后剩余功率50.196378%,有振铃:

      截止频率20,滤波后剩余功率78.559714%,有振铃:

      截止频率30,滤波后剩余功率88.736089%,有振铃:

BLPF

布特沃斯低通滤波器,采用布特沃斯公式,产生一种低阶时转折平滑,高阶时转折尖锐的滤波器:

示意图如下:

下面观察2阶和10阶布特沃斯滤波器在截止频率10,20,30时的表现:

2阶:

截止频率10,滤波后剩余功率40.044113%,无振铃:

截止频率20,滤波后剩余功率59.692304%,无振铃:

截止频率30,滤波后剩余功率70.964773%,无振铃:

10阶:

截止频率10,滤波后剩余功率46.72560%,有振铃:

截止频率20,滤波后剩余功率74.527332%,有振铃:

截止频率30,滤波后剩余功率86.566573%,有振铃:

GLPF

由高斯公式产生的滤波器,由于高斯的傅里叶变换还是高斯的,所以变换无振铃效应:

滤波器示意图:

观察高斯滤波器在截止频率10,20,30时的表现:

截止频率10,滤波后剩余功率45036072%,无振铃:

截止频率20,滤波后剩余功率66.908677%,无振铃:

截止频率30,滤波后剩余功率77.419008%,无振铃:

锐化-高通滤波器

与低频对应的就是高频滤波器,同样我们介绍理想高通,布特沃斯高通,高斯高通,并提出钝化高提升高频强调滤波器;

IHPF

理想高通的滤波器示意图:

同样观察截止频率为10,20,30的滤波效果和振铃效应:

截止频率10,滤波后剩余功率51.407872%,有振铃:

截止频率20,滤波后剩余功率23.044536%,有振铃:

截止频率30,滤波后剩余功率12.868162%,有振铃:

BHPF

与低通布特沃斯相似,高通布特沃斯滤波器也是一种低阶时转折平滑,高阶时转折尖锐的滤波器

我们同样观察2阶和10阶的布特沃斯在截止频率为10,20,30时的效果和振铃现象:

2阶:

截止频率10,滤波后剩余功率34.679332%,无振铃:

截止频率20,滤波后剩余功率18.029713%,无振铃:

截止频率30,滤波后剩余功率11.967571%,无振铃:

10阶:

截止频率10,滤波后剩余功率46.760049%,有振铃:

截止频率20,滤波后剩余功率20.167635%,有振铃:

截止频率30,滤波后剩余功率12.362897%,有振铃:

GHPF

与低通一致,高斯高通滤波器为:

示意图:

观察截止频率为10,20,30的滤波效果和振铃效应:

截止频率10,滤波后剩余功率34.706478%,无振铃:

截止频率20,滤波后剩余功率16.325098%,无振铃:

截止频率30,滤波后剩余功率11.140692%,无振铃:

部分代码

低通:

#include "lowpassfilter.h"
static double Distance(int x,int y,int c_x,int c_y){

    return sqrt((x-c_x)*(x-c_x)+(y-c_y)*(y-c_y));
}

void IdealLPFilter(double *Filter,int width,int height,double cut_off_frequency){
    int center_x=width/2;
    int center_y=height/2;
    double distance=0.0;
    for(int i=0;i<width;i++)
        for(int j=0;j<height;j++){
            distance=Distance(i,j,center_x,center_y);
            if(distance<=cut_off_frequency)
                Filter[j*width+i]=1.0;
            else
                Filter[j*width+i]=0.0;
        }

}
void ButterworthLPfilter(double *Filter,int width,int height,double cut_off_frequency,int n){
    int center_x=width/2;
    int center_y=height/2;
    for(int i=0;i<width;i++)
        for(int j=0;j<height;j++){
            double value=1.0;
            for(int k=0;k<n;k++)
                value*=(Distance(i, j, center_x, center_y)/cut_off_frequency);
            Filter[j*width+i]=1/(1+value);
        }
}
void GaussianLPFilter(double *Filter,int width,int height,double cut_off_frequency){
    int center_x=width/2;
    int center_y=height/2;
    for(int i=0;i<width;i++)
        for(int j=0;j<height;j++){
            double value=Distance(i, j, center_x, center_y);
            Filter[j*width+i]=exp(-value*value/(2*cut_off_frequency*cut_off_frequency));
        }
}

高通:

#include "highpassfilter.h"
static double Distance(int x,int y,int c_x,int c_y){

    return sqrt((x-c_x)*(x-c_x)+(y-c_y)*(y-c_y));
}

void IdealHPFilter(double *Filter,int width,int height,double cut_off_frequency){
    int center_x=width/2;
    int center_y=height/2;
    double distance=0.0;
    for(int i=0;i<width;i++)
        for(int j=0;j<height;j++){
            distance=Distance(i,j,center_x,center_y);
            if(distance<=cut_off_frequency)
                Filter[j*width+i]=0.0;
            else
                Filter[j*width+i]=1.0;
        }
    Filter[width*(height+1)/2]+=1.0;
}
void ButterworthHPfilter(double *Filter,int width,int height,double cut_off_frequency,int n){
    int center_x=width/2;
    int center_y=height/2;
    for(int i=0;i<width;i++)
        for(int j=0;j<height;j++){
            double value=1.0;
            for(int k=0;k<n;k++)
                value*=(Distance(i, j, center_x, center_y)/cut_off_frequency);
            Filter[j*width+i]=1.0-1.0/(1.0+value);
        }
    Filter[width*(height+1)/2]+=1.0;
}
void GaussianHPFilter(double *Filter,int width,int height,double cut_off_frequency){
    int center_x=width/2;
    int center_y=height/2;
    for(int i=0;i<width;i++)
        for(int j=0;j<height;j++){
            double value=Distance(i, j, center_x, center_y);
            Filter[j*width+i]=1.0-exp(-value*value/(2*cut_off_frequency*cut_off_frequency));
        }
    Filter[width*(height+1)/2]+=1.0;
}

钝化,高提升,高频强调

将高通滤波后的结果与原图进行一些加减,将得到钝化,高提升高频强调滤波器

对于下面公式k1控制距离原点的偏移量,k2控制高频贡献。

  • k1=1时k2=1为钝化模板
  • k1=1时k2>1为高提升滤波器
  • k1=1时,统称高频强调滤波器

具体性质据定于所选用的滤波模板,与上面叙述的模板性质和截止频率有关,在这里不详细叙述。

总结

总结一下,这篇的理论在前面已经介绍了,所以更多是验证前面的结论,观察滤波效果。滤波中值得注意的是振铃现象,对于不能容忍人工缺陷的应用中,如医学图像处理,不能使用带有振铃现象的滤波器,在实际物理中,理想滤波器无法实现,所以更多的使用高斯和其他一些无振铃的滤波器

时间: 2024-10-14 09:40:21

灰度图像--频域滤波 滤波器的相关文章

灰度图像--频域滤波 同态滤波

学习DIP第27天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

灰度图像--频域滤波 概论

学习DIP第25天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 开篇废话 这两天写了一下频域滤波的代码,并且发现以前博客里代码的一个BUG,产生BUG的原因是一维

灰度图像--频域滤波 傅里叶变换之离散时间傅里叶变换(DTFT)

学习DIP第22天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意........ 开篇废话 本来是不想写DTFT的,原因1,与前面傅里叶变换(FT)推导过程相似,原因2,在图像处理中DTFT应用不是很广泛,但后来想想还是写出来,原因1,不写出来我觉得心里不踏实,原因2,DTFT是DFT的近亲,不写的话家族不完整,下一篇写DFT,其实写到这个阶段,要写的东西就

灰度图像--频域滤波 傅里叶变换之离散傅里叶变换(DFT)

学习DIP第23天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 开篇废话 一如既往的开篇废话,今天介绍离散傅里叶变换(DFT),学习到这,不敢说对傅里叶有多了解,

灰度图像--频域滤波 傅里叶变换之二维离散傅里叶变换

学习DIP第24天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 开篇废话 今天要记录的是二维离散傅里叶变换的一些性质,也是傅里叶在图像处理中要用到的一些性质,所以

灰度图像--频域滤波 傅里叶变换之傅里叶级数

学习DIP第18天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意........ 0.开篇废话 废话开始,故事是这样的,当我上大学的时候,学过信号与系统,当时已经学了高的数学,也知道了傅里叶变换的公式,但是,公式是怎么来的,有什么用,不清楚,学信号与系统的时候,知道傅里叶用在什么地方,但是不清楚为什么可以用在这些地方,书中的记忆是:傅里叶变换或者其家族的变换

灰度图像--频域滤波 傅里叶变换之卷积

学习DIP第17天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意........ 开篇废话 依旧是废话,傅里叶变换大学学了等于白学,首先问题在自己,自己当时就没把心思投入到学习中,第二,老师讲的真的是,现在回想,看看斯坦福的公开课"傅里叶变换及其应用"感觉差距不是一般的大.不是对老师的不尊,也不是崇洋媚外,事实摆在那里,一看就知道.把复杂的讲简单了

opencv的频域滤波

频域滤波流程总结如下: 给定一幅大小为M×N的输入图像f(x,y),从式(6.1-25)和式(6.1-26)得到填充参数P和Q.典型地,我们选择P=2M和Q=2N: 对f(x,y)添加必要数量的0,形成大小为P×Q填充后的图像 用(-1)(x+y)乘以fp(x,y),进行频谱中心化的预处理: 计算中心化预处理过的fp(x,y)的傅里叶变换,得到Fp(u,v); 生成一个实的.对称的滤波函数H(u,v),其大小为P×Q,频谱零点位于(P/2,Q/2)处.用阵列相乘形成乘积G(u,v)=F(u,v)

Python下opencv使用笔记(十)(图像频域滤波与傅里叶变换)

前面曾经介绍过空间域滤波,空间域滤波就是用各种模板直接与图像进行卷积运算,实现对图像的处理,这种方法直接对图像空间操作,操作简单,所以也是空间域滤波. 频域滤波说到底最终可能是和空间域滤波实现相同的功能,比如实现图像的轮廓提取,在空间域滤波中我们使用一个拉普拉斯模板就可以提取,而在频域内,我们使用一个高通滤波模板(因为轮廓在频域内属于高频信号),可以实现轮廓的提取,后面也会把拉普拉斯模板频域化,会发现拉普拉斯其实在频域来讲就是一个高通滤波器. 既然是频域滤波就涉及到把图像首先变到频域内,那么把图