LXF105:Манипулируем фото

Материал из Linuxformat.

Перейти к: навигация, поиск
Фотография: Программы, советы и технологии цифровой фотографии

Содержание

Фотография: Linux-студия

Фотография
ЧАСТЬ 4: В последней статье серии, Дейл Стрикленд-Кларк раскрывает секреты применения командной строки для обработки изображений и вводит нас в чудесный мир HDR.

Что-о? Обработка изображений из командной строки? Да вы в своем уме? Ведь так ни настроить цветовой баланс, ни затереть ненужное, ни кадрировать изображение – его же не видно на экране! Что ж – всё правда; но есть и иные, весьма общие изменения, которые фотографам надо вносить в свои снимки, причём сразу во множество.. А командная строка Linux не теряет скорости и гибкости, с какими файлами ни работай; и на сей раз они будут графическими. На данном уроке мы рассмотрим, как фотографы решают самые частые задачи с помощью оболочки, а затем, в порядке финального аккорда, создадим изображение HDR (high dynamic range – высокий динамический диапазон) из четырех фотографий, снятых обычной цифровой камерой.

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

Exiftool

Швейцарский нож для работы с данными Exif – утилита exiftool. Если вы хотите просмотреть всю информацию из Exif, связанную с изображением, просто скомандуйте:

> exiftool imgp4515.pef

(PEF – формат Pentax RAW, но с тем же успехом можно указать JPEG или любой другой из массы поддерживаемых форматов.) Как правило, это даст вам более 100 строк информации, сохраняемой с изображением; она выводится просто в виде пар item : value [объект : значение] в каждой строке. Начало будет примерно таким:

 ExifTool Version Number                       : 6.90
 File Name                                     : imgp4515.pef
 Directory                                     :.
 File Size                                     : 13 MB
 File Modification Date/Time                   : 2008:02:16 15:47:08
 File Type                                     PEF
 MIME Type                                     : image/x-raw
 Image Width                                   : 3040
 Image Height                                  : 2024
...

Если вам нужны всего несколько конкретных объектов, можете определить их как аргументы, удалив пробелы из названий и набрав последние маленькими буквами.

 > exiftool -exposuretime -aperture imgp4515.pef
 Exposure Time : 1/350
 Aperture : 8.0
 >

[Exposure Time – выдержка, Aperture – диафрагма.] Чтобы добавить в файл собственные ключевые слова, используйте опцию -keywords, которую придется повторять для каждого нового ключевого слова.

 > exiftool -keywords=star -keywords=pub -keywords=hdr
 imgp4515.pef
 1 image files updated
 >

Можно избежать этой нудной работы, использовав функцию Bash под названием ‘brace expansion’ [раскрытие скобок]. Следующая команда полностью эквивалентна предыдущей, а части вне скобок повторяются для каждого перечисленного слова.

 exiftool -keywords={star,pub,hdr} imgp4515.pef
 1 image files updated
 >

Чтобы убедиться, что скобки раскрыты правильно, поставьте перед всей командой префикс echo, и Bash будет не выполнять команду, а печатать ее:

 echo exiftool -keywords={star,pub,hdr} imgp4515.pef
 exiftool -keywords=star -keywords=pub -keywords=hdr imgp4515.
 pef
 >

Помимо ключевых слов, можно добавлять или обновлять другие данные – например, место съемки и уведомление об авторских правах:

 exiftool -copyright=”(C) 2008 Dale Strickland-Clark” -
 location=Berkshire imgp4515.pef
 1 image files updated
 >

Для вывода полного списка используйте опцию -list. Опция -listw выведет поля, доступные для записи.

По значению Exif можно также выбирать файлы для обработки. Вот как применить команду ufraw сразу ко всем изображениям с ключевым словом ‘pub’:

 > exiftool -q -p ‘ufraw “$filename”’ -if ‘$keywords =~ /\bpub\b/’  *.pef | bash -
 >

