EVM: ускорение вычисления
Для повторения эффекта Eulerian Video Magnification можно воспользоваться более простой техникой, нежели чем об этом говорится в соответствующей документации. Достаточно просто взять полосный фильтр, например, Баттерворта и подобрать к конкретному видео нижнюю и верхнюю частоты среза. Остаётся только применять этот фильтр к каждому из пикселей каждого кадра в кольцевом буфере. Всё это без необходимости разложения кадров на пирамиду изображений, а затем, перед воспроизведением, производить обратную сборку в одно целое.
Но мой вопрос заключается в том, каким образом авторы EVM достигают такой скорости обработки данных, как это представлено на их демонстрационном видео?
Там показан ролик с вагоном метро достаточно высокого разрешения, пользователь крутит ползунки параметров, и всё в режиме реального времени, как если бы применялись простейшие расчёты. Ведь как минимум необходимо собрать кольцевой буфер размером, скажем, кадров в 30, и по каждому пикселю центрального в этом буфере кадра и основываясь на значениях пикселей других кадров в кольце, применять на них в отдельности полосный фильтр. Это огромная работа с учётом того, что изображение ещё и в цвете, то есть три канала.
Вопрос - как так у них это получается? Просто хотя бы чисто теоретически.
Update:
Максимум, что удалось добиться для воспроизведения в реальном времени - это разрешение в 320х240 пикселей, без применения пирамид Гаусса, а затем Лапласа (только один единственный проход на 3-х каналах по всем пикселям с применением полосного фильтра), на восьмиядерной машине, с параллелизацией через OpenMP, 25 кадров/сек.
Пересмотрел все проекты на гитхабе и прочих местах, какие только сумел найти по этой теме. Везде производится буферизация кадров и лишь затем постобработка.
Делаю вывод, что возможная неоптимизированность моего кода не является причиной невозможности наложения EVM в реальном времени. Значит авторы метода используют или некий хитрый подход, позволяющий избавиться от части вычислений, либо задействуют целый кластер машин. Впрочем, может быть ещё использование GPU... Одно из двух: либо вычисляют иначе, чем описывают в своей документации, либо используют "железо" по полной программе.