Повышение качества изображения для восприятия человеком, создание спецэффектов, обработка изображений (выделение объектов, поиск лиц, улыбок) это задачи, которые решаются с помощью фильтрации изображений. Наиболее широкий спектр эффектов достигается за счёт использования частотных фильтров. В работе подробно разбирается алгоритм быстрого преобразования Фурье, который является основой частотной фильтрации. На примере задачи частотной фильтрации видео рассматриваются наиболее типичные ошибки разработки последовательных и параллельных программ, а также подходы к их оптимизации. На протяжении всей работы используется инструмент Intel Parallel Studio XE 2011 для поиска ошибок, анализа эффективности, оптимизации и распараллеливания.
Цель данной работы – изучение подходов к оптимизации и принципов построения корректных последовательных и параллельных реализаций быстрого преобразования Фурье на примере задачи частотной фильтрации изображения с использованием пакета Intel Parallel Studio XE 2011. Работа может быть выполнена также при использовании более новой версии Intel Parallel Studio XE 2013 или других средств профилирования и поиска ошибок в программе.
Данная цель предполагает решение следующих основных задач:
Работа построена следующим образом: дается краткая информация о дискретном и непрерывном преобразованиях Фурье, алгоритме быстрого преобразования Фурье, библиотеках STL, OpenCV и частотной фильтрации изображений. Рассматриваются типовые ошибки и способы их обнаружения, которые можно допустить при разработке последовательной программы. Выполняется последовательное применение и анализ эффективности различных подходов к оптимизации программного кода. Рассматриваются проблемы организации параллельных вычислений, иллюстрируются характерные ошибки, приводится корректная параллельная реализация. Проводится обзор использования библиотеки MKL для вычисления быстрого преобразования Фурье.
Работа начинается с разработки приложения фильтрации видео. Реализуются высокочастотные и низкочастотные фильтры Гаусса и Баттерворта. Демонстрируются этапы отладки и поиска типичных ошибок в приложении.
Далее выполняется ряд шагов, позволяющих ускорить работу программы на тестовом видео от 128.5 с до 2.9 с. В конце выполняется сравнение с реализацией на основе MKL.
Разработка выполнялась с использованием следующих инструментов: