Научная статья на тему 'Сравнение алгоритмов выделения связных областей, реализованных с использованием платформы CUDA'

Сравнение алгоритмов выделения связных областей, реализованных с использованием платформы CUDA Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
309
37
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
CUDA / CCL / ВЫДЕЛЕНИЕ СВЯЗНЫХ ОБЛАСТЕЙ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Селезнева Ольга Владимировна, Николаев Александр Владимирович

Существует ряд задач, для которых необходимо разбить изображение на связные области. В большинстве существующих алгоритмов выделения связных областей есть существенный недостаток скорость работы для изображений больших размерностей. В данной статье будут рассмотрены два алгоритма выделения связных областей и их модификации для ускорения работы с использованием платформы CUDA (Compute Unified Device Architecture.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Селезнева Ольга Владимировна, Николаев Александр Владимирович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Сравнение алгоритмов выделения связных областей, реализованных с использованием платформы CUDA»

Селезнева О.В.1, Николаев А.В.2

1 Санкт-Петербургский государственный университет, г. Санкт-Петербург, аспирант факультета прикладной математики - процессов управления 2 Санкт-петербургский государственный университет, г. Санкт-Петербург, выпускник-магистр факультета прикладной математики - процессов управления

Сравнение алгоритмов выделения связных областей, реализованных с использованием платформы CUDA

КЛЮЧЕВЫЕ СЛОВА

CUDA, ccl, выделение связных областей. АННОТАЦИЯ

Существует ряд задач, для которых необходимо разбить изображение на связные области. В большинстве существующих алгоритмов выделения связных областей есть существенный недостаток - скорость работы для изображений больших размерностей. В данной статье будут рассмотрены два алгоритма выделения связных областей и их модификации для ускорения работы с использованием платформы CUDA (Compute Unified Device Architecture).

В качестве входных данных будет выступать бинаризированный массив (рис. 1а). Желаемый результат работы алгоритма представлен на рис. 16.

1 а \ 4

1 1 1 d ) 2 2 4 tj )

1 1 1 1 2 2 4 4

1 1 1 1 1 1 1 1 2 2 2 2 4 4 4 4

1 1 1 1 2 2 2 2

1 1 1 2 2 2

1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1 3 3 1 1 1 1

1 1 1 1 1 1 1 1 3 3 1 1 1 1 1 1

1 1 1 1 1 1 1 3 3 3 1 1 1 1

Рис.1. а) — бинаризованное изображение, б) — изображение с размеченными

объектами

Будем считать, что область пикселей является связной, если для

любого пикселя из этой области существует сосед, имеющий с данной точкой общее ребро (4-связность).

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

Метод выделения связных областей, основанный на жадном алгоритме обхода

Проблему выделения связных областей можно рассмотреть с точки зрения задачи обхода графа. В качестве звеньев графа выступают точки массива, а соединяющее звенья ребро соответствует ребру принятых за соседние точки. Изначально все элементы, значения которых равно 1, должны быть перенумерованы в соответствии с их положением в массиве. Далее необходимо, пройдя по соседним точкам, дойти до той, чьё значение потом будет распространено на все точки области, например, это может быть точка с максимальным значением.

Идея жадного алгоритма заключается в принятии локального оптимального решения на каждой итерации. Поэтому на каждом этапе для элемента С ] 1 мы ищем такого соседа 2, ^ 2, значение которого будет больше чем значения всех других соседей и самого с1] 1. Затем рассматриваются соседи найденного элемента 2,^ 2. Эти действия продолжаются, пока не найдётся такой элемент , что все его соседи

