236
Нижегородский государственный университет им. Н.И. Лобачевского Лабораторная работа Фильтрация изображений. Быстрое преобразование Фурье Параллельные численные методы Сиднев А.А. Кафедра математического обеспечения ЭВМ При поддержке компании Intel

Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Нижегородский государственный университет им. Н.И. Лобачевского

Лабораторная работа

Фильтрация изображений. Быстрое

преобразование Фурье

Параллельные численные методы

Сиднев А.А.

Кафедра математического обеспечения ЭВМ

При поддержке компании Intel

Page 2: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 2

Преобразование Фурье.

Назначение и примеры

использования

Page 3: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 3

Назначение ПФ

В обработке сигналов и связанных областях

преобразование Фурье обычно рассматривается как

декомпозиция сигнала на частоты и амплитуды, то есть,

обратимый переход от временного пространства (time

domain) в частотное пространство (frequency domain).

Далее рассмотрим примеры:

– обработка изображений;

– обработка звука.

Page 4: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 4

Аудио

В исходном WAV файле, хранится полная информация об

исходном звуке, оцифрованном и проквантованном с

частотой 44кГц.

Этой информации абсолютно достаточно для

воспроизведения всех частот исходного сигнала, меньших

половины частоты квантования (по т. Котельникова).

!!! Одна минута записи занимает около 15 МБ.

Page 5: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 5

Сжатие MP3

MPEG Layer-3.

Исходный звуковой файл режется на фрагменты,

длительностью по 50 миллисекунд, каждый из которых

анализируется отдельно.

При анализе фрагмент раскладывается на гармоники по

методу Фурье, из которых в соответствии с теорией

восприятия звука человеческим ухом выбрасываются те

гармоники, которые человек хуже воспринимает на фоне

остальных:

– более тихие гармоники на фоне более громких;

– звуки, замаскированные вследствие инертности слуха.

Page 6: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 6

Воспроизведение MP3

При воспроизведении производится обратное

преобразование, при котором оставшиеся гармоники

вновь преобразуются в звуковую волну.

Поскольку часть информации об исходном сигнале была

выкинута, звук получается не совпадающий с исходным.

Битрейт - это объем информации в единицу времени, как

много информации можно потратить на каждую секунду

записи:

– чем он меньше, тем меньший размер имеют файлы с

одинаковой по времени длине;

– чем он меньше, тем большее количество "лишних"

гармоник приходится выкидывать.

Page 7: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 7

Пример фильтрации изображения низкого качества

Фильтрация изображений

Page 8: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 8

Цифровая обработка изображений

Фильтрация

– Пространственная

• Линейный фильтр

• Медианный фильтр

• Изотропный фильтр

– Частотная

Page 9: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 9

Пространственная фильтрация

Процесс фильтрации основан на простом перемещении

маски фильтра от точки к точке изображения.

В каждой точке отклик фильтра вычисляется с

использованием предварительно заданных связей.

Пространственные фильтры имеют линейную

трудоѐмкость.

Page 10: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 10

Частотная фильтрация

Все пространственные фильтры можно реализовать с

помощью частотных.

Фильтрация происходит в частотной области

изображения.

С помощью преобразования Фурье происходит получение

частотной области (спектра) изображения.

Простая идея фильтрации:

– низкие частоты – плавное изменение яркости

изображения;

– высокие частоты – быстрое изменение яркости

изображения (границы объектов).

Page 11: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 11

Пример частотного спектра

Изображение Фурье-спектр

Логарифмический

спектр

Page 12: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 12 Н.Новгород, 2011 г.

Разминка

0. Задание на знание синтаксиса языка C

Page 13: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 13

Все проекты разработаны в среде Microsoft Visual Studio

2008.

Для работы программы необходима библиотека OpenCV.

Для обработки видеофрагментов потребуется кодек Xvid.

Программное обеспечение

Page 14: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 14

– <OpenCV install dir>\cxcore\include\

– <OpenCV install dir>\otherlibs\highgui\

– <OpenCV install dir>\lib

Настройка среды разработки

Page 15: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 15

Компилятор вам поможет.

Ошибки в программе

Page 16: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 16

Отсутствует ―using namespace std;‖ (filter.cpp:14, fft.h:6).

Ошибки компиляции (1)

Page 17: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 17

Ошибки компиляции (2)

Page 18: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 18

Ошибки компиляции (2)

2 - отсутствует ―;‖ (filter.cpp:50).

Page 19: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 19

Ошибки компиляции (2)

2 - отсутствует ―;‖ (filter.cpp:50).

3 - опечатка в функции pnintf (filter.cpp:334).

Page 20: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 20

Ошибки компиляции (2)

2 - отсутствует ―;‖ (filter.cpp:50).

3 - опечатка в функции pnintf (filter.cpp:334).

7 - не объявлена переменная, хранящая количество

обработанных кадров (filter.cpp:275):

int totFrames = 0;

Page 21: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 21

Ошибки компиляции (3)

Page 22: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 22

Ошибки компиляции (3)

4 - неверный тип аргумента функции cvReleaseImage -

отсутствует ―&‖ (filter.cpp:467).

Page 23: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 23

Ошибки компиляции (3)

4 - неверный тип аргумента функции cvReleaseImage -

отсутствует ―&‖ (filter.cpp:467).

2 - неверная передача параметров в функцию printf

(filter.cpp:384).

Page 24: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 24

Ошибки компиляции (3)

4 - неверный тип аргумента функции cvReleaseImage -

отсутствует ―&‖ (filter.cpp:467).

2 - неверная передача параметров в функцию printf

(filter.cpp:384).

5 - отсутствует ―}‖, закрывающая тело цикла

(filter.cpp:317).

Page 25: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 25 Н.Новгород, 2011 г.

Ещѐ раз вспомним C

1. Задание на простые алгоритмические ошибки в программах

Page 26: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 26

Ошибки в программе

Программа запустилась. Теперь необходимо заставить

работать программу корректно!!!

Page 27: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 27

Запуск Intel Inspector XE

Режим работы ―Quick: Memory Error Analysis / Locate

Memory Problems‖

Page 28: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 28

Intel Inspector XE. Утечки памяти

Обнаружена 41 утечка памяти!

Page 29: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 29

Ошибки (1)

Не освобождается ресурс ―film‖ перед завершением

работы программы (filter.cpp:465):

cvReleaseCapture(&film);

Не закрывается открытый файл (filter.cpp:329):

fclose(f);

Не уничтожается одно из окон перед завершением

работы программы (filter.cpp:256):

cvDestroyWindow(fStr);

Не освобождаются ресурсы картинки (filter.cpp:467):

cvReleaseImage(&filter);

Page 30: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 30

Результат запуска программы

1. Отрицательные

времена

2. Некорректное изображение

Page 31: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 31

Ошибки (2)

Неправильное вычитание (filter.cpp:426):

(finish.QuadPart-start.QuadPart)

Не выполняется передача параметра при рекурсивном

вызове (fft.cpp:44):

SerialFFTCalculation( signal, first, size/2, forward);

Page 32: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 32

Низкочастотная фильтрация

filter.exe ..\Videos\TestVideo1.avi –gl

Корректная работа программы (1)

Page 33: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 33

Высокочастотная фильтрация

filter.exe ..\Videos\TestVideo1.avi –gh

Корректная работа программы (2)

Page 34: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 34 Н.Новгород, 2011 г.

Профилировка

2. Анализ эффективности программного обеспечения можно

выполнять ничего не зная о решаемой задаче, используя

профилировщики.

Page 35: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 35

Оценка эффективности

Время, потраченное на обработку видео: 128.5 с

Page 36: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 36

Профилировка

Итак, программа работает очень медленно и нам

предстоит с ней разобраться! Для этого необходимо

определить наиболее ―горячие‖ точки программы –

локализовать задачу.

Для поиска горячих точек необходимо воспользоваться

профилировщиком:

– Intel Parallel Amplifier;

– Intel VTune Amplifier XE;

– Profiler (VS 2008, VS 2010);

– gprof.

Page 37: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 37

Использование Intel VTune Amplifier XE

Page 38: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 38

“Горячие” точки

Функция вычисления БПФ является самой ―горячей‖.

Если получится выполнить оптимизацию этой функции, то

получим максимальный выигрыш!

Page 39: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 39

Анализ профиля (1)

Самая ―горячая‖ функция SerialFFTCalculation вызывает в

