cvPyrDown против cvResize для оптимизации распознавания лиц - PullRequest
4 голосов
/ 07 декабря 2011

Я хочу оптимизировать алгоритм распознавания лиц, уменьшив изображение.Какой самый лучший способ?я должен использовать cvPyrDown (как я видел в одном примере и дал пока плохие результаты), cvResize или другую функцию?

Ответы [ 3 ]

6 голосов
/ 07 декабря 2011

Если вы хотите только масштабировать изображение, используйте cvResize, как предложил Адриан Попович.

cvPyrDown применяет размытие по Гауссу, чтобы сгладить изображение, затем по умолчанию оно уменьшит изображение в два раза, отклонив четные столбцы и строки. Это сглаживание может ухудшить вашу производительность (я не уверен, как это влияет на алгоритм обнаружения). Другая возможность для низкой производительности может быть разрывы, создаваемые просто отбрасыванием даже строк и столбцов; тогда как гладкие интерполяции (при условии, что вы интерполировали с чем-то отличным от ближайшего соседа) на cvResize позволяют лучше распознавать лица. Здесь - документация по cvPyrDown для получения дополнительной информации о точном используемом ядре.

3 голосов
/ 07 декабря 2011

Для уменьшения изображения я бы использовал:

void cvResize(const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR )

Чтобы уменьшить изображение, оно обычно будет выглядеть лучше с интерполяцией CV_INTER_AREA, тогда как для увеличения изображения это будет выглядеть лучше всего с CV_INTER_CUBIC (медленно) или CV_INTER_LINEAR (быстрее, но все еще выглядит хорошо).

Но я до сих пор не использовал cvPyrDown, поэтому не знаю, как он работает ...

0 голосов
/ 24 апреля 2012

Если ваш алгоритм обнаружения лица использует функции haar, то вам вообще не нужно изменять масштаб, просто используйте встроенное изображение для доступа к любому масштабу, который вы хотите, масштабируя детектор. Также: cvResize, кажется, намного медленнее в новой версии OpenCV (2.X), чем в OpenCV 1.X

...