2012-02-02 45 views
1

在Android Opencv2.3.1中PCACompute有這個問題,因爲當我打電話給PCACompute時,我的特徵向量都是0.所以,我爲每個人拍攝10張照片,並將它保存到100X100的Mat中。 之後,將我的100X100墊一墊1X10000與此代碼:PCACompute Opencv return eigenvectors = 0

double [] elem = null; 
for(int riga=0;riga<m.rows();riga++) 
    { 
    for(int colonna=0;colonna<m.cols();colonna++) 
    { 
    elem = m.get(riga, colonna); 
     mrow.put(0,((riga*100)+colonna), elem[0]); 
    }//for colonna 
}//for riga 

之後,當我把10張照片,我插入照片的所有墊成一個墊子,此代碼:

double b[] = null; 
    for (int i = 0; i< listafoto.size(); i++) 
    { 
    Mat t = listafoto.get(i); 
     for(int riga = 0;riga<t.rows();riga++) 
     { 
     for(int colonna =0;colonna<t.cols();colonna++) 
     { 
      b = t.get(riga, colonna); 
      datiOriginali.put(i, colonna, b[0]); 
     }//for colonna 
    }//for riga 
}//for lista e contemporaneamente riga datiOriginali 

之後,我打電話PCACompute與此代碼:`

org.opencv.core.Core.PCACompute(datiOriginali,mean, eigenvectors, 10);` 

所以,datiOriginali是10行和10000點的cols輸入墊,平均值和本徵矢量是輸出馬特里X。平均矩陣給我一個結果,但特徵向量給我全部0.你能幫我解決這個問題嗎? 在此先感謝.MArco

回答

2

我基於我的代碼示例http://www.bytefish.de/blog/pca_in_opencv。 以下是我的工作方式:

Vector trainingImages = new Vector();; 
    trainingImages.add(Highgui.imread("/sdcard/facedatabase/s1/1.pgm",0)); 
    trainingImages.add(Highgui.imread("/sdcard/facedatabase/s1/2.pgm",0)); 

    Mat x = (Mat) trainingImages.get(0); 
    int total = x.rows() * x.cols(); 

    // build matrix (column) 
    // This matrix will have one col for each image and imagerows x imagecols rows 
     Mat mat = new Mat(total, trainingImages.size(), CvType.CV_32FC1); 
     for(int i = 0; i < trainingImages.size(); i++) { 
      Mat X = mat.col(i); 
      Mat c = (Mat) trainingImages.get(i); 
      c.reshape(1,total).convertTo(X, CvType.CV_32FC1); 
     } 

    Mat eigenVectors = new Mat(); 
    Mat mean = new Mat(); 
    Core.PCACompute(mat, mean, eigenVectors);