будут меньше, чем он сам. В итоге получаем цепочку 1,^ 1 2,^2,... ,сп ]п, первый элемент которой с11, ] 1 - необходимо заменить на последний элемент - ¡п. Эти действия выполняются для каждой точки заданного массива. Для всех элементов должна быть проверка на возможность выхода за границы изображения. Такой алгоритм не обеспечивает полного обхода и перенумерации всех элементов массива за один раз. Поэтому необходимо ввести переменную isChanged, отвечающую за эффективность выполнения метода. Перед каждым проходом, значение этой переменной обнуляется. Если хоть для одной точки была произведена замена значения, то isChanged присваивается значение 1. После прохода по всем точкам проверяется значение переменной isChanged■.

• 1 - производится повторный проход по всем точкам;

• 0 - считается, что все элементы изображения были перенумерованы.

Модификация первого метода

Простота описанного выше алгоритма обеспечивает возможность его эффективного распараллеливания. сопоставим каждому элементу массива поток графического адаптера. Ядро алгоритма будет выполняться для каждой точки параллельно и на каждой итерации цикла производить сравнение с соседними элементами, переходя на элемент с большим значением. Остановка цикла происходит при попадании в точку, соседи которой не превышают её значения. После остановки значение в найденной точке записывается в начальную точку. Повторное выполнение ядра

определяется через значение переменной isChanged. Количество повторов может быть достаточно большим, поэтому вместе с только что описанным ядром можно запускать ядро, имеющее похожий принцип работы, но вместо того, чтобы проходить по цепочке элементов, в нём сравниваются только соседи и запись происходит на первой и единственной итерации. При этом происходит небольшая «встряска» элементов, что убирает возможность зацикленных и изолированных ситуаций.

Алгоритм, основанный на использовании маски.

о 1

в > 1 1

1 1 1 1

1 1 1 1 1

Рис.2. ABC маска и направление последовательного сканирования изображения Вторым рассматриваемым в данной статье методом будет однопроходный, не рекурсивный алгоритм, идея которого основана на использовании маски в виде уголка, как показано на рис. 2. Входными данными для этого алгоритма выступает бинаризированный массив. Проход по массиву изображения маской осуществляется слева направо и сверху вниз, при этом на границе изображения необходима дополнительная проверка на выход за пределы изображения. На рис. 3 изображены пять различных положений маски на изображении:

- 0 - все три компонента маски попадают на неразмеченные точки, в этом случае пиксель пропускается;

- 1 - размеченным является только элемент A. В этом случае на текущее место записывается новый уникальный номер (считается, что нашли новый объект);

- 2 - размеченным является элемент B. В этом случае текущий элемент A помечается меткой находящейся в B;

- 3 - размеченным является элемент C. В этом случае текущий элемент A помечается меткой находящейся в C;

- 4 - размечены элементы В и С, эквивалентные друг другу. В этом случае объект помечается как С. Если В не равно С, то перенумеровываются все уже обработанные пиксели, помеченные как В и их значение становится равным значению в метке С.

Ц1 с 1 1

в 1 1 1

1 1 1 1 1

1 1 1 1 1 1 1

1 1 Т 1 1 1 1

Рис.3. — Пять возможных позиций АВС-маски Модификация второго алгоритма

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

С.

/

-I / 1

/

^ N ^ \ I

г1

Рис.4. Бинаризованное изображение

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

Введём понятие уникального идентификатора потока: UID = threadIdx.x + blockDim.x * blockIdx.x.

Каждый такой UID будет представлять собой уникальный номер соответствующей подзадачи. На рис. 5 Представлено разбиение исходного изображения на сектора. Каждому сектору изображения соответствует определённое значение 1ЛР._________

■ С 9 ■ ■

■)1 ■ ■

т к«

■ т

■ ■ ■ III

■ ■ ■ ■■Л л мм

п 12 ■ а ш шш

и Р ■ Ш ти 1,1

■ Ш ■ и ■ на ы ■ ■ш

Рис. 5. — разбиение изображения на сектора

В каждом потоке будут обрабатываться пиксели в пределах соответствующего сектора. Затем потребуется объединить обработанные сектора в целостное изображение.

