【问题标题】:High Pass Filter in frequency domain频域高通滤波器
【发布时间】:2014-03-20 06:45:41
【问题描述】:

我遇到了 HPF 问题。在dft上实现HPF后,生成的图像很奇怪。

这里有一个例子(我是新手,所以我无法发布图片,但没有它我无法提出这个问题):

http://imageshack.com/a/img69/5911/tnj6.png

http://imageshack.com/a/img132/6931/fc8k.png 应用半径为 50 的 HPF 后

我不明白为什么会出现这种情况。当我在 HPF 蒙版的中心添加白点时,结果很好。低通滤波器也可以完美运行。

我认为我可以消除我的 FFT 实现错误的可能性,因为我自己编写了一个并且我也使用了这个实现:librow.com/articles/article-10,结果几乎相同。

这是我的 HPF 代码:

void Picture::HighPass(int radius){
    const complex<double> oblivion=(0,0);
    const int middlex = w/2;
    const int middley=h/2;
    double distance=0;

    int * T = new int[w*h];

    //draw circle in the center
    for(int y=0; y<h; y++){
        for(int x=0; x<w; x++){
            distance = sqrt(pow((middlex-x),2) + pow((middley-y),2));
            if(distance<radius){ 
                T[x+y*w]=0;
            } else T[x+y*w]=1;
        }
    }
    //T[middlex+middley*w]=1;
    int *temp = new int[w*h];
    for(int i=0;i<w*h;i++)temp[i]=T[i];

        //swap quadrants 
    for(int x=0;x<middlex;x++){
        for(int y=0;y<middley;y++){
            T[x+y*w] = temp[(middlex+x)+(middley+y)*w];
            T[(middlex+x)+(middley+y)*w] = temp[x+y*w];
            T[(middlex+x)+y*w] = temp[x+((middley+y)*w)];
            T[x+((middley+y)*w)] = temp[(middlex+x)+y*w];
        }
    }

    for(int i=0;i<w*h;i++)
        if(T[i]==0) dft[i]=oblivion;

    delete [] T;
    delete[] temp;
}

如果您能给我一些建议或解决方案,我将不胜感激。

【问题讨论】:

  • 图像已从 ImageShack 中删除(错误 404)。

标签: image-processing filtering signal-processing fft


【解决方案1】:

首先,滤镜内核中心的点有效地代表了图像的平均亮度/强度/偏移/偏差。这是过滤器的关键部分。如果将图像从空间域转换到频域,并且弄乱了中心像素,就会改变图像的平均亮度。

其次,您似乎正在实现一个砖墙式过滤器,只需在内核中生成一个黑色圆形。如果您将其可视化为 3D 图像,它将看起来像一个实心圆柱体。要修复振铃伪影(即:任何时候使用砖墙滤波器,都会遇到振铃/混叠伪影),请使用高斯类型的滤波器。如果将其可视化为 3D 图像,它看起来像一个高斯分布的山型形状。请参考参考资料。

因此,简而言之,与其生成砖墙滤波器,不如使用高斯滤波器。有关完整描述的图形示例,请参阅参考文献 [3] 中的“低通滤波:模糊”部分。

参考文献

  1. 高斯平滑,访问时间:2014-02-19,&lt;http://homepages.inf.ed.ac.uk/rbf/HIPR2/gsmooth.htm&gt;
  2. 高斯滤波,于 2014 年 2 月 19 日访问,&lt;https://www.cs.auckland.ac.nz/courses/compsci373s1c/PatricesLectures/Gaussian%20Filtering_1up.pdf&gt;
  3. 测试 FFT 处理,于 2014 年 2 月 19 日访问,&lt;http://www.fmwconcepts.com/misc_tests/FFT_tests/&gt;

【讨论】:

    猜你喜欢
    • 2014-12-02
    • 1970-01-01
    • 2014-07-29
    • 2015-06-08
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    相关资源
    最近更新 更多