Автоматизирование преобразования фотографий из формата стереопары в анаглиф

9 Окт
2011

glasses glasses

Введение


Все началось с того, что мною были куплены анаглифные очки. Как только они попали в руки, сразу было решено проверить их общие возможности. Просто путешествовать по интернету и искать фотографии не так интересно, поэтому, скрепя сердце, пришлось признать за любимой операционной системой существенный недостаток (отсутствие драйверов для добавления в игры режима вывода в анаглифе) и загрузить давно заброшенный Windows. Так как я счастливый обладатель видеокарточки с чипсетом от Nvidia, то используя несложный трюк (можно загрузить более свежие драйвера, также для владельцев 64-битных систем надо подредактировать реестр) я открыл для себя потрясающий мир псевдообъемных игр. Понятное дело, что ощущения не совсем те, как если бы использовались очки с ЖК-затворками, но ведь и порядок затраченных денег совсем другой. (Кстати, для тех, у кого более старые видеокарты или чипсеты других производителей, есть замечательная бесплатная утилита, позволяющая делать то же самое. Правда, по моему субъективному мнению, качество картинки на моей видеокарточке у нее несколько хуже). Так как цель данной статьи вовсе не реклама разных технологий псевдообъемного изображения, то я не буду подробно рассказывать о своих впечатлениях и показывать скриншоты игр (тем более, те, у кого есть очки, и так прекрасно это знают, а у кого их нет — не смогут и оценить). Но то, что меня огорчило — что я не могу сделать себе скриншот на память. То есть сделать я его могу (благо Nvidia заботливо предусмотрела недокументированную комбинацию «alt»+«F1»), но вот формат его вовсе не в виде анаглифа, а в виде стереопары (.jps).

Создав достаточное количество скриншотов, я задался целью конвертировать их в удобный для просмотра формат. Сначала я скачал и попробовал несколько бесплатных утилит, умеющих делать это в пакетном режиме. Но меня сразу смутило, что картинка слегка другая. Во-первых, сразу менялась цветопередача (не сильно, но мне было заметно), а во-вторых, появлялось дополнительное паразитное дублирование объектов, которого не было в момент игры.
Возможно, какие-то из программ и дают ожидаемое качество, но я решил не тратить время на дальнейшие поиски, а выполнить эту задачу самому.

Создание действия