цикле функцию Butterfly.

Page 40: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 40

Анализ профиля (2)

Функция Butterfly выполняет простейшие действия, но за

счѐт большого количества вызовов является самым узким

местом в программе.

Page 41: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 41

Использование массивов вместо контейнера

std:vector

Реализации контейнеров STL достаточно медленные.

Компилятор генерирует наиболее эффективный код при

использовании простых типов данных.

Откажемся от использования std::vector – будем

использовать обычные массивы.

Page 42: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 42

Не эффективное использование контейнера

std::vector (1)

Передача контейнеров по значению.

Page 43: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 43

Не эффективное использование контейнера

std::vector (2)

Неэффективное заполнение контейнера.

Page 44: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 44 Н.Новгород, 2011 г.

STL и HPC не всегда

совместимы!

3. STL-реализации контейнеров не самые быстрые. Их основное

достоинство в унификации.

Page 45: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 45

Оценка эффективности

Время, потраченное на обработку видео: 120.8 с

Page 46: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 46

Прогресс оптимизации

Page 47: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 47

Ищем ошибки

А программа-то была с ошибками!

Page 48: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 48

Ошибки работы с динамической памятью (1)

Не освобождается память, выделенная под динамический

массив (filter.cpp:213):

delete[] outB;

Page 49: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 49

Ошибки работы с динамической памятью (2)

Освобождение памяти не соответствует выделению

(filter.cpp:217):

delete[] f;

Page 50: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 50

Intel С++ Compiler

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

оптимизирующим компилятором Intel.

Page 51: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 51

Использование Intel Compiler

Конвертирование проекта:

Page 52: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 52 Н.Новгород, 2011 г.

Intel Power

4. Современные компиляторы в состоянии генерировать

высокоэффективные программы. Разработчику достаточно лишь

написать понятный для компилятора программный код.

Page 53: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 53

Оценка эффективности

Время, потраченное на обработку видео: 85.6 с

Page 54: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 54

Прогресс оптимизации

Page 55: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 55

Ищѐм следующее проблемное место

―– Что дальше?

– Снова профилировка и поиск ―горячих‖ точек!‖

Page 56: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 56

Самая “медленная” функция

Большую часть времени выполняется функция SerialFFTCalculation.

Функция Butterfly исчезла из профиля, т.к. компилятор встроил еѐ код

непосредственно в функцию SerialFFTCalculation.

Page 57: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 57

Анализ профиля

22.6% времени работы программы занимает выполнение

функции по смещению 0x4748.

Page 58: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 58

Тригонометрические функции

Функция по смещению 0x4748 выполняет вычисление

тригонометрических функций sin и cos. Посчитанные

значения передаются в параметры функции Butterfly.

Page 59: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 59

Преобразование Фурье

Page 60: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 60

Преобразование Фурье

ПФ широко применяется в задачах анализа спектра

сигнала, цифровой обработки сигналов и др.

Существуют специализированные процессоры для

вычисления дискретного преобразования Фурье

(DSP-процессоры).

Page 61: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 61

Аппаратная реализация БПФ

Однокристальная реализация алгоритма БПФ на ПЛИС

фирмы Xilinx

Профессиональная видеокамера со встроенным

видеопроцессором Altera Stratix II GX

Page 62: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 62

Комплексное число

Тригонометрическая форма записи

Показательная форма записи

Комплексные числа

𝑧 = 𝑥 + 𝑖 ⋅ 𝑦, где

𝑥, 𝑦 - вещественные числа, 𝑖 – мнимая единица (𝑖2 = −1).

𝑧 = 𝑟 ⋅ (𝑐𝑜𝑠𝜑 + 𝑖 ⋅ 𝑠𝑖𝑛𝜑)

𝑟 = 𝑧 , 𝑐𝑜𝑠𝜑 =𝑥

|𝑧|, 𝑠𝑖𝑛𝜑 =

𝑦

|𝑧|

𝑧 = 𝑟 ⋅ 𝑒𝑖⋅𝜑 = 𝑟 ⋅ (𝑐𝑜𝑠𝜑 + 𝑖 ⋅ 𝑠𝑖𝑛𝜑)

Page 63: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 63

Преобразование Фурье

Любая функция, периодически воспроизводящая свои

значения, может быть представлена в виде суммы

синусов или косинусов различных частот, умноженных на

некоторые коэффициенты.

Page 64: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 64

Разложение функции на гармоники

Page 65: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 65

Спектр сигнала (1)

Page 66: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 66

Спектр сигнала (2)

Page 67: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 67

Преобразование Фурье (2)

Прямое преобразование Фурье:

Обратное преобразование Фурье:

- исходный сигнал (комплексный)

- спектр сигнала (комплексный)

𝑦(𝜔) = 𝑥(𝑡) ⋅ 𝑒;𝜔⋅𝑡⋅𝑖 𝑑𝑡

:∞

;∞

x(𝑡) =1

2𝜋 𝑦(𝜔) ⋅ 𝑒𝜔⋅𝑡⋅𝑖𝑑𝜔

:∞

;∞

x(𝑡)

y(𝜔)

Page 68: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 68

Дискретизация сигнала

Рассмотрим функцию :

где - дельта-функция.

𝑥𝜎 𝑡 = 𝑥 𝑡 𝜎 𝑡 − 𝑛 ⋅△ 𝑡

𝑁;1

𝑛<0

= 𝑥(𝑡) ⋅ 𝜎 𝑡 − 𝑛 ⋅△ 𝑡

𝑁;1

𝑛<0

𝜎 𝑡

𝑥𝜎 𝑡

𝜎 𝑡 = ∞ , если 𝑡 = 0

𝜎 𝑡 = 0, если 𝑡 ≠ 0

Page 69: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 69

Связь непрерывного и дискретного

преобразований

Вычислим спектр дискретного сигнала:

Можно рассматривать только один период повторения

спектра при .

𝑦 𝜔 = 𝑥𝜎(𝑡) ⋅ 𝑒;𝜔⋅𝑡⋅𝑖

;∞

𝑑𝑡 = 𝑥(𝑡) ⋅ 𝜎 𝑡 − 𝑛 ⋅△ 𝑡

𝑁;1

𝑛<0

⋅ 𝑒;𝜔⋅𝑡⋅𝑖∞

;∞

𝑑𝑡

𝑦 𝜔 = 𝑥 𝑡 ⋅ 𝜎 𝑡 − 𝑛 ⋅△ 𝑡

;∞

⋅ 𝑒;𝜔⋅𝑡⋅𝑖 𝑑𝑡

𝑁;1

𝑛<0

= 𝑥 𝑛 ⋅△ 𝑡 ⋅ 𝑒;𝜔⋅𝑛⋅△𝑡⋅𝑖𝑁;1

𝑛<0

𝑥(𝑡) ⋅ 𝜎 𝑡 − 𝜏

;∞

𝑑𝑡 = 𝑥(𝜏)

𝑦 𝜔 𝜔 ∈ [0,2𝜋

∆𝑡]

Page 70: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 70

Дискретное преобразование Фурье

Дискретное преобразование Фурье (ДПФ, DFT) – это

разложение дискретной функций на гармонические

составляющие.

Вычисление ДПФ чаще всего происходит в виде быстрого

преобразования Фурье (БПФ, FFT).

Page 71: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 71

Дискретное преобразование Фурье (2)

- дискретное преобразование

Фурье (ДПФ)

Трудоѐмкость:

𝑥(𝑡) - комплексная функция действительного аргумента

𝑥𝑛 = 𝑥 𝑛 , 𝑛 = 0,𝑁 − 1

𝑦𝑘 = 𝑥𝑛 ⋅ 𝑒;𝑘⋅𝑛𝑁 ⋅2⋅𝜋⋅𝑖

𝑁;1

𝑛<0

, 𝑘 = 0,𝑁 − 1

𝑦𝑘 = 𝑥𝑛 ⋅ (cos𝑘 ⋅ 𝑛

𝑁⋅ 2 ⋅ 𝜋 − 𝑖 ⋅ sin

𝑘 ⋅ 𝑛

𝑁⋅ 2 ⋅ 𝜋 )

𝑁;1

𝑛<0

, 𝑘 = 0,𝑁 − 1

Page 72: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 72

Дискретное преобразование Фурье (3)

- дискретное преобразование

Фурье (ДПФ)

