SlideShare a Scribd company logo
Максим
Решетей
ведущий
iOS разработчик
Coub
Наложение видеоэффектов с
OpenGL ES 2.0 with Shaders
1
2
Что такое Coub
- Короткие зацикленные видео-
ролики со звуком
- Источники: камера, Youtube, Vimeo
- Шеринг в социальные сети
3
Повседневные задачи
- Гибкая архитектура
- Обработка данных (download/upload)
- Сложные интерфейсы
- Видео/аудио обработка
4
Обработка видео
Process
Process
Process
Process
5
Виды цифровой обработки
6
- Распознавание образов/текста
- Задачи классификации
- Нейронные сети
- Геометрические
преобразования
- Цветовая коррекция
- Наложение эффектов
Обработка изображения
ДЛЯ каждой точки
Color(x, y) = A(x, y)
где A - выбранный
алгоритм
0 N
0
N
7
0
N
0 N
Осветление
ДЛЯ каждой точки
RGB = R+С, G+С, B+С
где С - константа
8
Ч/б фильтр
ДЛЯ каждой точки
RGB = (R+G+B)/3
0
N
0 N
9
Другие популярные фильтры
Pixelation Posterization
10
Другие популярные фильтры
HDR Blur
11
Блюр в Coub iOS
12
Размытие по Гауссу
(блюр)
где
x, y - координаты точки изображения (пикселя)
𝞼 - стандартное отклонение распределения Гаусса (радиус блюра)
G(x,y) =
1
2πσ 2
e
−
x2
+y2
2σ 2
13
Размытие по Гауссу
- Вершина колокола -
обрабатываемый пиксель
- Значение пикселя - средне-
взвешенное значение по
окрестности
- Учитываются только пиксели
в районе 3𝞼 (правило трех
сигм)
14
Размытие по Гауссу,
общий алгоритм
1. Построение матрицы свертки размером 3𝞼
2. ДЛЯ каждой точки изображения
Вычисляем средне-взвешенное значение цвета точки
по окрестности, используя матрицу свертки.
Note: На практике используют массив вместо матрицы, для достижения O(n)
15
ШАГ 1 - Построение матрицы свертки A
- A[x,y] =
- Размер
матрицы 7x7
(3*2.5)
- Равномерное
распределение
0.0000 0.0000 0.0001 0.0003 0.0001 0.0000 0.0000
0.0000 0.0007 0.0065 0.0133 0.0065 0.0007 0.0000
0.0001 0.0065 0.0547 0.1109 0.0547 0.0065 0.0001
0.0003 0.0133 0.1109 0.2250 0.1109 0.0133 0.0003
0.0001 0.0065 0.0547 0.1109 0.0547 0.0065 0.0001
0.0000 0.0007 0.0065 0.0133 0.0065 0.0007 0.0000
0.0000 0.0000 0.0001 0.0003 0.0001 0.0000 0.0000
-3 0 3-2 -1 21
0
-1
-2
-3
1
2
3
1
2πσ 2
e
−
x2
+y2
2σ 2
16
ШАГ 2 - Применение матрицы A к точкам
изображения I
′I [x,y] =
I[x + i,y + j]* A[i, j]
j=0
3σ
∑
i=0
3σ
∑
3σ *3σ
0 N
0
N
0.05 0.11 0.05
0.11 0.22 0.11
0.05 0.11 0.05
A
I I'
0 3𝞼
17
Размытие по Гауссу,
эффективность на CPU
Картинка 640x480
Радиус блюра 5
=
640x480x15x15 =
70 million operations
Видео 640x480
Радиус блюра 5
=
70*30 =
2 billion operations
18
Что делать?
Hints:
- Полный последовательный перебор всех
пикселей
- Вычисления ортогональны, независимы друг от
друга
19
CPU vs GPU
1 2
3 4
Core
CPU GPU
20
GPU
- Много параллельных процессоров
- Векторные операции нативно
- Сравнимая с CPU частота
- Сверх-быстрая видео память
*iPhone6’s GPU GX6450 - 300 Giga FLOPS
21
OpenGL ES 2.0
- Простой интерфейс
- Прямой доступ к GPU
- Поддержка шейдеров
- Широкое распространение
22
Шейдер
- GLSL, C-like language
- Вертексные - для вершин объектов сцены
- Пиксельные - для точек изображения
- Встроенные команды для векторных типов и
операций, like vec3 color = vec3(1.0, 1.0, 1.0)*0.5
- Не нужно думать как параллелить выполнение
23
Простейший шейдер
void main(void)
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
24
Размытие по Гауссу на GPU
Вычисляем средне-взвешенное значение для
пикселя, используя матрицу свертки
Шаг 1 - CPU
Строим матрицу свертки (единичный набор операций)
Шаг 2 - GPU (шейдер)
25
Шейдер размытия по Гауссу
void main(void)
{
fragmentColor = texture2D(image, gl_FragCoord)*convolutionMatrix.mid
int kMatrixSize = 3sigma;
for (int i = 0; i < kMatrixSize; ++i)
{
for (int j = 0; j < kMatrixSize; ++j)
{
fragmentColor += texture2D(image, gl_FragCoord + vec2(i, j)) *
convolutionMatrix[i][j];
}
}
gl_FragColor = fragmentColor / (kMatrixSize*kMatrixSize)
}
26
Итоги
- Рассмотрели теорию цифровой обработки видео и
изображений
- Разобрали примеры простейших алгоритмов
- Подробно изучили как работает размытие по Гауссу
- Узнали о способе быстрой реализации алгоритма
на GPU с помощью шейдеров
27
coub.com
28
Максим
Решетей
ведущий
iOS разработчик
Coub
Вопросы?
www.facebook.com/reshetey
maxim.reshetey@gmail.com
29

