2011-12-15 2 views
0

Android 용 OpenCV를 사용하여 고유 화면으로 얼굴 인식을 구현하려고합니다.OpenCV의 PCACompute 함수 사용

나는 100x100 픽셀 그레이 스케일 이미지 인 트레이닝 이미지가 있습니다. 현재이 이미지를 읽으려면 Highgui.imread를 사용하고 있으므로 각 이미지는 너비와 높이가 100 인 Mat입니다. Core.PCACompute 함수를 사용하여이 이미지 세트의 주요 구성 요소를 찾으려고합니다.

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

제 질문은 다음과 같습니다. 첫 번째 인수 (매트 데이터)의 치수는 무엇입니까? 데이터가 단일 Mat 일지라도 여러 이미지 세트를 전달할 수 있습니까?

내가 잘못하고 있는데, 고유 한 표면에 사용할 수있는 함수가 올바르지 않습니까? 필자가 본 한 튜토리얼은 cvCalcEigenObjects라는 C++ 함수를 사용하지만 동등한 Java 메소드를 찾을 수 없습니다 ...

답변

1

이 함수는 단일 매트을 입력으로 예상합니다. 하지만 당신은 데이터 like this를 전달할 수 있습니다 : 그것은 what PCA does 설명으로

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 제안 얼굴 인식을 가지고 노는 시작합니다.

this link은 훈련 용 이미지를 사용하여 간단한 얼굴 인식을하는 데 필요한 정보와 소스 코드를 제공합니다.

+0

링크 된 (제 5 부, 4 페이지) Cognotics 기사에서 nTrainFaces 및 faceImgArr 인수를 사용하여 cvCalcEigenObjects를 호출합니다. faceImgArr은 nTrainFaces 이미지의 배열입니다. eigenface의 컨텍스트에서 코드의 Mat 데이터 객체는 세 개의 얼굴 이미지를 나타 냅니까? – user1031921