Трудоѐмкость:

𝑥(𝑡) - комплексная функция действительного аргумента

𝑥𝑛 = 𝑥 𝑛 , 𝑛 = 0,𝑁 − 1

𝑦𝑘 = 𝑥𝑛 ⋅ 𝑒;𝑘⋅𝑛𝑁 ⋅2⋅𝜋⋅𝑖

𝑁;1

𝑛<0

, 𝑘 = 0,𝑁 − 1

𝑦𝑘 = 𝑥𝑛 ⋅ (cos𝑘 ⋅ 𝑛

𝑁⋅ 2 ⋅ 𝜋 − 𝑖 ⋅ sin

𝑘 ⋅ 𝑛

𝑁⋅ 2 ⋅ 𝜋 )

𝑁;1

𝑛<0

, 𝑘 = 0,𝑁 − 1

𝑂(𝑛2)

Page 73: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 73

Прямое и обратное преобразование Фурье

По заданному образу можно восстановить исходную

функцию с помощью обратного ДПФ

- обратное дискретное

преобразование Фурье (ДПФ)

Трудоѐмкость:

- прямое дискретное

преобразование Фурье (ДПФ)

Трудоѐмкость:

𝑦𝑘 = 𝑥𝑛 ⋅ 𝑒;𝑘⋅𝑛𝑁⋅2⋅𝜋⋅𝑖

𝑁;1

𝑛<0

, 𝑘 = 0,𝑁 − 1

𝑂(𝑛2)

𝑂(𝑛2)

𝑥𝑘 =1

𝑁⋅ 𝑦𝑛 ⋅ 𝑒

𝑘⋅𝑛𝑁 ⋅2⋅𝜋⋅𝑖

𝑁;1

𝑛<0

, 𝑘 = 0,𝑁 − 1

Page 74: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 74

Быстрое преобразование Фурье (1)

Пусть N – чѐтное, тогда

Чѐтные слагаемые Нечѐтные слагаемые

Коэффициент

поворота

𝑦𝑘 = 𝑥𝑛 ⋅ 𝑒;𝑘⋅𝑛𝑁⋅2⋅𝜋⋅𝑖

𝑁;1

𝑛<0

, 𝑘 = 0,𝑁 − 1

𝑦𝑘 = 𝑥2⋅𝑛 ⋅ 𝑒;2⋅𝑛⋅𝑘𝑁 ⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

+ 𝑥2⋅𝑛:1 ⋅ 𝑒;(2⋅𝑛:1)⋅𝑘𝑁 ⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

=

= 𝑥2⋅𝑛 ⋅ 𝑒;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

+ ( 𝑥2⋅𝑛:1 ⋅ 𝑒;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

) ⋅ 𝑒;𝑘𝑁⋅2⋅𝜋⋅𝑖

ДПФ над чѐтными

слагаемыми

ДПФ над нечѐтными

слагаемыми

Page 75: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 75

Быстрое преобразование Фурье (2)

Пусть t =𝑁

2+ 𝑘, 𝑘 = 0,

𝑁

2− 1

𝑦𝑡 = 𝑥2⋅𝑛 ⋅ 𝑒;𝑛⋅𝑡𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

+ ( 𝑥2⋅𝑛:1 ⋅ 𝑒;𝑛⋅𝑡𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

) ⋅ 𝑒;𝑡𝑁⋅2⋅𝜋⋅𝑖 =

= 𝑥2⋅𝑛 ⋅ 𝑒;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖⋅ 𝑒;𝑛⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

+ ( 𝑥2⋅𝑛:1 ⋅ 𝑒;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖⋅ 𝑒;𝑛⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

) ⋅ 𝑒;𝑘𝑁⋅2⋅𝜋⋅𝑖 ⋅ 𝑒;𝜋⋅𝑖 =

= 𝑥2⋅𝑛 ⋅ 𝑒;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

− ( 𝑥2⋅𝑛:1 ⋅ 𝑒;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

) ⋅ 𝑒;𝑘𝑁⋅2⋅𝜋⋅𝑖

𝑦𝑘′ 𝑦𝑘

′′

Page 76: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 76

В результате получили:

Быстрое преобразование Фурье (3)

𝑦𝑘′ 𝑦𝑘

′′

𝑦𝑘:𝑁2= 𝑥2⋅𝑛 ⋅ 𝑒

;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

− ( 𝑥2⋅𝑛:1 ⋅ 𝑒;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

) ⋅ 𝑒;𝑘𝑁⋅2⋅𝜋⋅𝑖

𝑦𝑘 = 𝑥2⋅𝑛 ⋅ 𝑒;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

+ ( 𝑥2⋅𝑛:1 ⋅ 𝑒;𝑛⋅𝑘𝑁/2⋅2⋅𝜋⋅𝑖

𝑁/2;1

𝑛<0

) ⋅ 𝑒;𝑘𝑁⋅2⋅𝜋⋅𝑖

𝑦𝑘′ 𝑦𝑘

′′

Page 77: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 77

БПФ. «Бабочка» (1)

Рекуррентное соотношение «бабочка»

Для вычисления ДПФ над N элементами по соотношению

«бабочки» необходимо вычислить два ДПФ размерности N/2.

- коэффициенты ПФ для

четных элементов

- коэффициенты ПФ для

нечетных элементов

𝑦𝑘 = 𝑦𝑘′ + 𝑦𝑘

′′ ⋅ 𝑒;2⋅𝜋⋅𝑘⋅𝑖𝑁

𝑘 = 0,𝑁

2− 1

𝑦0′, 𝑦1′, … , 𝑦𝑁

2;1′

𝑦0′′, 𝑦1′′, … , 𝑦𝑁

2;1′′

𝑦𝑘:𝑁2= 𝑦𝑘

′ − 𝑦𝑘′′ ⋅ 𝑒;

2⋅𝜋⋅𝑘⋅𝑖𝑁

Page 78: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 78

БПФ. «Бабочка» (2)

Визуальное представление «бабочки»

𝑦𝑘 = 𝑦𝑘′ + 𝑦𝑘

′′ ⋅ 𝑒;2⋅𝜋⋅𝑘⋅𝑖𝑁

𝑘 = 0,𝑁

2− 1

𝑦𝑘:𝑁2= 𝑦𝑘

′ − 𝑦𝑘′′ ⋅ 𝑒;

2⋅𝜋⋅𝑘⋅𝑖𝑁

𝑦𝑘′

𝑦𝑘′′

𝑦𝑘

𝑦𝑘:𝑁2

𝑈𝑁𝑘 = 𝑒;

2⋅𝜋⋅𝑘⋅𝑖𝑁

𝑈𝑁𝑘

Page 79: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 79

Быстрое преобразование Фурье

Алгоритм Кули и Таки (Cooley-Tukey)

Основан на рекуррентном соотношении

Трудоѐмкость:

Page 80: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 80

Быстрое преобразование Фурье

Алгоритм Кули и Таки (Cooley-Tukey)

Основан на рекуррентном соотношении

Трудоѐмкость:

𝑂(𝑛𝑙𝑜𝑔𝑛)

𝑙𝑜𝑔𝑛

Page 81: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 81

Рассмотрим алгоритм работы БПФ на примере сигнала из

4-х точек, т.е. n=4

К массиву из 4 комплексных чисел

применим «бабочку»

Для простоты в дальнейших вычислениях выполним

перестановку элементов массива (бит-реверсирование)

Пример вычисления 4-точечного БПФ…

ip

pppebay

2

i

p

pppebay

2

1

1,0p

0x 1x2x 3x

Page 82: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 82

Чтобы посчитать коэффициенты Фурье

необходимо вычислить коэффициенты

Пример вычисления 4-точечного БПФ…

ip

ppp ebay

2

i

p

ppp ebay

21

1,0p

000 bay

002 bay

12

0

i

e

iei

2

1

ibay 111

ibay 113

0p 1p

3210 ,,, yyyy

1010 ,,, bbaa

Page 83: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 83

Пример вычисления 4-точечного БПФ…

Коэффициенты и являются коэффициентами

преобразования Фурье над сигналами из 2-х точек

(чѐтные и нечѐтные слагаемые)

Для вычисления указанных коэффициентов снова

воспользуемся соотношением «бабочки»

10 ,aa10 ,bb

Page 84: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 84

Пример вычисления 4-точечного БПФ…

Для 2-точечного сигнала «бабочка»

