Это сообщение привлекает к себе внимание, поэтому я бы хотел его обновить.Я предоставил библиотеку распознавания лиц, которую я написал для OpenCV, которая включает гистограммы Eigenfaces, Fisherfaces и Local Binary Pattern.Таким образом, OpenCV 2.4.2 теперь поставляется со всем, чтобы начать, см. Очень подробную документацию:
Теперь оригинальный ответ.
Я автор статьи, ссылки на которую есть в сообщении Кевина.Обратите внимание, что вам нужно найти собственные значения несимметричной матрицы S_ {W} ^ {- 1} S_ {B} для Fisherfaces, я прямо не упомянул об этом в своем блоге.OpenCV имеет только решатель для симметричных матриц в своей текущей версии;поскольку собственные значения и сингулярные значения не эквивалентны для несимметричных матриц, вы также не можете использовать SVD.Для своего проекта я адаптировал JAMA-решатель для C ++ для решения проблемы собственных значений для несимметричных матриц, поэтому нет необходимости использовать для этого внешнюю библиотеку.CMakeLists.txt настроен, поэтому Eigen также можно использовать, поэтому у вас есть выбор.
Теперь я наконец нашел несколько минут для реализации метода Fisherfaces с OpenCV2 C ++ API и вставил код в мою учетную запись github по адресу:
main.cpp показывает вамкак использовать класс Fisherfaces и как использовать линейный дискриминантный анализ с тем же примером, что и в: http://www.bytefish.de/wiki/pca_lda_with_gnu_octave. Он поставляется как проект CMake, поэтому компиляция так же проста, как и ввод:
philipp@mango:~/some/dir$ mkdir build; cd build
philipp@mango:~/some/dir/build$ cmake ..
philipp@mango:~/some/dir/build$ make
philipp@mango:~/some/dir/build$ ./lda
Я не знаю, является ли это предпочтительным способом Stackoverflow для размещения кода в ответе, но я думаю, что это слишком долго для публикации.
Обратите внимание на две вещи.(1) Я читаю изображения из файла CSV ( точно так же как этот ), вам не нужно заботиться о порядке меток.(2) Я храню собственные векторы по столбцам, в то время как PCA в OpenCV сохраняет их по строкам.Это просто вопрос личного вкуса, но я никогда не видел такого для любого другого решателя, поэтому решил хранить их по столбцам.