Для каждого PEF-файла в текущей директории, удовлетворяющего условию в опции -if, выведется строка, определенная опцией -p. Мы применяем регулярное следует выражение Perl, которое проверяет, имеется ли в ключевых словах слово ‘pub’ (обрамленное с обеих сторон небуквенным символом – \b). Строка в -p – это команда ufraw, за которой следует имя файла, соответствующего условию. Команды передаются в оболочку Bash и выполняются. Опция -q подавляет лишние информационные сообщения из exiftool.

Здесь понадобится знание и тэгов Exif, и регулярных выражений Perl, и синтаксиса Bash и exiftool; но когда вы все это освоите, в вашем распоряжении окажется потрясающе мощный инструмент.

Редактируем, не прикладая рук

Многие читатели знакомы с редактированием изображений с помощью мыши или графического планшета. В числе преимуществ данных способов – немедленная реакция на ваши действия; а недостаток тот, что рутинные действия плохо поддаются автоматизации. Некоторые задачи куда проще передать компьютеру, и тут на помощь приходит ImageMagick – набор команд для работы с изображениями. В отличие от exiftool, работающей с метаданными, ImageMagick работает с самой картинкой. Он может читать и записывать десятки файловых форматов, и является самым быстрым способом сделать самую разную работу.

Вот самые полезные команды в этом пакете:

Скорая помощь

У ImageMagick – сотни опций и бесконечное количество способов скомбинировать их, так что мы может только лишь слегка ковырнуть по поверхности. Вы сможете найти больше информации на http://www.imagemagick.org.

  • convert Изменяет одно или более изображений и создает новые. Настоящая рабочая лошадка.
  • display Выводит на экран изображение или их последовательность.
  • identify Выводит данные о формате изображения, его размере и структуре
  • mogrify Изменяет одно или более изображений и заменяет исходные изображения на то, что получилось в результате.
  • montage Объединяет несколько изображений в одно.

Здесь мы используем команду convert, чтобы создать миниатюрное изображение JPEG шириной 200 пикселей из более крупного изображения PPM. Высота будет настроена автоматически, чтобы сохранить пропорции оригинала.

> convert imgp4515.ppm -resize 200 imgp4515.jpg
>

Если вы хотите создать миниатюрные копии многих изображений, можете включить команду convert в небольшой скрипт Bash:

mkdir thumbs
for f in *.ppm; do
  convert $f -resize 200 thumbs/${f%%ppm}jpg
done

Мы перебираем все файлы, заканчивающиеся на .ppm, в текущей директории; Их имена по очереди присваиваются переменной f, подставляемой в команду convert. Здесь полезно приметить способ задания имени файлу-результату – с использованием замещения Bash. %% внутри скобок означает: «если замещенное значение f заканчивается на ppm, удалить эти символы». То есть мы удаляем ppm и заменяем на jpg.

Каждая опция границы, используемая с инструментом convert, применяется к результату предыдущей, и важно расположить их в правильном порядке.

Еще один способ применить convert к нескольким файлам – используя exiftool, создать список, над которым предстоит поработать, и перенаправить его в цикл Bash. Здесь мы используем измененную версию ранее использованной команды:

exiftool -q -p ‘”$filename”’ -if ‘$keywords =~ /\bpub\b/’ *.jpg |
while read f; do echo $f; convert $f -resize 200 thumbs/$f; done

Результат работы exiftool – список имен всех обнаруженных файлов, которые соответствуют условию. Он передается в цикл while, где каждое имя по очереди присваивается переменной f. (В качестве индикатора выполнения этого процесса, мы добавили echo.) Далее следует convert, создающий миниатюрные изображения. Convert становится намного интереснее, когда вы нанизывааете на него последовательность опций. Используем опцию border несколько раз, чтобы добавить элегантную рамку:

> convert imgp2870.jpg -resize 1000 -border 10 -bordercolor black
-border 2 -bordercolor white -border 20 borders.jpg

Мы можем также использовать convert, чтобы сделать подпись под изображением:

Как видите, опция -draw ImageMagick умеет еще и делать подписи к изображениям.

> convert imgp2954.jpg -resize x1000 -border 10 -bordercolor
black -border 2 -bordercolor white -border 60 -pointsize 30 -draw
“gravity south text 0,20 \”The Spinnaker Portsmouth\”” titled.jpg

Опция -draw добавляет дополнительный слой над обычными командами обработки, позволяя вам нарисовать различные линии и фигуры поверх изображения. Здесь мы воспользовались ею для вставки текста.

Фотографы-профессионалы часто любят указывать с помощью водяных знаков свое авторство на снимках, отправляемых куда-либо. Это выполняется следующим образом:

> convert -size 600x50 xc:none -fill grey -font bitstream-charteritalic
-pointsize 40 -draw “gravity center text 0,0 \”(c) 2008 Dale
Strickland-Clark\”” miff: |
> composite -watermark 30% -gravity south - imgp2932s.jpg watermarked.jpg

А вот и водяные знаки

Здесь использованы две связанные команды. Первая создает изображение водяного знака с нуля, начиная с холста размером 600x50 пикселей с прозрачным фоном и серым текстом. Её результат поступает на вторую команду, которая и накладывает водяной знак на изображение.

Такой подход, конечно, примитивен, и это заметно по результату – сглаживание [anti-aliasing] на прозрачном фоне не работает, и символы по краям выглядят грубовато; ну, не беда, ведь это всего лишь водяной знак.

Черное и белое

Есть два способа конвертировать цветное изображение в монохромное: один – использовать градации серого (черно-белое изображение), а другой – особым образом добавить флуктуации [dithering] (получается нечто вроде факс-копии).

> convert imgp2932s.jpg -colorspace gray de-saturated.jpg
> convert imgp2932s.jpg -monochrome faxlike.jpg

В очередном примере мы соединим команды convert и montage, чтобы получить раскладку всех изображений в директории:

> convert *.jpg -resize 1000x1000 -gravity center -crop
500x500+0+0 miff: | montage -geometry +0+0 - montage.jpg

Команда convert перебирает все изображения в текущей директории, масштабируя их так, чтобы ни один из их размеров не превышал 1000. Опция crop, под управлением опции gravity, вырезает из середины квадрат размером 500 пикселей. Затем каждое изображение передается на следующий этап: объединение их всех вместе в финальный монтаж. Опция geometry обеспечивает отсутствие границ между изображениями.

Если у вас ImageMagick версии 6 или старше, вы сможете проделать эту работу только командой montage, без convert:

montage *.jpg -resize 1000x1000 -gravity center -crop
500x500+0+0 -geometry +0+0 montage.jpg

Изображения HDR

Человеческий глаз способен охватить гораздо более широкий диапазон освещенности, чем фотоаппарат. При ярком солнце вы легко разглядите мелкие детали предметов, находящихся в тени, продолжая воспринимать также и освещенные участки – например, облака; а вот настроив фотоаппарат так, чтобы зафиксировать картину в тени, вы получите изображение неба выцветшим и белесым, тогда как настройка на облака приведет к полной черноте в тени. Снимая в режимe RAW, вы расширяете динамический диапазон до пределов, сравнимых с JPEG, но до возможностей глаза ему по-прежнему далеко. Это ограничение можно обойти, создав изображение с HDR (high dynamic range – высокий динамический диапазон). Тут потребуется терпение, но результаты того стоят.

Скорая помощь

CinePaint может читать и редактировать HDR-изображения, а у Krita имеется ограниченная поддержка HDR в версии 1.6, но в версии 2.0 (ее выход ожидается позднее в этом году) поддержка будет улучшена и включит регулятор выдержки.