примет следующий вид для чѐтных слагаемых:

000 baa

001 baa 0p

in

p

ppp ebay2

in

p

pppn ebay2

2/

12

,0 n

p

Page 85: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 85

Пример вычисления 4-точечного БПФ…

Коэффициенты являются коэффициентами Фурье

для сигнала, состоящего из одной точки:

– для ;

– для .

Коэффициент Фурье для множества из одной точки

является самой точкой, поэтому:

– ;

– .

- коэффициенты Фурье для сигнала, состоящего из

одной точки (нечетные слагаемые):

– ;

– .

00 ,ba

0a0x

0b2x

00 xa

20 xb

0a 0b 0b 0a

00 ,ba

00 xa

20 xb

Page 86: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 86

Пример вычисления 4-точечного БПФ…

Вычислим коэффициенты 2-точечного БПФ:

Результат запишем в исходный массив:

0a 0b1a 1b

000 baa

001 baa

000 bab

001 bab

0a 0b 0b 0a

Page 87: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 87

Вычислим искомые коэффициенты (4-точечного БПФ):

Результат запишем в исходный массив:

Пример вычисления 4-точечного БПФ…

000 bay

002 bay

ibay 111

ibay 113

0y1y 2y 3y

0a 0b1a 1b

Page 88: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 88

Пример вычисления 4-точечного БПФ…

1. Перестановка элементов массива

0x 1x 2x 3x0x 1x2x 3x

Бит-реверсирование

Page 89: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 89

Пример вычисления 4-точечного БПФ…

2. Выполнение 1-точечного ПФ

0x 1x 2x 3x0x 1x2x 3x

Бит-реверсирование

0a 0b 0b 0a

Page 90: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 90

Пример вычисления 4-точечного БПФ…

3. Выполнение 2-точечного ПФ

0x 1x 2x 3x

0a 0b 0b 0a

0x 1x2x 3x

Бит-реверсирование

0a 0b1a 1b

Page 91: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 91

Пример вычисления 4-точечного БПФ…

4. Выполнение 4-точечного ПФ

0y1y 2y 3y

0a 0b1a 1b

0x 1x 2x 3x0x 1x2x 3x

Бит-реверсирование

0a 0b 0b 0a

Page 92: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 92

Демонстрация вычисления 4-точечного БПФ

0

4U -

+

+

+

0

4U -

+

+

+

0

4U -

+

+

+

2

4U -

+

+

+

2x

0x

1x

3x

1y

0y

2y

3y

1-ый этап 2-ой этап

ki

k nnU e

0 0

4 1U e 2 24

i

U e i

Page 93: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 93

Демонстрация вычисления 4-точечного БПФ

0

4U -

+

+

+

0

4U -

+

+

+

0

4U -

+

+

+

2

4U -

+

+

+

2x

0x

1x

3x

1y

0y

2y

3y

1-ый этап 2-ой этап

ki

k nnU e

0 0

4 1U e 2 24

i

U e i

Page 94: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 94

Пример вычисления 8-точечного БПФ…

1. Перестановка элементов массива

Бит-реверсирование

0x 1x 2x 3x 4x 6x5x 7x

0x 2x4x 6x 5x 7x1x 3x

Page 95: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 95

Пример вычисления 8-точечного БПФ…

2. Выполнение 1-точечного ПФ

1

0a 1

0b 20a 2

0b 30a 3

0b40a 4

0b

0x 2x4x 6x 5x 7x1x 3x

Page 96: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 96

Пример вычисления 8-точечного БПФ…

3. Выполнение 2-точечного ПФ

0x 2x4x 6x 5x 7x1x 3x

1

0a 1

0b 20a 2

0b 30a 3

0b40a 4

0b

50a 5

0b51a

51b 6

0a 60b6

1a 61b

10

10

50 baa

10

10

51 baa

20

20

50 bab

20

20

51 bab

...

Page 97: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 97

Пример вычисления 8-точечного БПФ…

4. Выполнение 4-точечного ПФ

0x 2x4x 6x 5x 7x1x 3x

50a 5

0b51a

51b 6

0a 60b6

1a 61b

1

0a 1

0b 20a 2

0b 30a 3

0b40a 4

0b

70a

70b7

1a 71b7

2a 73a 7

3b72b

50

50

70 baa

ibaa 51

51

71

50

50

72 baa

ibaa 51

51

73

60

60

70 bab

ibab 61

61

71

60

60

72 bab

ibab 61

61

73

Page 98: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 98

Пример вычисления 8-точечного БПФ…

5. Выполнение 8-точечного ПФ

1

0a 1

0b 20a 2

0b 30a 3

0b40a 4

0b

50a 5

0b51a

51b 6

0a 60b6

1a 61b

70a

70b7

1a 71b7

2a 73a 7

3b72b

0y1y 2y 3y

4y 6y5y 7y

… 70

700 bay

70

704 bay

ibay 72

722

ibay 72

726

)(22

227

1711 ibay

)(22

227

1715 ibay

)(22

227

3733 ibay

)(22

227

3737 ibay

Page 99: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 99

Бит-реверсирование

Переупорядочивание элементов массива

Бит-реверсирование — это преобразование двоичного

числа, заключающееся в изменении порядка следования

бит на противоположный

01 0 0 1 = 18 10 1 0 0 = 9

Page 100: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 100

Бит-реверсирование. Пример

Пример изменения индексов элементов при выполнении

бит-реверсирования над массивом из 16 элементов

0000 = 0

000 1 = 81 = 1

000 = 41 = 2

00 = 1211 = 3

000 = 2

1

= 4

00 = 101 = 5

00 = 61 = 6

0 = 1411 = 7

1

1

1

0 000

000

0 0 01

0 011

0 00

1

001

0 01

011

1

1

1

= 0 000 = 1= 8

00 1 = 91 = 9

00 = 51 = 10

0 = 1311 = 11

00 = 3

1

= 12

0 = 111 = 13

0 = 71 = 14

= 1511 = 15

1

1

1

0 00

00

0 01

011

0 0

1

01

0 1

11

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

Page 101: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 101

Бит-реверсирование. Реализация

//in: ind - обычный порядок следования бит

//out: revInd - бит-реверсивный порядок следования бит

//size = 1 << bitsCount;

int mask = 1 << (bitsCount - 1);

revInd = 0;

for(int i=0; i<bitsCount; i++)

{

bool val = ind & mask;

revInd |= val << i;

mask = mask >> 1;

}

Первая итерация (1)

01 0 0 1

01 0 0 0mask

ind

10 0 0 0val

10 0 0 0revInd

Page 102: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 102

Бит-реверсирование. Реализация

//in: ind - обычный порядок следования бит

//out: revInd - бит-реверсивный порядок следования бит

//size = 1 << bitsCount;

int mask = 1 << (bitsCount - 1);

revInd = 0;

for(int i=0; i<bitsCount; i++)

{

bool val = ind & mask;

revInd |= val << i;

mask = mask >> 1;

}

Вторая итерация (2)

01 0 0 1

00 1 0 0mask

ind

00 0 0 0val

10 0 0 0revInd

Page 103: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 103

Бит-реверсирование. Реализация

//in: ind - обычный порядок следования бит

//out: revInd - бит-реверсивный порядок следования бит

//size = 1 << bitsCount;

int mask = 1 << (bitsCount - 1);

revInd = 0;

for(int i=0; i<bitsCount; i++)

{

bool val = ind & mask;

revInd |= val << i;

mask = mask >> 1;

}

Третья итерация (3)

01 0 0 1

00 0 1 0mask

ind

00 0 0 0val

10 0 0 0revInd

Page 104: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 104

Бит-реверсирование. Реализация

//in: ind - обычный порядок следования бит

//out: revInd - бит-реверсивный порядок следования бит

//size = 1 << bitsCount;

int mask = 1 << (bitsCount - 1);

revInd = 0;

for(int i=0; i<bitsCount; i++)

{

bool val = ind & mask;

revInd |= val << i;

mask = mask >> 1;

}

Четвёртая итерация (4)

01 0 0 1

00 0 0 1mask

ind

10 0 0 0val

10 1 0 0revInd

Page 105: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 105

Бит-реверсирование. Реализация

//in: ind - обычный порядок следования бит

//out: revInd - бит-реверсивный порядок следования бит

//size = 1 << bitsCount;

int mask = 1 << (bitsCount - 1);

revInd = 0;

for(int i=0; i<bitsCount; i++)

{

bool val = ind & mask;

revInd |= val << i;

mask = mask >> 1;

}

Пятая итерация (5)

01 0 0 1

10 0 0 0mask

ind

00 0 0 0val

10 1 0 0revInd

Page 106: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 106

БПФ. Алгоритм

Бит-реверсирование

Рекурсия (БПФ)

– Вычисление БПФ над первой половиной массива

– Вычисление БПФ над второй половиной массива

– Применение «бабочки» ко всем парам элементов

in

p

ppp ebay2

in

p

pppn ebay2

2/

12

,0 n

p

Page 107: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 107 Н.Новгород, 2011 г.

Быстрое вычисление синуса

5. Эффективность алгоритмической оптимизации никогда не

сравнится с программной.

Page 108: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 108

“Горячая” точка

Итак, мы воспользовались Intel VTune Amplifier XE и

обнаружили, что очень долго происходит вычисление

функций sin/cos.

Чтобы ускорить работу указанного участка кода,

необходимо вспомним тригонометрические тождества.

Page 109: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 109

Вспомним математику

Представим экспоненту в тригонометрической форме:

Вспомним тригонометрические тождества:

Для фиксированного n получаем:

)2sin()2cos(2

n

pi

n

pe

in

p

12

,0 n

p

)2

