Код выравнивания лица Matlab

Я пытаюсь провести несколько экспериментов по распознаванию лиц и галлюцинациям, и чтобы получить наилучшие результаты, мне сначала нужно убедиться, что все изображения лиц выровнены. Я использую несколько тысяч изображений для экспериментов.

Я просматривал Интернет в течение последних нескольких дней и нашел много разных программ, которые утверждают, что делают это, однако из-за плохой обратной совместимости Matlabs многие из программ больше не работают. Я пробовал несколько разных программ, которые не запускаются, поскольку они вызывают функции Matlab, которые с тех пор были удалены.

Самое близкое, что я нашел, это использование алгоритма SIFT, код найден здесь

http://people.csail.mit.edu/celiu/ECCV2008/

Это помогает выровнять изображения, но, к сожалению, также снижает разрешение изображения, поэтому результат получается довольно размытым, что отрицательно скажется на любых экспериментах, которые я проводил.

Есть ли у кого-нибудь образцы кода Matlab или кто-нибудь может указать мне правильное направление для кода, который фактически выравнивает лица в базе данных.

Любая помощь приветствуется.


person AdamM    schedule 27.11.2013    source источник


Ответы (3)


Вы можете найти эту недавнюю работу в разделе Распознавание лиц, оценка позы и локализация ориентиров в дикой природе. У него есть работающая реализация Matlab, и это довольно хороший метод.
Как только вы определите ключевые точки на всех своих лицах, вы можете преобразовать их в единую ссылку и работать с ней.

person Shai    schedule 27.11.2013
comment
Я скачал этот код раньше, но не мог заставить его работать. В compile.m эта строка mex -O fconvblas.cc -lmwblas -o fconv вызывает сообщение об ошибке C:\PROGRA~1\MATLAB\R2012A\BIN\MEX.PL: Ошибка: Неопознанный переключатель: -o. - person AdamM; 27.11.2013
comment
Мне удалось получить метод 3, работающий с mex -O fconv.cc, однако, когда я вернулся, чтобы попробовать multipie_main.m, он говорит: «Ошибка при использовании кэша дневника/multipie.log: файл не найден». - person AdamM; 27.11.2013
comment
Эй, @AdamM, мне любопытно, какие функции вызывают у тебя проблемы с обратной совместимостью. Пишите напрямую: jeff.mather-at-mathworks.com. - person Jeff Mather; 02.12.2013
comment
@AdamM Я столкнулся с той же проблемой, но я понял, что происходит не так .. откройте compile.m, прокомментируйте эту строку, mex -O fconvMT.cc -o fconv, затем раскомментируйте эту строку, mex -O fconv.cc сохраните и снова запустите компиляцию - person Ibrahim Amer; 13.04.2014
comment
замените -o на -output - person volperossa; 12.03.2017

Проще всего это с PCA и собственным вектором. Чтобы найти X и Y наиболее репрезентативные данные. Так вы получите направление лица.

Вы можете найти объяснение в этом документе: Согласование PCA

person Vuwox    schedule 27.11.2013
comment
Ура, сейчас посмотрю документ и посмотрю, насколько он эффективен. - person AdamM; 27.11.2013
comment
Это действительно эффективно. Я использую это, чтобы выровнять изображение мозга для школьного проекта на C++. Но с матлабом это будет легко, PCA и SVD уже реализуют ненужную библиотеку. - person Vuwox; 27.11.2013
comment
У вас есть образцы кода для этого кода выравнивания. У меня есть тренировочный набор, у меня есть код для PCA и PCA с использованием SVD, но в документе, который вы мне дали, не очень понятно, как выполнять выравнивание с использованием этих методов. В нем говорится, что мне нужно центроид для источника и цели, но не объясняется, как их вычислить. Есть ли примеры исходного кода? - person AdamM; 27.11.2013
comment
Извините, @AdamM, сейчас у меня нет доступа к моему коду. Но позже я смогу предоставить больше информации. Но Догберт указывает на то, что может вам помочь. - person Vuwox; 27.11.2013
comment
На веб-сайте giassa.met есть полезный код, но, к сожалению, регистрационный код PCA пока недоступен. - person AdamM; 28.11.2013
comment
Извините, я не нашел свой старый проект, но у меня есть заметка из класса, проблема... она на французском... Если у меня будет время сегодня вечером, я, возможно, сделаю пост об этом или поищу что-нибудь, что может помочь. - person Vuwox; 28.11.2013

Вам нужно сначала определить лица, или они уже обрезаны? Если вам нужно обнаружить лица, вы можете использовать объект vision.CascadeObjectDetector в панели инструментов системы компьютерного зрения.

Чтобы выровнять лица, вы можете попробовать функцию imregister в панели инструментов обработки изображений. Кроме того, вы можете использовать подход, основанный на функциях. Набор инструментов системы компьютерного зрения включает в себя ряд детекторов точек интереса, дескрипторов функций и функцию matchFeatures для сопоставления дескрипторов между парой изображений. Затем вы можете использовать функцию estimateGeometricTransform для оценки аффинного или даже проективного преобразования между двумя изображениями. См. этот пример для получения подробной информации.

person Dima    schedule 27.11.2013
comment
К сожалению, у меня нет набора инструментов vision.CascadeObjectDetector. Однако я загрузил некоторый код, который выполняет автоматическую обрезку, хотя работает только с изображениями, обращенными вперед. Я просмотрел код imregister и нашел несколько примеров выравнивания двух одинаковых изображений, только одно было повернуто. Есть ли примеры использования imregister с разными изображениями лица? - person AdamM; 27.11.2013