Обработка изображений средствами видеокарты на языке C#
Актуальность
В настоящее время активно развивается область машинного зрения. В этой области существует проблема - необходимы производительные решения по обработке потока, поступающего с оптического источника, в том числе параллельной обработке двух потоков для стереозрения. Именно на решение данной проблемы и направлен проект.
Цель - создание наиболее производительных реализаций морфологических способов обработки изображения.
Задачи:
- путем сравнения найти наиболее производительный способ морфологической обработки изображения;
- создать программу, демонстрирующую реализации данных способов обработки изображения.
Особенность проекта
Особенность проекта заключается в применении видеокарты для обработки изображений. Метод позволяет добиться высокой производительности и возможности параллельной обработки двух видеопотоков.
Результат работы
Поставленная задача была полностью решена: создана демонстрирующая результаты обработки изображений программа с дружественным интерфейсом.
Программа реализуется на статически типизированном, а с недавнего времени и кроссплатформенном, языке программирования C#. Для создания интерфейса используются Windows.Forms – стандартные средства разработки приложений под ОС Windows для .Net.
С помощью технологии NVIDIA CUDA производятся вычисления на видеокарте. Библиотека Alea GPU используется для компиляции C#-кода в CUDA-код.
В программе с нуля реализованы 4 способа морфологической обработки изображений: наращивание, эрозия, замыкание и размыкание. Замыкание позволяет убирать шумы на изображении, а размыкание - заполнять небольшие «дыры» изображения.
На рисунке ниже можно увидеть примеры работы программы (полноразмерный рисунок прикреплен)
Были проведен тест работы программы, который показал эффективность использования видеокарты для данной задачи.
Тест: 100 итераций дилатации
Размер изображения: 1 440 000 пикселей
| CPU | GPU | |
|---|---|---|
| Время обработки | 13,39 секунд | 1,22 секунд |
| Расчетное FPS | 7 | 81 |
Как видно, использование видеокарты позволило добиться увеличения производительности в 11,5 раз.
На рисунке ниже можно увидеть скриншот программы и скриншот теста (полноразмерный рисунок прикреплен)
Перспективы развития
На основе этого проекта планируется создать программу по обработке видеопотока, а затем и систему стереозрения.