如果对直方图进行频域滤波会怎样

原直方图:

进行一维离散余弦变换,公式如下:

参考代码如下:

View Code
private int[] fourier() {

            int[] ft = new int[256];
            int N = 256;

            double Cu = 1;
            for(int u = 0; u < N; u++){

                if(u == 0){
                    Cu = 1.0/Math.Sqrt(2);
                }

                double sum = 0;
                for(int x = 0; x < N;x++){
                    sum += grays[x]*Math.Cos((2*x + 1) * u *Math.PI/(2*N));
                }
                double temp = Cu * Math.Sqrt(2.0 / N) * sum;
                ft[u] = (int)temp;
            }
           return ft;

        }

 

反变换的公式如下:

参考代码如下:

View Code
private int[] invertFourier() {

            int[] inverseft = new int[256];
            int N = 256;

            for (int x = 0; x < N; x++)
            {
                double sum = 0;
                sum =(1/ Math.Sqrt(2.0)) * ditong[0];
                for (int u = 1; u < N; u++)
                {

                    sum += ditong[u] * Math.Cos((2 * x + 1) * u * Math.PI / (2 * N));
                }
                double temp = Math.Sqrt(2.0 / N) * sum;
                inverseft[x] = Math.Abs((int)temp);
            }
            return inverseft;
        }

 

两式中,系数C(u)的取值按照如下规则:

其中,u是频域变量,x是灰度值,f(x)是对应灰度值的统计量。

将直方图进行DCT变换后,得到频谱图像如图:

按照当初的设想,滤去频率高的部分,可以使波形平滑。

低通

假设使用理想低通滤波器,即,设定一个阈值D0,高于D0的部分的频率被抑制,低于D0的部分可以通过。

假设D0为直流分量的0.618倍,则频域滤波及进行反DCT变换后的的效果为:

如果将D0设为直流分量的0.5倍,则效果为:

将D0设为直流分量的0.2倍,则效果为:

将D0设为直流分量的0.1倍,则效果为:

 

高通-按照个数取舍频率时

如果对直方图曲线进行高通,那么会有如下效果:

情况1:只保留直流分量时:

情况2:保留直流分量,和前10个交流分量时:

对比原直方图,可以看到已经出现了大致的轮廓:

情况3:保留直流分量及前20个交流分量时:

此时,形态就更接近原直方图了:

情况4:保留直流分量及前30个交流分量时:

情况5:保留直流分量及前50个交流分量时

高通-按照频率大小进行取舍

D0=0.9*直流分量时:

D0=0.8*直流分量时:

D0=0.5*直流分量时:

D0=0.4*直流分量时:

D0=0.3*直流分量时:

D0=0.2*直流分量时:

D0=0.1*直流分量时:

D0=0.05*直流分量时:

posted @ 2012-06-11 10:16  elar  阅读(3124)  评论(1编辑  收藏  举报