More Related Content

DOCX
нэп, индустриализация, коллективизация
PDF
Елена Захаренко и Евгений Альтман - Быстрый алгоритм оценки движения полным п...
PPT
Conflux: GPGPU .NET
PDF
Komarov borba za-miesto-urfu_2013
PDF
Real-time HDR compressing
PPT
SciPy
PDF
Как мы строили аналитическую платформу на несколько миллиардов событии в меся...
PPTX
Современные технологии в R&D проектах
нэп, индустриализация, коллективизация
Елена Захаренко и Евгений Альтман - Быстрый алгоритм оценки движения полным п...
Conflux: GPGPU .NET
Komarov borba za-miesto-urfu_2013
Real-time HDR compressing
SciPy
Как мы строили аналитическую платформу на несколько миллиардов событии в меся...
Современные технологии в R&D проектах

Similar to Наложение видеоэффектов с OpenGL ES 2.0 with Shaders, Максим Решетей (20)

PPTX
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
PDF
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
PPTX
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
ODP
Tanki Online — multiplayer 3D-action in browser
PPTX
Модульные промышленные ПК Advantech
PDF
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
PDF
Видео + Конференция. Как получить правильное изображение? Константин Смирнов
PDF
"Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (...
PDF
11 встреча — Введение в GPGPU (А. Свириденков)
PPT
компьютерная графика (8 класс)
PPT
компьютерная графика (8 класс)
PPT
компьютерная графика (8 класс)
PDF
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
PDF
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
PPTX
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
PPTX
Artisto App, Highload 2016
PPTX
Оптимизация работы сотрудников с использованием сервисов видео конференций
PDF
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
PDF
Cовременный станок верстальщика
PPTX
Hydra Renderer
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
Tanki Online — multiplayer 3D-action in browser
Модульные промышленные ПК Advantech
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Видео + Конференция. Как получить правильное изображение? Константин Смирнов
"Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (...
11 встреча — Введение в GPGPU (А. Свириденков)
компьютерная графика (8 класс)
компьютерная графика (8 класс)
компьютерная графика (8 класс)
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto App, Highload 2016
Оптимизация работы сотрудников с использованием сервисов видео конференций
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Cовременный станок верстальщика
Hydra Renderer
Ad

Наложение видеоэффектов с OpenGL ES 2.0 with Shaders, Максим Решетей