2011-12-15 4 views
0

Я пытаюсь реализовать распознавание лиц с помощью собственных интерфейсов, используя OpenCV для Android.Использование функции PCACompute от OpenCV

У меня есть набор обучающих изображений, которые представляют собой изображения с серой шкалой 100x100 пикселей. В настоящее время я использую Highgui.imread для чтения на этих изображениях, поэтому каждое изображение представляет собой Mat с шириной и высотой 100. Я пытаюсь использовать функцию Core.PCACompute для поиска основных компонентов этого набора изображений.

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

Так что мой вопрос: какие измерения должен иметь первый аргумент (данные Mat)? Можно ли передать ему набор из нескольких изображений, хотя данные представляют собой только один Мат?

Или я делаю это неправильно, и это неправильная функция для использования для собственных поверхностей? Один учебник, который я видел, использует функцию C++, называемую cvCalcEigenObjects, но я не могу найти эквивалентный метод 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), они вызывают cvCalcEigenObjects с аргументами nTrainFaces и faceImgArr. faceImgArr - это массив изображений nTrainFaces. В контексте собственных границ объект данных Mat в вашем коде будет представлять собой три изображения лица? – user1031921

Смежные вопросы