2011-12-15 75 views
0

我正在嘗試使用OpenCV for Android實現面部識別與特徵臉。使用OpenCV的PCACompute功能

我有一組訓練圖像,它們都是100x100像素的灰度圖像。我目前使用Highgui.imread來讀取這些圖像,因此每個圖像都是寬度和高度爲100的Mat。我試圖使用Core.PCACompute函數來查找這組圖像的主要組件。

public static void PCACompute(Mat data, Mat mean, Mat eigenvectors, int maxComponents) 

所以我的問題是:第一個參數(Mat數據)需要什麼尺寸?即使數據只是單個Mat,是否可以傳遞一組多個圖像?

或者我做錯了,這不是正確的功能用於特徵面?我見過的一個教程使用了一個名爲cvCalcEigenObjects的C++函數,但我無法找到等效的Java方法...

回答

1

該函數需要一個Mat作爲輸入。但是你可以傳遞數據like this

1711  public void testPCAComputeMatMatMat() { 
1712   Mat data = new Mat(3, 4, CvType.CV_32F) { 
1713    { 
1714     put(0, 0, 1, 2, 2, 4); 
1715     put(1, 0, 2, 4, 4, 8); 
1716     put(2, 0, 3, 6, 6, 12); 
1717    } 
1718   }; 
1719   Mat mean = new Mat(); 
1720   Mat vectors = new Mat(); 
1721  
1722   Core.PCACompute(data, mean, vectors); 
1723  
1724   Mat mean_truth = new Mat(1, 4, CvType.CV_32F) { 
1725    { 
1726     put(0, 0, 2, 4, 4, 8); 
1727    } 
1728   }; 
1729   Mat vectors_truth = new Mat(3, 4, CvType.CV_32F, new Scalar(0)) { 
1730    { 
1731     put(0, 0, 0.2, 0.4, 0.4, 0.8); 
1732    } 
1733   }; 
1734   assertMatEqual(mean_truth, mean, EPS); 
1735   assertMatEqual(vectors_truth, vectors, EPS); 
1736  } 

首先人臉識別我的建議是doc玩,因爲它解釋what PCA does

this link提供了一些信息和源代碼,使用圖像進行簡單的人臉識別以進行訓練。

+0

在您鏈接的Cognotics文章(第5部分,第4頁)中,他們使用參數nTrainFaces和faceImgArr調用cvCalcEigenObjects。 faceImgArr是一個nTrainFaces圖像數組。在特徵臉的上下文中,代碼中的Mat數據對象是否代表三個臉部圖像? – user1031921 2011-12-17 01:31:00