直方圖頻域濾波

如果對直方圖進行頻域濾波會怎樣

原直方圖:

進行一維離散餘弦變換,公式如下:

參考代碼如下:

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實際上是離散COS變換它無非是有cos(nw)加權構成的,當n=0那就是直流分量當 n>0則是交流分量),則頻域濾波及進行反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*直流分量時:

http://www.cnblogs.com/elaron/archive/2012/06/11/2544639.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章