Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gaussian blur: theory and practice.

Gaussian blur: theory and practice.

Max Reshetey

April 13, 2015
Tweet

Other Decks in Science

Transcript

  1. 2

  2. Что такое Coub - Короткие зацикленные видео- ролики со звуком

    - Источники: камера, Youtube, Vimeo - Шеринг в социальные сети 3
  3. Виды цифровой обработки 6 - Распознавание образов/текста - Задачи классификации

    - Нейронные сети - Геометрические преобразования - Цветовая коррекция - Наложение эффектов
  4. 0 N 0 N Осветление ДЛЯ каждой точки RGB =

    R+С, G+С, B+С где С - константа 8
  5. Размытие по Гауссу (блюр) где x, y - координаты точки

    изображения (пикселя) - стандартное отклонение распределения Гаусса (радиус блюра) G(x,y) = 1 2πσ 2 e − x2 +y2 2σ 2 13
  6. Размытие по Гауссу - Вершина колокола - обрабатываемый пиксель -

    Значение пикселя - средне- взвешенное значение по окрестности - Учитываются только пиксели в районе 3 (правило трех сигм) 14
  7. Размытие по Гауссу, общий алгоритм 1. Построение матрицы свертки размером

    3 2. ДЛЯ каждой точки изображения Вычисляем средне-взвешенное значение цвета точки по окрестности, используя матрицу свертки. Note: На практике используют массив вместо матрицы, для достижения O(n) 15
  8. ШАГ 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 2 1 0 -1 -2 -3 1 2 3 1 2πσ 2 e − x2 +y2 2σ 2 16
  9. ШАГ 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
  10. Размытие по Гауссу, эффективность на CPU Картинка 640x480 Радиус блюра

    5 = 640x480x15x15 = 70 million operations Видео 640x480 Радиус блюра 5 = 70*30 = 2 billion operations 18
  11. Что делать? Hints: - Полный последовательный перебор всех пикселей -

    Вычисления ортогональны, независимы друг от друга 19
  12. GPU - Много параллельных процессоров - Векторные операции нативно -

    Сравнимая с CPU частота - Сверх-быстрая видео память *iPhone6’s GPU GX6450 - 300 Giga FLOPS 21
  13. OpenGL ES 2.0 - Простой интерфейс - Прямой доступ к

    GPU - Поддержка шейдеров - Широкое распространение 22
  14. Шейдер - GLSL, C-like language - Вертексные - для вершин

    объектов сцены - Пиксельные - для точек изображения - Встроенные команды для векторных типов и операций, like vec3 color = vec3(1.0, 1.0, 1.0)*0.5 - Не нужно думать как параллелить выполнение 23
  15. Размытие по Гауссу на GPU Вычисляем средне-взвешенное значение для пикселя,

    используя матрицу свертки Шаг 1 - CPU Строим матрицу свертки (единичный набор операций) Шаг 2 - GPU (шейдер) 25
  16. Шейдер размытия по Гауссу 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
  17. Итоги - Рассмотрели теорию цифровой обработки видео и изображений -

    Разобрали примеры простейших алгоритмов - Подробно изучили как работает размытие по Гауссу - Узнали о способе быстрой реализации алгоритма на GPU с помощью шейдеров 27