Чтобы сохранить данные HDR, нам потребуется новый, расширенный файловый формат изображения. Знакомые нам форматы были разработаны с учетом несовершенств современного оборудования. JPEG – формат низкого динамического диапазона (low dynamic range, LDR) – использует восемь бит на канал, предоставляя только 256 оттенков красного, зеленого и синего. HDR-изображение сохраняется в специальном формате, использующем для представления каждого цветового канала числа с плавающей запятой, что значительно улучшает вместимость по сравнению с 8-битными форматами. HDR-изображение создается как комбинация нескольких LDR-изображений одного и того же вида, снятых с разной выдержкой: таким образом мы обеспечиваем, чтобы каждой части сцены достались подходящие к ней настройки.

Но создание HDR-изображения – еще не вся сказка. Изображениям с высоким динамическим диапазоном требуются специальные инструменты просмотра и обработки. Чтобы диапазон изображения пришел в соответствие с диапазоном вашего монитора, его надо сжать, то есть свести поближе крайние значения освещенности изображения, пока они не «уместятся» в шкалу монитора. В итоге получится изображение, на котором видны детали при всех значениях освещенности, и ничего не теряется из-за недостаточной или чрезмерной выдержки.

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

Отсняв серию снимков, мы загружаем их в компьютер и запускаем нашу программу, qtpfsgui. Это – часть пакета PFSTools, включающего программы обработки изображений HDR. Возможно, в вашем дистрибутиве имеется пакет pfstools, но если вы затрудняетесь его найти, скачайте его с http://www.mpi-inf.mpg.de/resources/pfstools – или просто установите DVD этого номера в привод и заберите его из раздела Рабочий стол.

Mожет покажется странным начинать с нескольких LDR-изображений, генерировать HDR-изображение и снова превращать его в LDR-изображение. Но HDR-изображение – самое достоверное представление объекта, которое только возможно, а в LDR-изображение мы его переводим только потому, что современное оборудование не справляется с HDR; чтобы сжать детали HDR до границ пространства LDR, требуется преобразование тонов. Желающие поглядеть на HDR- изображения в большом количестве найдут их на http://www.flickr.com.

Шаг за шагом: Создание HDR-изображения

Скорая помощь

Вы можете часами изучать шкалу оттенков [tone mapper] qtpfsgui, но ползунки функций не работают в реальном времени, поэтому вам придется настраивать одну из них, нажимать Apply и смотреть, что получилось. Вы можете сравнивать изображения в окне, пока у вас не получится желаемое; тогда запустите его в полный размер и сохраните.

Шаг 1

  • 1 Загрузите фотографии

Это – четыре фотографии, с которых мы начнем. Все они сделаны на F8 с выдержкой 1/180, 1/350, 1/500 и 1/750 секунды. Запустите qtpfsgui, нажмите на New HDR, затем – на Load Images. Выберите отснятые изображения, затем нажмите Next.

Шаг 2

  • 2 Обработка и редактирование

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

Шаг 3

  • 3 Выберите профиль

Этот шаг задает параметры для завершающей фазы творческого процесса. Три поля ввода – для экспертов, чтобы настроить параметры движка, но остальные могут выбрать профиль из всплывающего меню. У нас наилучшие результаты получились с профилем 2.

Шаг 4

  • 4 Финальный продукт

Если вы хотите вернуться и что-то изменить, вам придется начать заново, так что не помешает в ходе процесса вести записи. Чтобы создать сжатое LDR-изображение, например, JPEG, из HDR-изображения, нажмите на кнопку Tonemap The HDR.

Свободу фотографиям!

Этим мы завершаем наш обзор инструментов для работы с фотографией в Linux. Надеюсь, теперь вы убедились: нет ничего такого, что можно сделать с помощью проприетарных инструментов и нельзя сделать – с тем же успехом, но с большей выгодой для вашего кармана – с помощью Linux. LXF

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию