Оптимизация HDR алгоритма пост-обработки изображений

Создать новую статью

retweet
29.08.2010 10:00


Автор: Ведерников Сергей Александрович, студент 5-го курса факультета Информационных Технологий НИЯУ МИФИ СарФТИ
Менеджер: Александр Батушин
Ментор: Дмитрий Будников

Аннотация

Целью данного проекта было программирование алгоритма HDR пост-обработки входного изображения на языке программирования OpenCL, использующегося для гетерогенных вычислений.

Введение

Зимой 2010-го я заинтересовался HDR-фотографиями. Мое внимание привлекло то, что фотографии были насыщенными, яркими и передавали все детали сцены. Позже я узнал, что это фотографии с расширенным динамическим диапазоном, что следует из названия. На помощь пришли сайты Google, Wikipedia :)

В интернете было множество обоев на рабочий стол и просто фоток. С тех пор меня заинтересовала эта тема.

HDR Photo

Пример HDR-фотографии, автор - ~newintenz, взято с сайта deviantart.com

Однажды в апреле на мой email пришло информационное письмо о Летней Школе Интел. Просмотрев список тем, что предлагались, я увидел знакомые три буквы :) И угадайте, что это было? HDR!

И, загоревшись идеей, скачал бланк анкеты и начал заполнять. Ни на что не рассчитывал, в любом случае руководствовался принципом - "лучше что-то сделать, и потом жалеть, чем вообще не делать". Жалеть ни о чем не пришлось! :)

В начале июля мне позвонили из Нижегородского офиса Интел и задавали вопросы, почему я выбрал эту тему, чем занимался до этого.

Буквально через 3 дня я получил письмо, о том, что я принят в Летнюю Школу! Сказать, что у меня был шок - ничего не сказать.

Отдел, в который я попал, занимался графикой. Творческая команда, новейшее оборудование, интересные задачи - все это произвело на меня огромное впечатление!

А вы, когда были студентом, о чем мечтали? ;)

Описание

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

Само изображение хранилось как набор float-чисел для RGBA-компонент изображения.

Формат хранения данных LDR и HDR

Приложение состояло из 2-х частей: Host и OpenCL-приложений. Host-приложение принимало изображение и передавало OpenCL-приложению. После чего выполнялись преобразования согласно алгоритму, и обработанное изображение передавалось обратно на хост.

Input & Output (with post-processing effects) HDR images

Сверху вы видите пример HDR-изображений. Слева - до обработки. Справа - после.

После чего приложение было запущено и протестировано на машинах с различными CPU и GPU.

Стоит отметить, что платформа OpenCL поддерживает гетерогенные архитектуры, в том числе состоящие из различного числа CPU и GPU устройств, и приложение, написанное с использованием OpenCL, может быть хорошо портировано на различные платформы.

Инструменты

  • Microsoft Visual Studio 2008
  • Intel C++ Compiler 11
  • Intel OpenCL Compiler
  • Мозг :)

Результаты работы

Код был успешно портирован, при переносе использовалась векторизация, а также особенности платформы OpenCL.

По объективным причинам я не могу раскрывать подробности работы алгоритма, а также его оптимизации, как и результаты, которые я получил.

Единственное, что могу сказать - то, что с задачей я успешно справился и получил огромный опыт работы в области программирования post-processing обработки изображений.

В процессе работы над проектом были и трудности. Например, первые три недели было тяжело привыкать к такому большому объему информации! Еще стоит отметить уровень знаний. Я понял, какая большая пропасть стоит между знаниями, которые дают в университете, и здесь, в Intel, в реальных условиях в реальном проекте. Так что мне пришлось подтягивать свой уровень в программировании, что я считаю безусловным плюсом.

За это лето я участвовал в разработке продукта, который пойдет в производство, и очень приятно знать, что то, что я делал - делал не зря.

Заключение и впечатления!

Я привел описание своей задачи, результаты и технические особенности проекта, которым я занимался. Хочу сказать, что лето в Интел - это не только работа. Это множество новых друзей, отличное место для развития в плане специальности, это дружеская, и, как я уже отметил выше, творческая команда :)

У нас было множество семинаров и вебинаров, посещая которые я, как будущий специалист, повысил свой уровень и приобрел полезные навыки. Сейчас, осенью, когда моя стажировка в Intel уже закончилась, многое из того, чему я научился летом, пригодилось мне уже в собственных проектах.

Еще до того, как я попал в Летнюю Школу, меня волновали многие технические вопросы касательно специальности, на которые я не мог найти ответа ни в интернете, ни в институте. После Летней Школы эти вопросы как-то сами отпали :)

Теперь, я уже знаю, в каком направлении специализироваться и дальше развиваться. Для меня это направление - компьютерная графика и спецэффекты.

Неформальная часть Летней Школы была также приятной - я ездил на экскурсию в Городец, был в музее самоваров, музее русского народного искусства, был в различных красивых местах Нижнего Новгорода, познакомился с интересными людьми.

В Нижегородском офисе в конце июля проводились студенческие семинары (летние школьники Питера, Москвы и Сарова тоже приезжали), где мы узнали, чем занимаются студенты и аспиранты в своих ВУЗах. Было очень интересно посмотреть на их разработки и достижения. Все-таки как никак - обмен опытом!

Мне также удалось поучаствовать в олимпиаде по английскому языку среди летних школьников и занять 3-е место. Понял, что английский очень нужен и важен. И что, пожалуй, главное - важен не объем знаний, а то, как мы умеем ими пользоваться.

Еще я начал заниматься тем, чем раньше никогда не занимался. Например - латино-американскими танцами и виндсерфингом! ;)

В серф-лагере на Горьковском водохранилище.

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

Летом в Intel я поднял свой уровень программирования на C/C++/OpenCL, научился работать с компилятором Intel и отлаживать приложения, стал лучше понимать, как правильно писать код, поднял свой навык владения английским языком и научился грамотно проектировать приложения, чтобы потом не сидеть в дебаге по уйме часов.

Хочу сказать огромное спасибо своему ментору - Дмитрию Будникову и менеджеру - Александру Батушину. На протяжении всей практики они активно помогали мне с проектом.