1

私は次元を減らすために PCA を使用しようとし、マトリックスの使用を支援するために jama を使用します。しかし、jamaで固有値を取得するときに問題が発生しました。たとえば、100x100 の 2 画像サイズを持っている場合、単一のマトリックス 2 画像 x (100x100) を作成します。20.000 ピクセルがあります。固有値で削減する方法は?これは私のコードのサンプルです:

public static void main(String[] args) {
    BufferedImage bi;
    int[] rgb;
    int R, G, B;
    // int[] jum;
    double[][] gray = new double[500][500] ;
    String[] baris = new String[1000];
    try {
        //bi = ImageIO.read(new File("D:\\c.jpg"));
        int[][] pixelData = new int[bi.getHeight() * bi.getWidth()][3];

        int counter = 0;
        for (int i = 0; i < bi.getHeight(); i++) {
            for (int j = 0; j < bi.getWidth(); j++) {
                gray[i][j] = getPixelData(bi, i, j);
                // R = getR(bi, i, j);
                //G = getG(bi, i, j);
                //B = getB(bi, i, j);
                //jum = R + G + B;
                // gray[counter] = Double.toString(R + G + B / 3);
                // System.out.println("Gray " +gray);
                //for (int k = 0; k < rgb.length; k++) {
                //   pixelData[counter][k] = rgb[k];
                // }

                counter++;
            }
        }


    } catch (IOException e) {
        e.printStackTrace();
    }
    Matrix matrix =  new Matrix(gray);
    PCA pca = new PCA(matrix);
    pca.getEigenvalue(6);
    String n = pca.toString();
    System.err.println("nilai n "+n);
    //double dete = pcadete(matrix,3600);
}

private static int getPixelData(BufferedImage bi, int x, int y) {
    int argb = bi.getRGB(y, x);
    int r, g, b;
    int gray;
    int rgb[] = new int[]{
        (argb >> 16) & 0xff, //red
        (argb >> 8) & 0xff, //green
        (argb) & 0xff //blue
    };
    r = rgb[0];
    g = rgb[1];
    b = rgb[2];

    gray = (r + g + b) / 3;
    System.out.println("gray: " + gray);
    return gray;
}

このコードで固有値を表示すると:

PCA pca = new PCA(matrix);
    pca.getEigenvalue(6);
    String n = pca.toString();
    System.err.println("nilai n "+n);

結果は次のとおりです。

nilai n PCA@c3e9e9

固有値と縮小次元を取得する方法を教えてください。

4

1 に答える 1

1

オブジェクト出力が表示されているのtoStringは、PCA クラスに美しい方法で出力する実装がないように思われるためです。

PCA クラスを所有している場合は、 toString メソッドをオーバーライドして、必要な方法で出力できます。Eclipse を使用している場合は、PCA クラスを右クリックして [ソース] > [Generate toStirng] を選択することで、そのメソッドを生成できます。

または、次のようなゲッターを使用して印刷してみてください。

System.err.println("nilai n "+ n.getEigenvalue());.

ところで、PCA クラスを共有するとさらに役立ちます。

于 2013-06-30T00:57:11.100 に答える