Часто требуется не просто обработать или улучшить изображение, но
применить последовательность операций к большому количеству
изображений. В этом нам поможет консольный графический редактор
ImageMagick.
Установка и первые шаги
Устанавливается черзвычайно просто:apt-get install imagemagick
и все. Но дальше меня лично ждал сюрприз: а где, собственно, программа? На самом деле этот пакет содержит несколько программ: display, animate, identify, convert, montage, mogrify и composite. Здесь я приведу свой скромный опыт работы с основной программой пакета - всемогущей convert.
С
пакетом ImageMagick (во всяком случае в Дебиане) поставляется могучий
мануал в PDF на 320 страницах - весьма толковое руководство, но на
английском. До его завершения весьма далеко: описаны только опции
командной строки, а остальное просто набросано.
Консольный графический редактор
У многих моих подоконных товарищей такое словосочетание вызывает когнитивный диссонанс: как графический редактор может быть консольным!?
Может, и бывает чрезвычайно полезен, когда нужно обработать не одно, а
множество изображений, лежащих к тому же в разных каталогах.
Естественно, в альтернативной среде приняты наиболее топорные средства
решения проблем: тыкать и выделять мышкой, и для каждого файла
повторять процедуру. Самые продвинутые слышали об Action в фотошопе, но
и это средство - не панацея (а кроме того, требует немалого времени на
отладку комбинации действий).
Ниже - часть используемых мной команд обработки изображений, разбитых по категориям (насколько это возможно).
Операции с цветом
Имеется в виду изменение цветовых пространств: RGB/CMYK, grayscale и BW. Все, что связано с изменением цветов.
Перевод в оттенки серого
-colorspace GRAYНапример: convert -colorspace GRAY tux.jpg tuxConvertGray.jpg
На
самом деле ключ colorspace позволяет переводить изображения между
разными цветовыми пространствами: GRAY, OHTA, RGB, Transparent, XYZ,
YCbCr, YIQ, YPbPr, YUV или CMYK.
Перевод в черно-белое изображение
Здесь
есть несколько методов: бинаризация по порогу (threshold), с диффузией
ошибки (метод Floyd/Steinberg, error diffusion) и локальный адаптивный
порог.
Бинаризация с диффузией ошибки выполняется ключом:
-dither
-monochrome
Вместе с этой опцией следует применять ключи -colors или -monochrome для определения цветового пространства, к которому применяется преобразование.
Бинаризация по порогу делается при помощи ключа:
-threshold число
где число - значение порога.Пример: convert -threshold 128 1.png 2.png
Локальная адаптивная бинаризация по порогу производится при помощи следующего параметра:
Здесь имеется в виду область размером ШиринаxДлина,
в пределах которой происходит порог. Смещение определяет степень
отклонения значений пикселей (в процентах). Данные параметры стоит
подбирать с визуальным контролем (запустить еще и просмотрщик
изображений).
Постеризация
Уменьшение количества цветов на изображении:
-posterize числооттенков
до числаоттенков приводит к сокращению и "огрублению" оттенков изображения.
Инвертирование
Чтобы инвертировать изображение (цветное или полутоновое), надо указать ключ:
-negate
Действует для цветых и полутоновых изображений.
Изменение разрядности изображения
Чтобы перевести 16-битное изображение в 8-битное, нужно воспользоваться ключом:
-depth 8
Кто сказал, что в Линукс нельзя работать с 16-битным цветом?
Операции с освещенностью
Все, что касается освещенности пикселей, без привязки к цветовому пространству: гамма-коррекция, контрастирование.
Повышение / понижение контраста
Изменение контрастности изображения достигается:
-contrast
+contrast
При этом -contrast повышает контрастность, а + понижает.Пример: convert -contrast tux.jpg tuxConvertedContrast-50.jpg
Эквализация гистограммы
Автоматическое контрастирование изображения:
-equalize
Производит
автоматическую эквализацию гистограммы - алгоритм изменяет гистограмму
изображения так, чтобы она была равномерна по светам и теням.
Нормализация
Для того, чтобы значения пикселей изображения занимали весь диапазон, следует указать ключ:
-normalize
Этим достигается повышение контраста на изображении.
Гамма-коррекция
Для гамма-коррекции изображения следует указать ключ:
-gamma значение
Значения
меньшие 1.0 делают изображение темнее, значения более 1.0 осветляют
изображение. Наиболее часто применяемые значения лежат в пределах от
0.8 до 2.3
Можно применять разные значения гамма-коррекции для разных цветовых каналов, например так: -gamma 1.7/2.3/1.2
Уровни
Более тонкая настройка контрастности изображения при помощи уровней:
-level точкачерного{,точкабелого}{%}{,значениегаммакоррекции}
можно указывать как в абсоютных величинах, например -level 10,65000 так и в процентах -level 2%,98%
По умолчанию гамма стоит равная 1.0 (то есть без гамма-коррекции), но ее можно задать, например, так -level 2%,98%,0.8
Геометрические преобразования
Здесь
я приведу несколько полезных команд, которые позволяют менять масштаб
изображения или кадрировать его. Безусловно, вслепую определить точные
координаты очень сложно, но ведь никто не воспрещает использовать
консольные и графические утилиты вместе?
Изменить размер изображения
Можно задать точный размер в пикселях:
-resize MMMxNNN
изменить размер изображения на MMMxNNN. При этом плотность изображения сохраняется изначальной.
Можно задать в процентах:
-resize 200%
то есть увелилить в 2 раза.
Более быстрый, но грубый алгоритм маштабирования:
-scale число%
масштабирует изображение в заданном процентном соотношении.
Кадрировать изображение
Для кадрирования изображения следует использовать:
-crop ШиринаxВысота{+-}<ИсходноеХ>{+-}<ИсходноеY>{%}
Имеется в виду, что требуется вырезать область ШиринахВысота, причем область смещена на значение ИсходноеХ и ИсходноеY
пикселей. Значен