sin()2

)1sin(()2

cos()2

)1cos(()2

cos(nn

pnn

pn

p

)sin()sin()cos()cos()cos(

)2

sin()2

)1cos(()2

cos()2

)1sin(()2

sin(nn

pnn

pn

p

)sin()cos()cos()sin()sin(

Page 110: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 110

Оптимизация вычисления тригонометрических

функций

Чтобы посчитать sin и cos, необходимо выполнить 4

операции умножения и по одной операции сложения и

вычитания:

Т.к. n фиксированное, то коэффициенты и

достаточно посчитать один раз.

)2

sin()2

)1sin(()2

cos()2

)1cos(()2

cos(nn

pnn

pn

p

)2

sin()2

)1cos(()2

cos()2

)1sin(()2

sin(nn

pnn

pn

p

)2

cos(n

)

2sin(

n

Page 111: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 111

Применение оптимизации

В соответствие с указанными соотношениями выполним

оптимизацию вычисления функций sin и cos.

В цикле по j от first до first+size/2 необходимо посчитать

все значения sin(j*coeff) и cos(j*coeff).

1. Посчитаем перед циклом первые sin и cos:

sin(first*coeff) и cos(first*coeff).

2. Посчитаем перед циклом множители:

sin(coeff) и cos(coeff).

3. В цикле по j для вычисления sin(j*coeff) и cos(j*coeff)

будем использовать предыдущие значения sin и cos для

j-1 и множители в соответствии с ранее выведенными

соотношениями.

Page 112: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 112

Оценка эффективности

Время, потраченное на обработку видео: 77 с

Page 113: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 113

Прогресс оптимизации

Page 114: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 114

Анализ эффективности (1)

Достаточно низкое ускорение, полученное после оптимизации

вычисления тригонометрических функций вызвано в первую очередь

тем, что в функции SerialFFTCalculation сохраняется значительное

количество вычислений sin и cos.

Значения sin и cos многократно считаются повторно, особенно для

маленьких размерностей!

Page 115: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 115

Анализ эффективности (2)

В исходной версии требовалось 𝒏 ∙ 𝒍𝒐𝒈𝒏 вычислений

синусов и косинусов, где 𝑛 – размер массива для

выполнения одномерного БПФ.

То есть для 𝑛 = 256 потребуется вычислить 2048 синусов

и косинусов.

В модифицированной версии требуется 𝟒 ∙ (𝒏 − 𝟏) вычислений синусов и косинусов, где 𝑛 – размер массива

для выполнения одномерного БПФ.

То есть для 𝑛 = 256 потребуется вычислить 1020 синусов

и косинусов.

Для больших n эффективность модифицированной

версии будет ещё выше.

Page 116: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 116

Ищѐм следующее проблемное место

Page 117: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 117

Наиболее медленные функции

Снова большую часть времени работает функция

SerialFFTCalculation.

Page 118: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 118

“Горячая” точка

Функция Butterfly наиболее часто вызываемая функция. За счѐт

этого на еѐ выполнение расходуется 40% времени работы

программы.

Избавимся от лишних ветвлений в цикле – вынесем проверку

за тело цикла.

Page 119: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 119 Н.Новгород, 2011 г.

Лишние ветвления

6. В большинстве случаев оптимизирующие компиляторы способны

выполнять высококачественные оптимизации, но если

программный код достаточно сложен, то компилятор может не

справиться с оптимизацией.

Page 120: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 120

Оценка эффективности

Время, потраченное на обработку видео: 75.9 с

Page 121: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 121

Прогресс оптимизации

121

Page 122: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 122

Анализ эффективности

Невысокое ускорение вызвано тем, что глубина рекурсии

функции SerialFFTCalculation достаточно маленькая, т.к.

обрабатываемый сигнал одномерного БПФ содержит

всего 256 точек (для рассматриваемого тестового видео).

Page 123: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 123

Дальнейший анализ

Page 124: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 124

Удаление “лишних” вызовов

Функция SerialFFTCalculation всѐ ещѐ остаѐтся горячей

точкой программы, поэтому продолжим еѐ оптимизацию.

Теорема об удалении рекурсии.

По каждому алгоритму можно построить эквивалентный

алгоритм без рекурсии.

Избавимся от рекурсии.

Избавимся от ―лишних‖ вызовов функций (сделаем явный

inline функций Butterfly и реализуем в виде отдельных

функции прямое и обратное одномерное БПФ).

Page 125: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 125 Н.Новгород, 2011 г.

Разворачивание рекурсии

7. Рекурсивные реализации достаточно сложны для оптимизации +

приводят к появлению накладных расходов на организацию

рекурсии, поэтому итеративные реализации предпочтительны.

Page 126: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 126

Оценка эффективности

Время, потраченное на обработку видео: 60.9 с

Page 127: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 127

Прогресс оптимизации

Page 128: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 128

Снова профилировка

Page 129: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 129

“Горячие точки”

Достаточно предсказуемо выглядит результат работы

профилировщика. Функции, выполняющие БПФ, работают

наибольшее время.

Page 130: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 130

Детальный анализ профиля (1)

Профиль на языке высокого уровня не даѐт сколь-либо

полезную информацию для анализа, поэтому придѐтся

обратиться к ассемблерному листингу программы.

Page 131: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 131

Детальный анализ профиля (2)

20.8% времени работы программы выполнялись две

функции по адресам 0x407080 и 0x40707c. Эти функции

присутствуют в профиле по 2 раза.

Page 132: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 132

Анализ листинга

Функция по смещению 0x7080 является перегруженным

оператором ―-‖ класса complex<double>.

Функция по смещению 0x707с является перегруженным

оператором ―*‖ класса complex<double>.

Page 133: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 133

Перейдѐм к native типам данных

Ранее мы отказались от использования контейнера

std::vector и это привело к ощутимому приросту

производительности.

Поступим таким же образом с классом, представляющим

комплексные числа, std::complex.

Будем представлять комплексное число в виде

последовательности из двух элементов типа double.

RealReal Image Real Image ………..

double

Комплексное

число

Page 134: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 134 Н.Новгород, 2011 г.

Встроенные типы данных

8. Для компилятора наиболее удобно, если программа

обрабатывает встроенные типы данных.

Page 135: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 135

Оценка эффективности

Время, потраченное на обработку видео: 29.4 с

Page 136: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 136

Прогресс оптимизации

Page 137: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 137

Выбор направления оптимизации

Вычисление одномерного БПФ состоит из двух этапов:

перестановка элементов и непосредственно вычисления.

Оценим ―вклад‖ перестановки элементов в вычисление

БПФ.

Page 138: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 138

Анализ профиля

Функция, выполняющая перестановку элементов массива

с помощью бит-реверсирования, занимает достаточно

много времени, чтобы заняться еѐ оптимизацией.

Page 139: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 139 Н.Новгород, 2011 г.

Делайте всѐ заранее

9. Один из наиболее простых и эффективных способов оптимизации

заключается в выполнении предвычислений, которые можно

будет использовать в основных вычислениях.

Page 140: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 140

Бит-реверсирование

Переупорядочивание элементов массива

Бит-реверсирование — это преобразование двоичного

числа заключающееся в изменении порядка следования

бит на противоположный

01 0 0 1 = 18 10 1 0 0 = 9

Page 141: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 141

Бит-реверсирование

//in: ind - обычный порядок следования бит

//out: revInd - бит-реверсивный порядок следования бит

//size = 1 << bitsCount;

int mask = 1 << (bitsCount - 1);

revInd = 0;

for(int i=0; i<bitsCount; i++)

{

bool val = ind & mask;

revInd |= val << i;

mask = mask >> 1;

}

Page 142: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 142

Бит-реверсирование

//in: ind - обычный порядок следования бит

//out: revInd - бит-реверсивный порядок следования бит

//size = 1 << bitsCount;

int mask = 1 << (bitsCount - 1);

revInd = 0;

for(int i=0; i<bitsCount; i++)

{

bool val = ind & mask;

revInd |= val << i;

mask = mask >> 1;

}

Для пересчёта каждого индекса

необходимо выполнить цикл!

Page 143: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 143

Оптимизация бит-реверсирования

Известный метод:

– Давайте заранее всѐ посчитаем и во время

реверсирования будем подставлять посчитанные

значения!

Page 144: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 144

Оптимизация бит-реверсирования

Создадим таблицу, в которой будут содержаться все

однобайтовые величины и их реверсивные аналоги (256

значений).

Исходное число, которое необходимо реверсировать,

разделим на байты.

Каждый байт заменим на соответствующий аналог из

таблицы.

Выполним сдвиг вправо полученного результата, если это

необходимо.

Page 145: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 145

Пример бит-реверсирования

Рассмотрим пример, в котором необходимо

реверсировать число, содержащее 19 значимых бит

Исходное число

Результат должен быть записан так же в 3 байта

19 бит

Page 146: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 146

Пример бит-реверсирования

Записываем первый байт в инверсивном порядке (1)

Page 147: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 147

Пример бит-реверсирования

Записываем второй байт в инверсивном порядке (2)

Page 148: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 148

Пример бит-реверсирования

Записываем третий байт в инверсивном порядке (3)

Page 149: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 149

Пример бит-реверсирования

Выполняем сдвиг на 5 бит вправо (4)

5 бит

Page 150: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 150

Оценка эффективности

Время, потраченное на обработку видео: 26 с

Page 151: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 151

Прогресс оптимизации

Page 152: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 152

Профилировка

Page 153: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 153

Анализ профиля

Функция, вычисляющая БПФ подверглась достаточно

хорошей оптимизации, поэтому выполнение функции

ProcessFrame стало занимать существенное время.

Page 154: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 154

Математические функции

Основную часть времени функция ProcessFrame

выполняет вычисление математических функций

(извлечение корня, возведение в степень, логарифм,

экспонента).

Page 155: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 155

Оптимизация использования математических

функций (1)

Избавимся от функций pow, которые возводят в степень

число ―-1‖.

Page 156: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 156

Оптимизация использования математических

функций (2)

Заменим вычисление функции pow на соответствующее

умножение.

Page 157: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 157

Оптимизация использования математических

функций (3)

Избавимся от повторных вычислений выражений.

Page 158: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 158 Н.Новгород, 2011 г.

Упрощение выражений

10. Применение маленьких и простых оптимизаций может приводить

к значительному сокращению времени выполнения программы.

Page 159: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 159

Оценка эффективности

Время, потраченное на обработку видео: 18.6 с

Page 160: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 160

Прогресс оптимизации

Page 161: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 161

Следующий шаг

Многие вычислительные системы имеют несколько вычислительных

ядер/процессоров. Наша тестовая система содержит 8

вычислительных ядер.

Выполним распараллеливание функции, выполняющей вычисление

БПФ, с использованием OpenMP.

Page 162: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 162 Н.Новгород, 2011 г.

Параллельная реализация

11. Современные процессоры имеют больше одного

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

программы – один из эффективных способов сократить время

работы программы.

Page 163: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 163

Оценка эффективности

С картинкой что-то не то!

Page 164: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 164

“Гонки данных”

Рассмотрим типичную ситуацию, в которой необходима

синхронизация, называемую «гонкой данных».

Пусть есть общая переменная data, доступная

нескольким потокам для чтения и записи.

Каждый поток должен выполнить инкремент этой

переменной (то есть выполнить код data++).

Для этого процессору необходимо выполнить три

операции: чтение значения переменной из оперативной

памяти в регистр процессора, инкремент регистра, запись

посчитанного значения в переменную (в оперативную

память).

Page 165: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 165

“Гонки данных”.

Ожидаемая реализация

Сначала поток 0 выполняет чтение переменной, инкремент регистра

и запись его значения в переменную, а потом поток 1 выполнит ту же

последовательность действий.

Таким образом, после завершения работы приложения значение

общей переменной будет равно data+2.

data

Поток #0

чте

ние

Поток #1

запись

data+1

Поток #0

чте

ние

Поток #1

запись

data+1 data+2

1 2

Page 166: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 166

“Гонки данных”.

Менее ожидаемая реализация (1)

Поток 0 выполняет чтение значения переменной в регистр и

инкремент этого регистра, и в этот же момент времени поток 1

выполняет чтение переменной data.

Т.к. для каждого потока имеется свой набор регистров, то поток 0

продолжит выполнение и запишет в переменную значение data+1.

data

Поток #0

чте

ние

Поток #1

запись

data

Поток #0

чте

ние

Поток #1

запись

data+1data+1

1 2

Page 167: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 167

“Гонки данных”.

Менее ожидаемая реализация (2)

Поток 1 также выполнит инкремент регистра (значение переменной

data было прочитано из оперативной памяти ранее до записи потоком

0 значения data+1) и сохранит значение data+1 (свое) в общую

переменную.

Таким образом, после завершения работы приложения значение

переменной будет равно data+1.

data

Поток #0

чте

ние

Поток #1

запись

data

Поток #0

чте

ние

Поток #1

запись

data+1data+1

1 2

Page 168: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 168

“Гонки данных”

Обе реализации могут наблюдаться как на многоядерной

(многопроцессорной) системе, так и на

однопроцессорной, одноядерной.

Таким образом, в зависимости от порядка выполнения

команд результат работы приложения может меняться.

Page 169: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 169

Ищем ошибки

Вы можете наблюдать ―гонки данных‖ при работе

программы в виде искаженного изображения.

Page 170: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 170

Intel Inspector XE 2011. Поиск “гонок данных”

Page 171: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 171

Ошибки (1)

Гонка данных: потоки используют переменную temI

параллельно для записи и чтения (fft.cpp:73, 76).

Page 172: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 172

Ошибки (2)

Гонка данных: потоки используют переменную uRtmp

параллельно для записи и чтения (fft.cpp:75, 77).

Page 173: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 173

Исправление ошибок

Чтобы исправить ошибки необходимо:

– либо воспользоваться директивой private:

#pragma omp parallel for private(temI, uRtmp)

– либо объявить переменные локально.

Page 174: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 174

Оценка эффективности

Время, потраченное на обработку видео: 32 с

Page 175: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 175

Анализ эффективности

Оцените эффективность распараллеливания.

Page 176: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 176

Конфигурирование Intel Amplifier XE 2011

Page 177: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 177

Анализ профиля (1)

Программа состоит из очень большого количества

параллельных секций.

Page 178: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 178

Анализ профиля (2)

Каждая параллельная секция выполняется менее 5 мкс!

Замедление программы вызвано тем, что накладные

расходы на создание параллельных секций значительно

превосходят объѐм вычислений в этих секциях.

Функция SerialFFTCalculation обрабатывает малые

массивы данных, поэтому еѐ распараллеливание не

актуально.

Page 179: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 179

Эффективное распараллеливание

Выполним распараллеливание двух циклов функции

SerialFFT2D. Каждая итерация в этих циклах может

выполняться независимо, т.к. на каждой итерации

обрабатывается отдельная строка (столбец) матрицы,

задающей изображение.

Параллельную реализацию поместим в функцию

ParallelFFT2D.

Аналогично поступим с функцией SerialInverseFFT2D.

Page 180: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 180 Н.Новгород, 2011 г.

Эффективное

распараллеливание

12. Написать быструю последовательную программу сложно, а

параллельную ещѐ сложнее.

Page 181: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 181

Оценка эффективности

Время, потраченное на обработку видео: 8.4 с

Page 182: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 182

Прогресс оптимизации

Page 183: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 183

Эффективность параллельной реализации (1)

Общее ускорение по сравнению с последовательной

версией получилось всего 2.2, при том, что доступно 8

вычислительных ядер!

Дело в том, что выполнялось распараллеливание только

части программы, поэтому ускорение и не могло

получиться близким к линейному.

Page 184: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 184

Эффективность параллельной реализации (2)

Распараллеливание было выполнено той части кода,

который занимал 51% времени (последовательная версия

программы).

По закону Амдала получается что максимальное

ускорение будет чуть больше 2 (что и наблюдается).

Page 185: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 185

Эффективность параллельной реализации (3)

Intel VTune Amplifier XE 2011 так же позволяет убедиться

что большую часть времени параллельные секции

одновременно обрабатывают 8 потоков.

Page 186: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 186

Полное распараллеливание

Выполним распараллеливание функции ProcessFrame.

Так же выполним следующие оптимизации:

– вынесем switch из тела цикла;

– будем выделять/освобождать динамическую память

один раз.

Page 187: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 187 Н.Новгород, 2011 г.

Полностью параллельно

13. Распараллеливание одного алгоритма может не привести к

значительному ускорению работы программы.

Page 188: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 188

Оценка эффективности

Время, потраченное на обработку видео: 4.4 с

Время обработки одного кадра: 0.015 с

Page 189: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 189

Прогресс оптимизации

Page 190: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 190

Тестовые данные

До настоящего момента все эксперименты проводились

на одном видеофрагменте, поэтому вся оптимизация

проводилась по сути для этого файла (следовательно, и

размера картинки).

Проведѐм эксперимент на видеофрагментах с

разрешением 512x512 и 1024x1024 точек.

Page 191: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 191

Эксперименты

Время, потраченное на обработку видео: 24.9 с

Время обработки одного кадра: 0.065 с

Время, потраченное на обработку видео: 293.5 с

Время обработки одного кадра: 0.481 с

Page 192: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 192

Анализ (1)

Основным вычислительном алгоритмом в

рассматриваемой задаче является вычисление

двумерного БПФ. Таким образом, трудоѐмкость обработки

одного кадра составляет: O h ∙ w ∙ logw + 𝑤 ∙ ℎ ∙ logh , где w

– количество точек по горизонтали в изображении, а h –

по вертикали.

Рассмотрим увеличенное в два раза по горизонтали и

вертикали изображение. Трудоѐмкость обработки такого

изображения составит:

O 4 ∙ h ∙ w ∙ log(2 ∙ w) + 4 ∙ 𝑤 ∙ ℎ ∙ log(2 ∙ h) .

Page 193: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 193

Анализ (2)

Таким образом, время обработки кадра увеличенного в

два раза по горизонтали и вертикали должно замедлиться

в 4∙h∙w∙log(2∙w):4∙𝑤∙ℎ∙log(2∙h)

h∙w∙logw:𝑤∙ℎ∙logh раз.

4∙h∙w∙𝑙𝑜𝑔(2∙w):4∙𝑤∙ℎ∙𝑙𝑜𝑔(2∙h)

h∙w∙𝑙𝑜𝑔w:𝑤∙ℎ∙𝑙𝑜𝑔h= 4 ∙

𝑙𝑜𝑔2:𝑙𝑜𝑔𝑤:𝑙𝑜𝑔2:𝑙𝑜𝑔ℎ

𝑙𝑜𝑔w:𝑙𝑜𝑔h= 4 ∙

1 + 2 ∙𝑙𝑜𝑔w:𝑙𝑜𝑔h

𝑙𝑜𝑔2

;1= 4 ∙ 1 +

2

log2 𝑤:log2 ℎ

Для 𝑤 = ℎ = 256 получаем замедление в 4 ∙ 1 +2

8:8= 4.5

раза.

Для 𝑤 = ℎ = 512 получаем замедление в 4 ∙ 1 +2

9:9≈ 4.4

раза.

Page 194: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 194

Анализ экспериментов

При переходе от изображения размером 256x256 к

изображению размером 512x512 наблюдается

замедление в 65

15≈ 4.3 раза.

При переходе от изображения размером 512x512 к

изображению размером 1024x1024 наблюдается

замедление в 481

65= 7.4 раза.

Результаты последнего эксперимента показывают, что

замедление программы значительно больше, чем это

предсказывалось теоретически!!!

Page 195: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 195

Профилировка

Page 196: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 196

Профиль функции ParallelInverseFFT2D

Вычисление одномерного ДПФ по строкам работает в 10

раз быстрее, чем вычисление одномерного ДПФ по

столбцам (для TestVideo2.avi и TestVideo3.avi

соотношения будут похожими).

Page 197: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 197

Детальный анализ

Page 198: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 198

Анализ

Вычисление БПФ над строками приводит к тому, что

появляется большое количество инструкций доступа к

памяти, которые работают очень долго.

Page 199: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 199

Кеш-память

Современные процессоры содержат специальную память

(кеш-память) с быстрым доступом к данным в которую

процессор может помещать часть обрабатываемых

данных.

Часто процессоры имеют многоуровневую иерархию кеш-

памяти.

Кэш 1-го уровня имеет небольшой размер, но очень

высокую скорость работы, кэш 2-го уровня имеет большой

размер, но меньшую скорость работы и т.д.

Page 200: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 200

Тестовая система

Тестовая система имеет 3 уровня кеш-памяти.

Page 201: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 201

Модель кеш-памяти

Мы будем представлять кеш-память в виде прямоугольной матрицы.

Каждый элемент матрицы – это линейка кеш-памяти (минимальный

элемент с которым работает кеш-память).

Количество столбцов будет определять ассоциативность кэша.

Количество строк определяется соотношением <размер кеш-памяти>

/ (<ассоциативность кеш-памяти> * <размер кеш-линейки>).

Для тестовой системы рассмотрим кеш-память 2-го уровня:

– Размер кеш-памяти: 256 КБ.

– Ассоциативность: 8.

– Размер кеш-линейки: 64 Б.

Page 202: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 202

Тестовое изображение

Рассмотрим один кадр (одну компоненту цвета).

Page 203: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 203

Выполнение ДПФ над первой строкой (1)

Первый элемент изображения занимает 16 байт (2

элемента типа double) и будет загружен в первую кеш-

линейку.

Page 204: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 204

Выполнение ДПФ над первой строкой (2)

Второй элемент изображения будет снова загружен в

первую кеш-линейку, т.к. размер линейки кэша составляет

64 Б.

Page 205: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 205

Выполнение ДПФ над первой строкой (3)

Первые 4 элемента изображения будет загружены в

первую кеш-линейку.

Page 206: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 206

Выполнение ДПФ над первой строкой (4)

Строка тестового изображения занимает в памяти 4 КБ и

может быть полностью загружена как в кеш-память 2-го

уровня, так и в более быстрою память 1-го уровня.

Page 207: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 207

Выполнение ДПФ над первым столбцом (1)

Первый элемент столбца занимает 16 байт (2 элемента

типа double) и будет загружен в первую кеш-линейку.

Page 208: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 208

Выполнение ДПФ над первым столбцом (2)

Второй элемент столбца находится по смещению 4 КБ (

256 * 16 Б), поэтому он будет загружен в кеш по такому же

смещению.

Page 209: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 209

Выполнение ДПФ над первым столбцом (3)

Каждый следующий элемент столбца смещѐн на 4 КБ.

Page 210: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 210

Выполнение ДПФ над первым столбцом (4)

Первые 64 элемента столбца заполнят 1

64 часть линеек

кеш-памяти.

Очередной элемент столбца может быть помещѐн только

в занятые позиции, поэтому один из находящихся в кеш-

памяти элементов будет выгружен в кеш 3-го уровня.

Повторное использование данных в кеш-памяти

происходить не будет!!!

Page 211: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 211

Оптимизация

Перед выполнением одномерно БПФ поместим

обрабатываемый столбец в непрерывный массив (т.к.

БПФ имеет трудоемкость 𝑂(𝑛𝑙𝑜𝑔𝑛) то указанная

оптимизация даст положительный эффект, т.к.

трудоѐмкость копирования линейна).

Page 212: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 212 Н.Новгород, 2011 г.

Эффективное использование

кеш-памяти

14. Перед выполнением оптимизации разработчику необходимо

подготовить представительные (наиболее типичные для

программы) данные на которых будет происходить тестирование

программы.

Page 213: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 213

Оценка эффективности

Время, потраченное на обработку видео: 2.9 с

Page 214: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 214

Прогресс оптимизации

Page 215: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 215

Результаты экспериментов

Время, потраченное на обработку видео: 16 с

Время, потраченное на обработку видео: 121.6 с

Page 216: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 216 Н.Новгород, 2011 г.

MKL для вычисления ДПФ

15. Для многих вычислительных задач разработано большое

количество библиотек, которые содержат эффективные

реализации алгоритмов решения таких задач.

Page 217: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 217

Реализация БПФ

FFTW (Fastest Fourier Transform in the West)

– библиотека для вычисления ДПФ;

– GNU GPL.

Intel MKL (Math Kernel Library)

– содержит реализации большого количества

алгоритмов;

– оптимизирована для процессоров Intel;

– имеет реализацию интерфейсов FFTW.

Page 218: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 218

Настройка среды разработки

Page 219: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 219

Ручная настройка среды разработки

Путь к заголовочным файлам

Tools → Options…→ Projects and Solutions → VC++

Directories

Show directories for: Include files

New Line: C:\Program Files\Intel\MKL\<version>\include

Путь к статическим библиотекам для линковки

Tools → Options…→ Projects and Solutions → VC++

Directories

Show directories for: Library files

New Line: C:\Program Files\Intel\MKL\<version>\<arch>\lib,

где <arch> = ia32 | em64t | ia64

Page 220: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 220

Использование ДПФ в MKL

Заголовочный файл: mkl_dfti.h

Статические библиотеки:

• Базовая библиотека: mkl_core.lib

• Версия MKL:

• параллельная: mkl_intel_thread.lib

• последовательная: mkl_sequential.lib

• Тип интерфейса функций:

• cdecl: mkl_intel_c.lib

• stdcall: mkl_intel_s.lib

Помощник для линковки: http://software.intel.com/en-

us/articles/intel-mkl-link-line-advisor

Page 221: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 221

Выполнение ДПФ в MKL

1. Создание дескриптора, описывающего ДПФ: DftiCreateDescriptor

2. Подтверждение дескриптора:

DftiCommitDescriptor

3. Вычисление прямого/обратного ДПФ: DftiComputeForward/DftiComputeBackward

4. Освобождение дескриптора:

DftiFreeDescriptor

Page 222: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 222

Создание дескриптора

DFTI_DESCRIPTOR_HANDLE dftHandle;

MKL_LONG status;

status = DftiCreateDescriptor( &dftHandle, DFTI_DOUBLE,

DFTI_COMPLEX, 1, size);

status = DftiCommitDescriptor( dftHandle );

dftHandle – дескриптор.

status – статус выполнения функции (status = 0, если операция выполнена успешно, используя функцию DftiErrorMessage можно

получить содержательное сообщение о типе ошибки).

DFTI_DOUBLE – тип элементов над которыми будет выполнять ДПФ

– элементы двойной точности (может быть DFTI_SINGLE – одинарная

точность).

DFTI_COMPLEX – комплексная область (может быть DFTI_REAL –

действительная область).

1 – размерность ДПФ.

size – количество элементов.

Page 223: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 223

Создание дескриптора для двумерного ДПФ

DFTI_DESCRIPTOR_HANDLE dftHandle;

MKL_LONG status;

int size[2] = {w,h};

status = DftiCreateDescriptor( &dftHandle, DFTI_DOUBLE,

DFTI_COMPLEX, 2, size);

status = DftiCommitDescriptor( dftHandle );

2 – размерность ДПФ.

size – массив размерностей обрабатываемого массива.

Page 224: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 224

Вычисление ДПФ

Прямое ДПФ status = DftiComputeForward( dftHandle, mas );

mas – последовательность действительных значений.

Обратное ДПФ status = DftiComputeBackward( dftHandle, mas );

mas – последовательность комплексных значений в формате.

Page 225: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 225

Замечание

При выполнении обратного ДПФ по умолчанию функция DftiComputeBackward не выполняет деление на

количество элементов.

Можно реализовать ручное деление или перед выполнением операции DftiCommitDescriptor

необходимо установить коэффициент масштабирования:

DftiSetValue(handle, DFTI_BACKWARD_SCALE,

1.0 / (double)n);

1,0 ,1 1

0

2

nkeyn

xn

p

in

kp

pp

- обратное ДПФ

Page 226: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 226

Освобождение дескриптора

status = DftiFreeDescriptor( &dftHandle );

Page 227: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 227

Использование MKL (задание)

Откройте проект 14. filter (on the fly)\filter.sln.

Заменить ручное вычисление ДПФ на вычисление из

MKL:

– В файле filter.cpp функции ParallelFFT2D и

ParallelInverseFFT2D выполняют вычисление ДПФ для

каждой компоненты цвета. Для вычислений

используются два массива для каждого канала

(inp<R,G,B>, out<R,G,B>). Функциям MKL будет

достаточно одного массива для каждого канала.

Сравните быстродействие исходной версии и версии с

MKL на различных видеофрагментах.

Page 228: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 228

Оценка эффективности

Время, потраченное на обработку видео: 1.6 с

Page 229: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье 229 Н.Новгород, 2011 г.

Тестовая система

15.

Page 230: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 230

Аппаратная часть

8-ядерный процессор Intel Core i7

Page 231: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 231

Программное обеспечение

Microsoft Visual Studio 2008

– Version 9.0.21022.8

– Microsoft (R) 32-bit C/C++ Optimizing Compiler Version

15.00.21022.08 for 80x86

Intel Parallel Studio XE 2011

– Intel Composer XE 2011 (package 104)

• Intel(R) C++ Compiler XE for applications running on IA-32,

Version 12.0.0.104

– Intel Inspector XE 2011 (build 119192)

– Intel VTune Amplifier XE 2011 (build 119041)

Page 232: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 232

Спасибо за внимание!

Page 233: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 233

Задания для самостоятельной работы…

Перейти от использования типа double к типу float. Оценить

корректность получаемых данных и эффективность

реализации

Реализовать одну функцию вычисления БПФ для всех трѐх

компонент цвета. Оценить эффективность реализации

Реализовать функцию, выполняющую перестановку

элементов массива на основании таблицы с реверсивными

двухбайтовыми числами (таблица на 65536 записей). Оценить

эффективность реализации

Реализовать функцию, выполняющую перестановку

элементов массива сразу для всех строк/столбцов

обрабатываемого изображения. Оценить эффективность

реализации

Page 234: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 234

Задания для самостоятельной работы

Реализовать in-place алгоритм БПФ без использования

перестановки элементов массива. Оценить эффективность

реализации.

Реализовать алгоритм БПФ на общий случай размера

входного сигнала из. Оценить эффективность реализации.

Оценить эффективность динамического планирования в

OpenMP-версии по сравнению со статическим.

Реализовать одну глобальную параллельную секцию в

программе в функции ProcessFrame. Оценить эффективность

параллельной версии.

Page 235: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 235

Источники информации

Кудрявцев Л. Д. Краткий курс математического анализа. Т.

2. Дифференциальное и интегральное исчисления

функций многих переменных. Гармонический анализ:

Учебник. — 3-е изд., перераб. — М.: ФИЗМАТЛИТ, 2005.

— 424 с.

Тропченко А.Ю., Тропченко А.А. Методы сжатия

изображений, аудиосигналов и видео. Учебное пособие

по дисциплине «Теоретическая информатика» - Санкт-

Петербург: , 2009. — 108 с.

Гонсалес Р., Вудс Р. Цифровая обработка изображений.

Москва: Техносфера, 2005 г. — 1072 c.

Дискретное преобразование Фурье (ДПФ).

[http://dsplib.ru/content/dft/dft.html]

Page 236: Фильтрация изображений. Быстрое ... · 2013-02-26 · Н.Новгород, 20 1 г. Фильтрация изображений. Быстрое преобразование

Фильтрация изображений. Быстрое преобразование Фурье Н.Новгород, 2011 г. 236

Авторский коллектив

Сиднев Алексей Александрович,

ассистент кафедры

Математического обеспечения ЭВМ факультета ВМК ННГУ

[email protected]