2013-10-11 66 views
1

我正在使用快速傅立葉變換進行指紋圖像增強。我從this網站得到了這個想法。在java中使用FFT進行圖像增強

我已經實現了使用32 * 32窗口的FFT函數,之後作爲推薦網站的建議,我想將power spectrum乘以FFT。但我沒有得到,

如何計算圖像的功率譜?或者是否有任何理想的功率譜值?

代碼FFT:

public FFT(int[] pixels, int w, int h) { 
    // progress = 0; 
    input = new TwoDArray(pixels, w, h); 
    intermediate = new TwoDArray(pixels, w, h); 
    output = new TwoDArray(pixels, w, h); 
    transform(); 
} 

    void transform() { 
    for (int i = 0; i < input.size; i+=32) { 
     for(int j = 0; j < input.size; j+=32){ 

      ComplexNumber[] cn = recursiveFFT(input.getWindow(i,j)); 
      output.putWindow(i,j, cn); 
     } 
    } 
    for (int j = 0; j < output.values.length; ++j) { 
     for (int i = 0; i < output.values[0].length; ++i) { 
      intermediate.values[i][j] = output.values[i][j]; 
      input.values[i][j] = output.values[i][j]; 
     } 
    } 
} 

static ComplexNumber[] recursiveFFT(ComplexNumber[] x) { 
int N = x.length; 
    // base case 
    if (N == 1) return new ComplexNumber[] { x[0] }; 

    // radix 2 Cooley-Tukey FFT 
    if (N % 2 != 0) { throw new RuntimeException("N is not a power of 2"); } 

    // fft of even terms 
    ComplexNumber[] even = new ComplexNumber[N/2]; 
    for (int k = 0; k < N/2; k++) { 
     even[k] = x[2*k]; 
    } 
    ComplexNumber[] q = recursiveFFT(even); 

    // fft of odd terms 
    ComplexNumber[] odd = even; // reuse the array 
    for (int k = 0; k < N/2; k++) { 
     odd[k] = x[2*k + 1]; 
    } 
    ComplexNumber[] r = recursiveFFT(odd); 

    // combine 
    ComplexNumber[] y = new ComplexNumber[N]; 
    for (int k = 0; k < N/2; k++) { 
     double kth = -2 * k * Math.PI/N; 
     ComplexNumber wk = new ComplexNumber(Math.cos(kth), Math.sin(kth)); 
     ComplexNumber tmp = ComplexNumber.cMult(wk, r[k]); 
     y[k] = ComplexNumber.cSum(q[k], tmp); 

     ComplexNumber temp = ComplexNumber.cMult(wk, r[k]); 
     y[k + N/2] = ComplexNumber.cDif(q[k], temp); 
    } 
    return y; 
} 

回答

0

我在想,功率譜的傅立葉變換的輸出變換的平方。

[email protected] = x(x*) where x* is the complex conjugate 

圖像塊中的總功率將是所有頻率和空間上的總和。

我不知道這是否有幫助。