Применим для каждого сектора выбранный алгоритм разбиения. Все найденные связные области должны быть обозначены уникальными индексами не только в пределах сектора, но и между всеми секторами изображения. Поэтому номера для каждого нового найденного объекта рассчитываем по формуле:

М = UID * MaxCount + i,

где ЫахСоипЬ - максимально возможное число объектов в секторе, задаётся таким образом, чтобы множества индексов объектов из разных секторов не пересекались (здесь это половина площади сектора); i - некоторый индекс, высчитываемый в самом алгоритме выделения связных областей.

Применение алгоритма, в соответствии с вышеуказанными правилами представлено на рис. 6.________

■ ■ ■■■■■

И1 ■■■

■ ни

■ п ■■■■■

■ ■■■ ■пиша

■п 12 ■ 9 Б ш. ■■■

■и Р ■ ■ Я ышкшш

ш ■ ■ ш «ш

Рис.6. — Распределение индексов в секторах

Теперь в пределах каждого сектора связные области выделены одним цветом, несвязные — разными. Скорость работы для каждого сектора можно грубо оценить как 0(п3), что меньше в (imageSize.x/п) * (imageSize.y/ п) раз, чем скорость выполнения алгоритма для всего изображения.

Полученный выше результат необходимо объединить, для этого можно просто пройтись но пикселям «сетки» и проверить, являются ли связными пиксели разных цветов, если являются, то оба цвета представляют один объект, и один из цветов заменяется на другой. И данную задачу можно также распараллелить. Для этого в каждом потоке можно вычислить отдельно, какие точки необходимо соединить в каждом из секторов, сначала по горизонтали, затем по вертикали, и сразу же «перекрасить» в приделах выбранного сектора. В качестве цвета по умолчанию берётся тот, у которого значение ию меньше. За один проход нельзя правильно перекрасить всю картинку, для этого введём вспомогательную переменную isChanged, отвечающую за то, были ли произведены какие-нибудь изменения в каком-нибудь секторе или нет -

если были, то isChanged = 1, если нет, то она остаётся прежней (перед каждой итерацией /5СЬапдес1 обнуляется)._

Вычисления будут выполняться до тех пор, пока isChanged не останется неизменной (= 0), т.е. пока все соседние точки по всей сетке не будут иметь одинаковый цвет. Результат работы представлен на рис.7.

Сравнение описанных алгоритмов

В качестве тестовых были взяты изображения, показанные на рис. 8. Замеры проводились для графического адаптера GeForce GTX 470.

Результаты показывают, что оба алгоритма работают с допустимой скоростью, причём для зашумленных изображений быстрее оказался второй, а первый - на чистых изображениях. Однако, ввиду большей требовательности ресурсов, применение второго алгоритма может оказаться необоснованно дорогим, и длительность обработки зашумленных изображений компенсируется дешевизной первого алгоритма, который становится фаворитом для решения поставленной задачи.

Рис.7. Результат объединения соседних секторов

Рис.8. Тестовые изображения

_Таблица 1. Время работы алгоритмов

Рисунок Время работы первого Время работы второго

алгоритма, ms. алгоритма, ms.

1 1154 1392

2 1973 2022

3 2498 2487

4 3575 3360

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Литература

1. Джейсон Сандерс, Эдвард Кэндрот - Технология CUDA в примерах. Введение в программирование графических процессоров | Джейсон Сандерс, Эдвард Кэндрот. — М.: ДМК Пресс, 2011.

2. Томас Х. Кормен и др. Глава 16. Жадные алгоритмы || Алгоритмы: построение и анализ = INTRODUCTION TO ALGORITHMS. — 1-е изд. — М.: Московского центра непрерывного математического образования, 2001. — С. 889-892. — ISBN 5-900916-37-5.

3. Bedrich Benes, Ondrej Stava, Radomir Mech, and Gavin Miller, Guided Procedural Modeling, in Computer Graphics Forum (Eurographics), 2011. pp:325-334.

i Надоели баннеры? Вы всегда можете отключить рекламу.