0

java에서 간단한 DCT 알고리즘을 작성하려고합니다. 내 findDCT 방법은 매개 변수로이 같은 정수 배열 갖고 싶어 : 이제Java 매개 변수 전달 int [] []

public class DCT { 
    private Random generator = new Random(); 
    private static final int N = 8; 
    private int[][] f = new int[N][N]; 
    private double[] c = new double[N]; 

    public DCT() { 
     this.initializeCoefficients(); 
    } 

    private void initializeCoefficients() { 
     int value; 

     // temporary - generation of random numbers between 0 and 255 
     for (int x=0;x<8;x++) { 
      for (int y=0;y<8;y++) { 
       value = generator.nextInt(255); 
       f[x][y] = value; 
       System.out.println("Storing: "+value+" in: f["+x+"]["+y+"]"); 
      } 
     } 

     for (int i=1;i<N;i++) { 
      c[i]=1/Math.sqrt(2.0); 
      System.out.println("Storing: "+c[i]+" in: c["+i+"]"); 
     } 
     c[0]=1; 
    } 

    public double[][] applyDCT() { 
     double[][] F = new double[N][N]; 
     for (int u=0;u<N;u++) { 
       for (int v=0;v<N;v++) { 
       double somme = 0.0; 
       for (int i=0;i<N;i++) { 
        for (int j=0;j<N;j++) { 
        somme+=Math.cos(((2*i+1)/(2.0*N))*u*Math.PI)*Math.cos(((2*j+1)/(2.0*N))*v*Math.PI)*f[i][j]; 
        } 
       } 
       somme*=(c[u]*c[v])/4; 
       F[u][v]=somme; 
       } 
      } 
     return F; 
    } 
} 

을, 나는이 방법을 선언 할 것이며 통과 할 수있는 방법 '[] [] INT F'대신 매개 변수로 private 변수로 선언되고 현재 클래스의 생성자에서 초기화 된 f [] []를 사용합니까?

public DCT(int[][] f) { 
    this.f = f; 
} 

public DCT() { 
    this.initializeCoefficients(); 
} 

에서 생성자를 initializeCoefficients를 추출 및 변경에 대한 그런 다음 또한

double[][] dctApplied = new DCT(yourTwoDimF).applyDCT(); 

같은 클래스를 사용할 수있는 방법

답변

0

, 나는 것 니가하는 방식대로 N을 사용하지 마라. 나는 DCT를 적용 할 때 f의 차원을 볼 것이다.

입니다

, 나는 빠른 응답을

처럼
double[][] F = new double[f.length][]; 
    for (int u = 0; u < f.length; u++) { 
      F[u] = new double[f[u].length]; 
      for (int v=0;v<N;v++) { 
       // ... 
+0

감사합니다 뭔가

double[][] F = new double[N][N]; for (int u=0;u<N;u++) { for (int v=0;v<N;v++) { // ... 

을 변경할 것입니다! 나는 f의 차원에보다 유연해야한다고 당신에게 동의합니다. 그러나, 나는 왜 당신이 그랬는지 이해하지 못한다. –

+0

F [u] = 새로운 double [f [u] .length]; –