- •230100 – Информатика и вычислительная техника
- •Часть 2. Алгоритмы цифровой обработки изображений 58
- •Часть 3. Методические указания для практических и лабораторных работ 109
- •Введение
- •Часть 1. Программирование графического адаптера nvidia с использованием технологии cuda
- •Краткая история развития графических адаптеров
- •Архитектура nvidia cuda
- •Архитектура gpu-приложения
- •Основные различия между cpu и cuda-устройством
- •Различие возможностей между поколениями cuda-устройств
- •Инструментарий cuda Toolkit
- •Установка
- •Проверка правильности установки
- •Компиляция примеров
- •Прикладные программные интерфейсы cuda
- •Особенности компиляции
- •Опции компилятора nvcc
- •Профайлер
- •Отладка программ в режиме эмуляции устройства
- •Среда разработки nvidia Parallel Nsight
- •Подключаемые библиотеки
- •Библиотека cublas
- •Библиотека cufft
- •Часть 2. Алгоритмы цифровой обработки изображений
- •Видоизменение гистограммы изображения
- •Основы пространственной фильтрации
- •Сглаживающие пространственные фильтры
- •Сглаживание изображений локальным усреднением
- •Сглаживание по обратному градиенту
- •Сглаживающий сигма-фильтр
- •Сглаживание по наиболее однородным областям
- •Медианный фильтр
- •Описание метода медианной фильтрации
- •Одномерный медианный фильтр
- •Зависимость качества работы медианного фильтра от размера апертуры
- •Двумерный медианный фильтр
- •Пространственные фильтры выделения границ областей
- •Линейные методы выделения границ областей. Лапласиан
- •Нелинейные методы выделения границ областей
- •Оператор Превита
- •Частотные фильтры
- •Сглаживающий частотный фильтр
- •Частотный фильтр повышения резкости
- •Гомоморфная фильтрация
- •Морфологическая фильтрация
- •Операции математической морфологии
- •Дилатация
- •Алгебраические свойства дилатации и эрозии
- •Применение морфологической дилатации
- •Применение морфологической эрозии
- •Размыкание и замыкание
- •Применение морфологических операций размыкания и замыкания
- •Основные морфологические алгоритмы
- •Выделение границ.
- •Заполнение областей.
- •Выпуклая оболочка.
- •Утончение.
- •Утолщение.
- •Построение остова.
- •Часть 3. Методические указания для практических и лабораторных работ
- •Практическая работа №1. Введение в технологию cuda
- •Цель работы
- •Порядок выполнения работы
- •Теоретическая часть
- •Архитектура графических адаптеров nvidia.
- •Архитектура чипа g80.
- •Архитектура чипа Fermi.
- •Вычислительные способности графического процессора.
- •Среда разработки cuda.
- •Язык cuda с.
- •Модель программирования cuda.
- •Теоретическая часть Модель памяти cuda
- •Особенности глобальной памяти.
- •Особенности разделяемой памяти.
- •Теоретическая часть Программный пакет «Sarcis».
- •Команды меню.
- •Панель инструментов.
- •Механизм подключения динамических библиотек.
- •Создание внешней библиотеки
- •Пример листинга программы динамической библиотеки.
- •Медианная фильтрация
- •Варианты индивидуальных заданий
- •Выбор по дискретному критерию.
- •Выбор по среднему контрасту.
- •Выбор по среднему градиенту.
- •Выбор на основе простых статистик.
- •Параметрическая аппроксимация.
- •Моментный подход.
- •Варианты индивидуальных заданий
- •Теоретическая часть
- •Инициализация устройства.
- •Выделение памяти на gpu
- •Пересылка данных между cpu и gpu.
- •Вызов функции ядра.
- •Методические рекомендации
- •Варианты индивидуальных заданий
- •Методические рекомендации
- •Защита лабораторной работы
- •Лабораторная работа № 3. Работа с разделяемой памятью в технологии cuda
- •Цель работы
- •Порядок выполнения работы
- •Методические рекомендации
- •Методические рекомендации
- •Особенности текстурной памяти.
- •Особенности линейной текстурной памяти.
- •Защита лабораторной работы
- •Правила оформления отчета
- •Оформление титульного листа
- •Библиографический список
Введение
После полутора-двух десятилетий пониженного спроса на новые технологии в отечественной промышленности, не в последнюю очередь в связи с насущной необходимостью преодоления кризиса, растёт интерес к инновационным разработкам. Особую роль играют высокоинтеллектуальные промышленные системы управления производственными процессами, основанные на обработке многомерных информационных массивов, таких как изменяющиеся во времени двумерные изображения и видеоданные. Наиболее перспективно строить такие приборы на основе систем технического зрения (СТЗ). С их помощью появляется возможность создания новых типов информационных систем, решающих широкий класс проблем благодаря использованию информации визуального характера.
Системы технического зрения предназначены для решения задач по дополнению или замене человека в областях деятельности, связанных со сбором и анализом зрительной информации. Уровень использования СТЗ в прикладных областях является одним из наиболее ярких и наглядных интегральных показателей уровня развития высоких технологий в самых различных отраслях промышленности.
В настоящее время значительные успехи в области построения и использования СТЗ приходятся на наиболее развитые производства с общей высокой культурой и технологией. Наряду с прикладными задачами СТЗ используют и в научных исследованиях, в которых на них возлагается роль дополнения, расширяющего возможности и повышающие эффективность человеческого зрительного анализа, при ведущей роли человека-оператора или исследователя.
Определенные трудности возникают при разработке СТЗ, в которых выполнение всех вычислительных операций по обработке и анализу видеоизображений должно быть реализовано в режиме реального времени. Наибольшую часть времени занимают вычисления на центральном процессоре связанные с обработкой изображений. Поэтому, актуально наряду с оптимизацией прикладного программного обеспечения использовать аппаратные средства ускорения процессов обработки. Одним из наиболее перспективных средств повышения производительности при обработке видеоинформации являются специализированные вычислительные устройства – графические ускорители фирмы NVIDIA, в частности низкоуровневая платформа для вычислений общего назначения NVIDIA CUDA (Compute Unified Device Architecture). Именно этим обстоятельством и объясняется выбор технологии CUDA для реализации алгоритмов цифровой обработки изображений и получения практических навыков программирования.
Часть 1. Программирование графического адаптера nvidia с использованием технологии cuda
Применение графических процессоров (graphics processing units - GPU) начиналось с программирования динамической трёхмерной графики. Для программной реализации графики используется архитектура графического конвейера. Графический конвейер представляет собой аппаратно-программное устройство, которое переводит объекты, описанные в трехмерном пространстве XYZ, во множество пикселей на экран монитора с учетом положения наблюдателя. Приведём краткое описание работы графического конвейера, блок-схема которого дана на рис. 1.1.
На первом шаге конвейера для отображения динамических изменений в наблюдаемой сцене все вершины объектов, которые прошли пиксельный тест и попали в графический конвейер из приложения, подвергаются аффинным преобразованиям: вращению, масштабированию и перемещению. Этот шаг называется геометрическим этапом и реализуется в блоке трансформации и освещения. Геометрический этап очень сильно зависит от вычислительной мощности реализующего его устройства. Он может быть реализован ресурсами только центрального процессора (CPU), однако центральные процессоры разработаны для широкого круга задач и ограниченно используют возможности параллельных вычислений. Увеличение их производительности в основном связано с наращиванием тактовой частоты и объема высокоскоростной кэш-памяти. Программирование для ресурсоемких научных вычислений подразумевает тщательное структурирование данных и порядка инструкций для эффективного использования всех уровней кэш-памяти CPU. Вот почему на этом этапе конвейера CPU становится узким местом системы. В то же время геометрический этап может быть выполнен с использованием вершинных шейдеров и реализован на GPU, что значительно разгружает центральный процессор.
Рис. 1.1 -Блок-схема работы графического конвейера
Отсечение невидимых граней удаляет все треугольники сцены, которые расположены нелицевыми сторонами к камере (наблюдателю) и являются невидимыми. Программист может установить дополнительные плоскости отсечения, которые будут отсекать те вершины и треугольники, которые находятся в отрицательном полупространстве плоскостей. Отсечение по видимому объему задает пирамиду или куб видимости, и примитивы, находящиеся вне этого объема, также будут отсекаться.
На следующем шаге графического конвейера производится однородное преобразование, при котором (x,y,z)-координаты вершин делятся на четвертую компоненту, называемую однородным множителем. После этого преобразования координаты треугольников будут нормализованы, а пирамида видимости трансформируется в единичный ортогональный куб.
Следующий этап начинается с растеризации треугольников и создания из них массива пикселей. Каждый растеризуемый пиксель обладает теми же атрибутами (цвет, текстурные координаты и т.д.), что и вершина после обработки вершинным шейдером. Значения атрибутов пикселя вычисляются на основе линейной интерполяции вершин примитива.
Для наложения изображения на поверхность производится операция текстурирования. Мультитекстурирование – процесс добавления множества текстур к объекту. Мультитекстуры могут накладываться друг на друга для отображения шероховатостей поверхности. Шаг мультитекстурирования может производиться либо с помощью механизма работы с текстурами (использование центрального процессора), либо же с помощью пиксельных шейдеров (использование графического процессора). Пиксельные шейдеры можно рассматривать как некий программируемый механизм обработки пикселей, причем способ и результат такой обработки зависят от программиста. Именно с помощью пиксельных шейдеров получают визуальные эффекты, сравнимые с киноэффектами (моделирование воды, травяной поверхности, меха, микрорельефное и попиксельное освещение и др.).
После блока мультитекстурирования наступает фаза различных тестов, после успешного прохождения которых пиксель попадает в буфер кадра (место в видеопамяти) и отображается на экране.
Главным отличием архитектуры графического процессора (GPU), позволившим добиться выдающихся результатов в решении подобных задач, является реальное распараллеливание данных, т.е. способность к одновременной обработке большого числа независимых элементов. До 2007 г. программирование GPU было возможным только при помощи графических библиотек OpenGL и Microsoft DirectX, а выполняемые на GPU программы, называемые шейдерами (от слова shading – закрашивание, затенение), писались на соответствующих шейдерных языках: GLSL, HLSL, Cg. Изначально программируемые вершинные и пиксельные шейдеры были добавлены в графический конвейер для того, чтобы разработчики игр могли реализовывать более реалистичные визуальные эффекты. Чтобы понять, какие преимущества приносит перенос расчётов на GPU, приведём усреднённые цифры, полученные исследователями по всему миру. В среднем при переносе вычислений на GPU во многих задачах достигается ускорение, в 5-30 раз превышающее время, затраченное на быстрых универсальных процессорах.
