Новости
О Центре
Кластер
Обучение
Основной курс по параллельному программированию
Учебные курсы
Магистратура
Дополнительное образование
Работы студентов
Библиотека
Исследования
Конференции
Полезные ссылки
NVIDIA
Контакты
О сайте
Имя:
Пароль:
запомнить:
Забыли пароль? Регистрация

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

Введение

Медианный фильтр — один из видов цифровых фильтров, широко используемый в цифровой обработке сигналов и изображений для уменьшения уровня шума.

Реализуется с помощью окна, состоящего из нечётного количества отсчётов. Значения отсчётов внутри окна сортируются по порядку; и среднее значение, то есть значение находящееся в середине упорядоченного списка, принимается выходным значением. На следующем шаге окно передвигается на один отсчёт вперёд и вычисления повторяются. Крайние значения массива мыслим продублированными столько раз, чтобы можно было применить окно к первому и к последнему значению.

Медианная фильтрация — обычная процедура обработки изображений. Она особенно часто используется для уменьшения шума в изображении.

Постановка задачи

Дана матрица NxN. Необходимо реализовать параллельный алгоритм медианной фильтрации этой матрицы.

Метод решения

(Примечание: для простоты был реализован фильтр 3x3)

Последовательный алгоритм:

Фильтрация проводится построчно – для первого элемента строки заполняется массив окрестности (с учетом того, что искусственно добавляются три значения-соседи слева), этот массив сортируется быстрой сортировкой, затем среднее значение записывается в выходную матрицу. Для каждого следующего элемента строки массив окрестности не заполняется заново – в него лишь добавляются новые три элемента, замещая старые три. Для того, чтобы это было возможно сделать за один проход (по массиву окрестности и новым трем элементам) введен специальный массив с «количеством жизней» элемента. Жизней может быть 1, 2 и 3. Добавляемые 3 элемента предварительно сортируются и добавление производится слиянием: во время него элементы с 1й жизнью затираются, элементы, имевшие 2 и 3 жизни получают 1 и 2 соответственно, а добавляемые элементы становятся обладателями 3х жизней. Средний элемент записывается в выходной массив. Обработка последнего элемента производится повторением итерации предпоследнего шага. На практике данный метод по сравнению с полной выборкой окрестности и ее сортировкой показывает превосходство по скорости в 3 раза.

Параллельный алгоритм:

(Примечание: размерность матрицы была ограничена значениями кратными двойке)

Т.к. в данной задаче наблюдается независимость по данным, параллелизм производится на основе деления матрицы на части (по несколько строк, а именно N/p, где p –количество процессов). Если учесть что в персональных компьютерах обычно 1, 2, 4 или 8 ядер у процессора, то деление будет производиться без остатка. После деления матрицы на части по высоте – они обрабатываются последовательным алгоритмом, но необходимо учесть, то при этом невозможно обработать граничные строки (за исключением первой и последней в матрице) – после завершения параллельных вычислений, части собираются обратно в одну матрицу, а оставшиеся строки необходимо отфильтровать отдельно.

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

Время фильтрации 1го элемента строки:

(2*9+9*ln(9)*2+1)*t , где t - время выполнения одной операции.

    • (2*9 операций – заполнение массива окрестности и соответствующего массива «жизней»
    • 9*ln(9)*2 – быстрая сортировка массивов
    • 1 – выборка и присваивание медианы выходному элементу

Фильтрация последующих элементов строки:

(9+3+18+1)*t

    • 9+3 – проход по массиву окрестности с добавлением новых элементов и удалением старых
    • 18 – копирование массива окрестности и массива «жизней» из вспомогательных массивов
    • 1 – выборка и присваивание медианы выходному элементу

Итого на требующееся на фильтрацию строки время:

((2*9+9*ln(9)*2)+1+(N-1)*(9+3+18+1))*t ≈(21N+37)*t

Время на фильтрацию всей матрицы:

Tp = (α+ω/β*N^2/p)+(21N+37)*t*(N/p+2*(p-1))

    • α – латентность
    • β - пропускная способность среды передачи
    • ω - размер элемента матрицы
    • 2*(p-1) – количество строк, оставшихся неотфильтрованными при делении матрицы на части)

T1 = (21N+37)*t*N

Тогда:

Ускорение: Sp = (T1 )/(Tp ) = ((21N+37)*t*N)/((21N+37)*t*(N/p+2*(p-1) )+α+ω/β*N^2/p) = βp/ (β+ω/21) ,при N→∞

Эффективность: Ep = (Sp )/p = β/(β+ω/21) ,при N→∞

Демонстрация

Ширина матрицы

Время выполнения (сек)

1

2

4

8

Tп

Tп

Tп

Tп

512

0.027134

0.032746

0.013678

0.021245

0.0071519

0.017787

0.004184

0.016893

1024

0.108349

0.132294

0.054436

0.073122

0.027772

0.047679

0.0150759

0.058709

2048

0.433023

0.528755

0.216984

0.300326

0.109574

0.217646

0.0571389

0.212924

4096

1.731348

2.104721

0.866569

1.414157

0.435423

1.063785

0.222386

1.063785

8192

6.923902

8.393932

3.463692

8.237934

1.736097

8.139418

0.877371

8.139418

Сравнение теоретических оценок ускорения с практическими:

Ширина матрицы

2

4

8

Sп

Sп

Sп

512

1.977266

1.541351

3.794181

1.841007

6.485653

1.938436

1024

1.990388

1.809223

3.901360

2.774681

7.187350

2.9253385

2048

1.995641

1.760603

3.951864

2.429427

7.578548

2.483304

4096

1.997933

1.488322

3.976242

1.978521

7.785321

2.299073

8192

1.998995

1.018936

3.988201

1.031269

7.891650

1.026975

Характеристики машины: Intеl Core i7 920 @ 2.80GHz 2.00ГБ ОЗУ

латентность: a = 0,00005 cек

пропускная способность: b = 25,6 ГБ/с

время выполнения стандартной операции: t = 0,000000004912 сек

размер элемента набора : w = 4

Об авторах

Работу выполнили студенты группы 8411: Муравьев Владимир и Соловьев Павел

Новости

22.10.2012
04.09.2012
05.04.2012
06.03.2012
02.03.2012