Обработка изображений на GPU

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

  • градационные:
    • преобразование изображения в негатив;
    • логарифмические преобразования;
    • степенные преобразования;
    • кусочно-линейные функции преобразований;
  • арифметико-логические:
    • вычитание изображений;
    • усреднение изображений;
  • сглаживающие пространственные фильтры:
    • линейные сглаживающие фильтры;
    • основанные на порядковых статистиках;
  • фильтры повышения резкости;
  • восстанавливающие фильтры;
  • изменение яркости, контраста и пр.

 
Классический подход основан на обработке изображений с использованием центрального процессора (CPU). В данном случае происходит последовательный перебор каждого пиксела изображения и применение к нему соответствующего фильтра. В результате общая сложность алгоритмов определяется как сложность, непосредственно, алгоритма для одного пиксела умноженного на общее количество пикселов изображения. Использование систем на основе многоядерных процессоров позволяет повысить производительность, но во-первых, количество интегрированных ядер на наиболее доступных современных процессорах составляет 2-4, а во-вторых, современные системы разработки не обеспечивают удобными инструментами для разработки многопоточных приложений. >
Наиболее перспективным направлением в обработке изображений стало использование графических процессоров (GPU).Основным достоинством последних является их исключительная ориентированность на работу с 2d и 3d графикой, соответственно обработка больших объемов однотипных данных. Следствием этого стало появление на борту одной видеокарты нескольких потоковых процессоров, отвечающих за выполнение однотипных команд. Однако, основным прорывом в использование GPUдля обработки изображений стало появление возможности программировать потоковые процессоры (вершинные и пиксельные). Программы исполняемые на этих процессорах называются соответственно вершинные и пиксельные шейдеры.>
Особенностью работы группы процессоров является параллельность обработки данных, т.е. для пиксельного процессора такой единицей является один фрагмент или тексел. Например современные GPU несут на своем борту более 1000 потоковых процессоров каждого типа, что позволяет существенно повысить производительность за счет параллельного использования всех процессоров. Работу, связанною с распараллеливанием берет на себя GPU, инженер должен определить только базовый алгоритм для одного процессора.
Современные графические API (OpenGL, DirectX) позволяют программировать потоковые процессоры на языке высокого уровня (GLSL для OpenGL и HLSL для DirectX), что значительно упрощает процесс разработки, сокращает время. Из двух указанных графических API наиболее удобной является OpenGL. Незначительно отставая от своего конкурента в технических возможностях, OpenGL обладает несомненным плюсом – это кроссплатформенность. Что позволяет разрабатывать приложение по широкий круг ОС: Windows, Unix, Mac OSи др.
 
Заключение
 
В данной статье рассмотрена возможность применения GPU для обработки изображений, определены основные преимущества:

  • простота реализации системы обработки;
  • значительная, по сравнению с классической системой, производительность;
  • кроссплатформенность разрабатываемого ПО.

 

1  Р. Гонсалес, Р. Вудс Цифровая обработка изображений. Москва Техносфера 2005
 

©Дмитрий Седов, 2010 г.