Сразу хочу отметить, что я человек ленивый, вручную конвертировать все свои скриншоты не собираюсь. Поэтому, решил записать действия в виде «actions» для дальнейшей пакетной обработки (кого заинтересует готовый atn файл — ссылка на него в конце статьи).
Файл стереоизображения представляет из себя обычный jpeg формат, в котором изображения для правого и левого глаза помещены рядом.
screenshot
Создаваемый сценарий должен уметь автоматически изменять размер файла и применять необходимые преобразования к слоям, чтобы получить качественную анаглифическую картинку. Поэтапным созданием такого сценария мы сейчас и займемся.
Надо оговориться, что несмотря на то, что jps — это «чистый» jpeg формат, Photoshop не распознает его из-за «неправильного» расширения. Итак, для начала придется воспользоваться вашим любимым пакетным переименовывателем файлов, чтобы поменять расширения на .jpg или .jpeg.
Теперь все готово для создания нашего сценария действий.
  1. Открываем один из переименованных файлов в Photoshop.
  2. Отображаем список «actions» (Меню «Window«->»Actions» [«Окно«->»Действия«]) и выбираем создать новое действие
    actions
  3. Задаем для него подходящее имя (я выбрал jps2anaglyph)
  4. Нажимаем кнопку «begin recording» («начать запись«)
  5. Убеждаемся, что отображается палитра слоев. Если нет — нажимаем «F7» или включаем в меню «Window«->»Layers» («Окно«->»Слои«).
    layers
  6. Двойной щелчек мышкой по фоновому слою позволит нам превратить его в обычный. Задаем ему имя «right«.
    layers
  7. Правая клавиша на слое — «Duplicate Layer» («Создать дубликат слоя«) и задаем имя новому слою «left«
    two layers
  8. Теперь небольшой трюк — убеждаемся, что текущий выбранный слой у нас «left«, идем в меню «Edit«->»Transform«->»Flip Horizontal» («Правка«->»Трансофрмирование«->»Отразить по горизонтали«).
  9. Отрезаем «лишнюю» половину изображения: «Image«->»Canvas Size» («Изображение«->»Размер Полотна«). Выбираем из списка проценты, задаем ширину 50, высоту оставляем как есть (100), якорь ставим в левое центральное положение. (Photoshop нас предупредит, что мы обрезаем размер рисунка, но мы с этим согласимся).
    canvas size
  10. После этого приводим в соответствие размер полотна и размер слоев — для этого воспользуемся пунктом меню «Image«->»Trim» («Изображение«->»Тримминг«). Выбираем обрезать по прозрачным пикселям, со всех сторон.
    image
  11. Ну и завершаем наш первый маленький трюк: с выделенным слоем «left» опять выполняем «Edit«->»Transform«->»Flip Horizontal» («Правка«->»Трансофрмирование«->»Отразить по горизонтали«). Вот мы и совместили изображение для левого и правого глаза в одной фотографии. Осталось немного волшебства, и у плоской картинки появится «объем».
  12. Второй маленький трюк. В ходе экспериментов над потерянными цветами, я пришел к выводу, что недостаточно просто взять для левого глаза красную компоненту, а для правого — сине-зеленую. Если воспользоваться общими соображениями, то в правый глаз при белой заливке попадает в два раза больше света (синяя компонента плюс зеленая), чем в левый (только красная). Чтобы как-то это компенсировать, я решил просто увеличивать яркость изображения для левого глаза. Чтобы не пересвечивать ярких областей изображения, луче воспольоваться регулированием не яркости, а гаммы. Мне лично понравилось значение 1,2, но тут вы можете выбрать то, что больше подходит и нравится вам. Итак, выделенный слой по прежнему «left«, идем в «Image«->»Adjustment«->»Levels» («Изображение«->»Коррекция«->»Уровни«) и указываем 1,20 в среднем поле ввода (уровень серого).
    Levels
  13. Мы выходим на финишную кривую в создании нашего действия. Хорошо, что этому сопутствует счастливый номер данного пункта. Итак, нужно внимательно и аккуратно выполнить такие действия: выбрать в палитре слоев слой «right«, и убрать галочку с отображения на слое «left«. Это важно!
    layers
  14. Теперь открываем закладку цветовых каналов («Window«->»Channels«), и выбираем для отображения только красный канал (можно вручную, можно при помощи кобминации клавиш «ctrl«+»3» [«command«+»3» на Mac OS]).
    channels
  15. Идем в пункт меню «Image» («Изображение«) и выбираем команду «Apply Image» («Внешний канал«). В качестве исходного слоя выбираем «left«, в качестве канала — «красный» («red«), тип смешивания — «обычный» («normal«). Применяем, и мы уже почти у цели!
    Apply Image
  16. Включаем для отображения все цветовые каналы — изображение готово. Осталось его сохранить и закрыть, после чего остановить запись действий.

Теперь можно пользоваться Adobe Bridge: выделяем необходимые файлы, идем в «Tools«->»Photoshop«->»Batch…», выбираем наше действие, переопределяем путь сохранения — и одним нажатием клавиши дарим объем всем плоским файлам…
screenshot
Для тех, кому лень делать это самому, вот уже готовый файл действий.
Спасибо за внимание, надеюсь, кому-то эта статья показалась полезной.

Послесловие


Хоть статья в целом о том, как из набора изображений формата jps (jpeg стереопара) получить псевдообъемные анаглифные изображения (для наиболее распространенных очков с красно/сине-зелеными фильтрами), она может быть полезна и тем, кто хочет создать анаглиф из двух независимых фотографий. Несмотря на то, что статья на подобную тематику уже была, я использую слегка другой технологический подход для решения задачи — с небольшим теоретическим обоснованием.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх