Pull to refresh

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

Reading time5 min
Views1.9K
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 стереопара) получить псевдообъемные анаглифные изображения (для наиболее распространенных очков с красно/сине-зелеными фильтрами), она может быть полезна и тем, кто хочет создать анаглиф из двух независимых фотографий. Несмотря на то, что статья на подобную тематику уже была, я использую слегка другой технологический подход для решения задачи — с небольшим теоретическим обоснованием.
Tags:
Hubs:
Total votes 4: ↑4 and ↓0+4
Comments1

Articles