Участник:Nikkou/Фильтр Собеля: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
(Новая страница: «Описание параллельной реализации алгоритма фильтрации Собеля. Автор: А.Г.Лыжов (401 групп…»)
 
Строка 22: Строка 22:
 
Это матрицы такого же размера, как исходное изображение, так как параметры градиента вычисляются для каждого пикселя изображения.
 
Это матрицы такого же размера, как исходное изображение, так как параметры градиента вычисляются для каждого пикселя изображения.
  
Промежуточные горизонтальные и вертикальные производные вычисляются с помощью следующих двумерных сверток:
+
Промежуточные горизонтальные и вертикальные производные (а точнее, их аппроксимации) вычисляются с помощью следующих двумерных сверток:
  
 
<math>
 
<math>
Строка 48: Строка 48:
  
 
=== Макроструктура алгоритма ===
 
=== Макроструктура алгоритма ===
 +
Макроструктуру в основном составляют:
 +
 +
1) двумерные свертки, приведенные в математическом описании;
 +
 +
2) операция поэлементного геометрического среднего между промежуточными аппроксимациями.
 +
 +
Эти элементы алгоритма приведены в разделе с математическим описанием.
 +
 
=== Схема реализации последовательного алгоритма ===
 
=== Схема реализации последовательного алгоритма ===
 +
Запись на C++-подобном псевдокоде:
 +
<pre>float *sobel(float *img) {
 +
    // diff_kernel is [1, 0, -1]; sum_kernel is [1, 2, 1]
 +
    horiz_der = conv(img, diff_kernel, sum_kernel);
 +
    vert_der = conv(img, sum_kernel, diff_kernel);
 +
    return combine_horiz_vert(horiz_der, vert_der);
 +
}
 +
 +
for (int i = 0; i < n_images; i++) {
 +
img = get_input(i);
 +
res = sobel(img);
 +
write_result(res);
 +
}</pre>
 +
 +
Для повышения производительности в последовательной реализации всегда следует использовать сепарабельность свертки и считать двумерную свертку, как композицию из одномерных.
 +
 +
 
=== Последовательная сложность алгоритма ===
 
=== Последовательная сложность алгоритма ===
 +
<math>O(M\cdot N \cdot K)</math> при обработке K изображений размером M*N, так как все макроэлементы, составляющие структуру алгоритма, выполняются за константу для одного пикселя.
 +
 
=== Информационный граф ===
 
=== Информационный граф ===
 
=== Ресурс параллелизма алгоритма ===
 
=== Ресурс параллелизма алгоритма ===

Версия 18:23, 2 декабря 2017

Описание параллельной реализации алгоритма фильтрации Собеля.

Автор: А.Г.Лыжов (401 группа).

Содержание

1 Свойства и структура алгоритма

1.1 Общее описание алгоритма

Фильтр Собеля - дискретный дифференциальный оператор, который используется для приближения градиента яркости изображения. Он часто используется в алгоритмах выделения границ при обработке изображений. Фильтр Собеля был предложен Ирвином Собелем и Гэри Фелдманом в лаборатории искусственного интеллекта Стэнфорда в 1968.

Фильтр Собеля легко вычислять, так как он основан на свертках изображения с небольшими ядрами. Из-за этого он аппроксимирует градиент со значительной погрешностью, но качество аппроксимации оказывается достаточным для многих практических приложений.

1.2 Математическое описание алгоритма

Исходные данные:

  • изображение [math]A^{N\cdot M}[/math]

Вычисляемые данные:

  • матрица аппроксимации модуля градиента [math]G^{N\cdot M}[/math]
  • матрица аппроксимации направления градиента [math]\Theta^{N\cdot M}[/math]

Это матрицы такого же размера, как исходное изображение, так как параметры градиента вычисляются для каждого пикселя изображения.

Промежуточные горизонтальные и вертикальные производные (а точнее, их аппроксимации) вычисляются с помощью следующих двумерных сверток:

[math] \mathbf{G}_x = \begin{bmatrix} +1 & 0 & -1 \\ +2 & 0 & -2 \\ +1 & 0 & -1 \end{bmatrix} * \mathbf{A} ,\ \mathbf{G}_y = \begin{bmatrix} +1 & +2 & +1\\ 0 & 0 & 0 \\ -1 & -2 & -1 \end{bmatrix} * \mathbf{A} [/math]

Аппроксимации для модуля и направления градиента можно получить, скомбинировав эти производные:

[math]\mathbf{G} = \sqrt{ {\mathbf{G}_x}^2 + {\mathbf{G}_y}^2 }[/math]

[math]\mathbf{\Theta} = \operatorname{atan}\left({ \mathbf{G}_y \over \mathbf{G}_x }\right)[/math]

1.3 Вычислительное ядро алгоритма

Вычислительное ядро совпадает с алгоритмом, так как все описанные операции выполняются за [math]O(M\cdot N)[/math] на одном изображении.

1.4 Макроструктура алгоритма

Макроструктуру в основном составляют:

1) двумерные свертки, приведенные в математическом описании;

2) операция поэлементного геометрического среднего между промежуточными аппроксимациями.

Эти элементы алгоритма приведены в разделе с математическим описанием.

1.5 Схема реализации последовательного алгоритма

Запись на C++-подобном псевдокоде:

float *sobel(float *img) {
    // diff_kernel is [1, 0, -1]; sum_kernel is [1, 2, 1]
    horiz_der = conv(img, diff_kernel, sum_kernel);
    vert_der = conv(img, sum_kernel, diff_kernel);
    return combine_horiz_vert(horiz_der, vert_der);
}

for (int i = 0; i < n_images; i++) {
	img = get_input(i);
	res = sobel(img);
	write_result(res);
}

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


1.6 Последовательная сложность алгоритма

[math]O(M\cdot N \cdot K)[/math] при обработке K изображений размером M*N, так как все макроэлементы, составляющие структуру алгоритма, выполняются за константу для одного пикселя.

1.7 Информационный граф

1.8 Ресурс параллелизма алгоритма

1.9 Входные и выходные данные алгоритма

1.10 Свойства алгоритма

2 Программная реализация алгоритма

2.1 Особенности реализации последовательного алгоритма

2.2 Локальность данных и вычислений

2.2.1 Локальность реализации алгоритма

2.2.1.1 Структура обращений в память и качественная оценка локальности
2.2.1.2 Количественная оценка локальности

2.3 Возможные способы и особенности параллельной реализации алгоритма

2.4 Масштабируемость алгоритма и его реализации

2.4.1 Масштабируемость алгоритма

2.4.2 Масштабируемость реализации алгоритма

2.5 Динамические характеристики и эффективность реализации алгоритма

2.6 Выводы для классов архитектур

2.7 Существующие реализации алгоритма

3 Литература