 |
|
 |
Расчёт гистограмм изображений на базе технологии CUDA
Существует ряд задач, в которых преимущество технологии CUDA выражено явным образом. Это задачи, которые можно распараллелить. Одной из таких задач является гистограммирование, т.е. вычисление гистограммы массива данных (изображения). Если рассматривать этот алгоритм применительно к онлайн-задачам скоростной съёмки, то существуют следующие приложения
- Триггер по изображению (Image Trigger)
- Онлайн проверка однородности освещения с высоким временным разрешением
- Распознавание положения линии лазерного осветителя
Триггер по изображению позволяет определить момент появления нового движущегося объекта на неподвижном фоне. Для этого всё время (для каждого кадра) вычисляется гистограмма текущего кадра и она остаётся неизменной, пока в области съёмки не появится новый объект. При появлении нового объекта гистограмма изменяется и по степени изменения гистограммы можно идентифицировать движущийся объект в кадре. Это необходимо для систем скоростной съёмки, когда нет другого способа синхронизации, т.е. определения момента времени для начала видеозаписи (обычно запись нужно начинать в момент появления движущегося объекта в кадре). Для того, чтобы не пропустить момент начала, данные пишут в кольцевой буфер памяти, поэтому при получении информации о появлении объекта в кадре, необходимо захватить несколько предыдущих кадров из памяти, чтобы учесть латентность при передаче данных из видеокамеры в компьютер и в обратном направлении.
Алгоритм триггера по изображению может быть более сложным - можно определять гистограмму не для всего кадра, а для его части. Также можно использовать дополнительные критерии для изменения гистограмм, учитывающие специфику объекта, который должен появиться в кадре.
Библиотека по расчету гистограмм (монохромные изображения с разрешением 8 бит)
- Вычисление гистограммы для изображения произвольного размера.
- Триггер по яркости. Выше/ниже порога по яркости. В параметрах также задаётся минимальное количество пикселов по которому триггер сработает.
- Функция накопления спектра фона с возможностью его обнуления.
- Функция сравнения гистограмм текущей картинки и накопленных данных. Триггер срабатывает на изменение заданного количества (задаётся в параметрах) линий как в плюс, так и в минус.
Результаты по расчету гистограмм на GPU
Условия теста: используется монохромное изображение с разрешением 1280 х 1024, 8 бит. Время обработки одного кадра, включает в себя копирование из оперативной памяти компьютера в память видеокарты, расчёты и копирование результатов в память компьютера.
Для видеокарты Nvidia GeForce GTX 580 (512 ядер, 1536 МБайт GDDR5, технология Fermi, CC = 2.0) результаты вычислений 8-битной гистограммы (256-bin) дают пропускную способность порядка 60 ГБайт в секунду для кадра 1280х1024 (только расчёты, без учёта загрузки данных в видеокарту). Этот результат значительно превышает скорость обмена данными между памятью CPU и GPU. Таким образом, производительность алгоритма вычисления гистограммы ограничена скоростью загрузки данных из оперативной памяти компьютера в видеокарту, а не самими расчётами гистограммы, поэтому триггер по изображению может обрабатывать видеопоток с разрешением 1280х1024 и частотой до 50000 кадров в секунду, что на порядки превышает пропускную способность самых быстрых видеокамер. Эту частоту кадров можно увеличить, если совместить расчёты с получением очередного кадра. Кроме того, для видеокарт с технологией Fermi производительность расчёта гистограмм теперь не зависит от исходных данных, как это было ранее для видеокарт предыдущего поколения.
Для тестового массива данных размером 143 МБайт скорость расчёта гистограммы 256-bin получается 74 ГБайт/с, а для гистограммы 64-bin мы получили производительность 110 ГБайт/с.
Полученные результаты говорят о том, что функция расчёта гистограмм при обработке изображений на видеокарте выполняется исключительно быстро. Это, в частности, очень важно при сжатии изображений для построения таблиц кодирования.
|