КулЛиб - Классная библиотека! Скачать книги бесплатно 

Руководство пользователя ImageMagick v. 7.1.0 [Иван Георгиевич Титаренко] (fb2) читать онлайн


 [Настройки текста]  [Cбросить фильтры]
  [Оглавление]

Титаренко Иван Георгиевич. Руководство пользователя ImageMagick v. 7.1.0

Оглавление.


1. Введение.

2. Некоторые важные ссылки.

3. Работа с командной строкой.

4. Команды-утилиты программного пакета ImageMagick.

5. Контроль качества изображений.

6. Формат HDRI.

7. Разрешение изображения.

8. Отладка, оптимизация, вывод информации.

9. Печать изображений.

10. Системные настройки X Windows.

11. Ограничения, синхронизация, разделяемая память.

12. Битность, сжатие, формат изображений.

13. Распространенные форматы.

14. Связанные форматы вывода JPEG.

15. PNG и виртуальный холст.

16. Специальные форматы файлов.

17. Профили и качество изображения.

18. Изменение цветового пространства через профили.

19. Метаданные EXIF.

20. Качество изображения.

21. Свойства изображений.

22. Метки, имя.

23. Интерполяция, виртуальные пиксели.

24. Простые методы интерполяции.

25. Свертка, сдвиг.

26. Пороговая настройка.

27. Другие функции.

28. Автоматический поворот фотографий.

29. Уровни каналов.

30. Таблицы цветов LUT, Hald.

31. Предопределенные фильтры.

32. Гамма-коррекция изображений.

33. Корректировка с помощью гистограммы.

34. Настройка яркости, контраста.

35. Регулировка уровней каналов.

36. Баланс белого, точки цветности.

37. Цветовая дискретизация.

38. Введение в понижение цветности.

39. Раскрашивание, колоризация, цветокоррекция.

40. Цветовое пространство.

41. Черно-белое и монохромное изображение.

42. Слои.

43. Композиция.

44. Методы композиции.

45. Оператор и утилита composite.

46. Методы Дафф-Портера.

47. Специальные методы композиции.

48. Методы эффекта картирования изображений.

49. Математические методы компоновки.

50. Методы композиции освещения.

51. Копирование каналов.

52. Размытие, сглаживание.

53. Резкость, усиление резкости.

54. Удаление шумов, шумоподавление.

55. Добавление шума.

56. Оператор filter.

57. Особенности фильтров масштабирования.

58. Интерполированные фильтры.

59. Фильтры размытия по Гауссу.

60. Другие фильтры типа Гаусса.

61. Профиль изображения.

62. Фильтр размытия: экспертный контроль.

63. Усиленный фильтр Гаусса.

64. Оконные фильтры Sinc и Jinc.

65. Различные оконные фильтры.

66. Фильтры Ланцоша, Катмулла-Рома, Лагранжа.

67. Кубические фильтры.

68. Фильтр Митчелла-Нетравали.

69. Экспертные настройки.

70. Цилиндрические фильтры Jinc.

71. Замыкание фильтров и операторов искажения.

72. Цилиндрический фильтр Ланцоша.

73. Экспертные элементы управления фильтрами.

74. Пиксельная карта.

75. Виртуальный холст.

76. Повороты, смещения изображения.

77. Размер изображения.

78. Методы изменения размера.

79. Изменение размера с гамма-коррекцией.

80. Изменение размера в цветовом пространстве LAB.

81. Другие операторы масштабирования.

82. Биннинг - уменьшение цифрового шума.

83. Масштабирование изображения.

84. Выравнивание, искажение.

85. Искажения с использованием контрольных точек.

86. Cуперсэмплинг или передискретизация.

87. Изменение размера изображений с помощью искажения.

88. Методы искажения.

89. Обрезка изображений.

90. Математические функции.

91. Выражения FX.

92. Язык выражений FX.

93. Морфология.

94. Масштабирование ядра Convolve.

95. Нормализация ядра (автоматическое масштабирование).

96. Размытие изображений (фильтрация нижних частот).

97. Свертки с обнаружением краев (фильтрация верхних частот).

98. Методы морфологии.

99. Базовые встроенные ядра формы.

100. Пользовательские ядра DIY.

101. Основные методы морфологии.

102. Методы разностной морфологии.

103. Краевые эффекты.

104. Клонирование и дублирование изображений.

105. Объединение, работа с последовательностями и списками.

106. Индексы, позиция в списках.

107. Прозрачность, альфа-канал.

108. Маскирование.

109. Графические примитивы.

110. Настройки фона, цвета, геометрии графических примитивов.

111. Рамки и фреймы.

112. Добавление аннотаций к изображению.

113. Работа со шрифтами: настройка шрифтов и рендеринг.

114. Эффекты составных шрифтов.

115. Анимация.

116. Шифрование и дешифрование.

117. Сравнение файлов изображений.

118. Настройка алгоритмов сравнения.

119. Программы dcraw и dcraw_emu.

120. Основные опции dcraw.

121. Восстанавливающие опции.

122. Восстановление, множители и баланс белого.

123. Цветовые опции, баланс белого.

124. Цветовое пространство.

125. Опции интерполяции.

126. О некоторых особенностях алгоритмов интерполяции.

127. Опции вывода.

128. Некоторые опции dcraw_emu.

129. Другие программы пакета LibRaw.

130. Примеры dcraw.

131. Примечания.

132. Лицензия IM.

Введение.

Что такое ImageMagick и почему программа важна не только для программистов, но и для фотографов, специалистов по цветокоррекции, дизайнеров и книгоиздателей.

ImageMagick — набор программ (консольных утилит) и библиотечных функций для чтения и редактирования множества графических форматов. Является свободным и кроссплатформенным программным обеспечением.

Как сообщает Википедия, история разработки ImageMagick начинается в конце 1980-х годов в американской химической компании DuPont, когда перед работающим в ней автором программы Джоном Кристи встала задача по отображению 24-битных изображений на мониторах, поддерживающих отображение только 256 уникальных цветов.

Позже компания DuPont передала авторские права на эту программу компании ImageMagick Studio LLC, и 1 августа 1990 года исходные коды ImageMagick появились в архиве компьютерной сети Usenet.

Сегодня ImageMagick «умеет» работать с 32-битными (с миллионами и миллионами цветов!) файлами огромных размеров, поддерживает сотни цифровых форматов.

Хотя ImageMagick обрабатывает изображения в командной строке, для программы созданы многочисленные «графические интерфейсы», позволяющие визуально (и с помощью привычных «ползунков») настраивать программу и просматривать изображения.

Если использовать язык программистов-разработчиков, программа ImageMagick это «движок» для незаметной, скрытой от пользователя обработки растровых и векторных изображений.

Но не следует думать, будто фотографу или дизайнеру никогда не придется сталкиваться с ImageMagick: эта программа встроена во все популярные социальные сети (в том числе Инстаграм и Фейсбук), а библиотечные функции заимствуют разработчики графических редакторов и других программ, работающих с изображениями. И если вы размещали фотографии в социальных сетях, подготавливали публикации на сайтах или форумах, вы обязательно встречались с программой IM!

ImageMagick также мощный консольный «графический редактор», технически грамотный фотограф может эффективно применять программу на всех стадиях обработки фотографий. В ImageMagick используются очень качественные и современные алгоритмы работы с растровыми и векторными изображениями. Программа позволяет тщательно настраивать процесс редактирования изображений множеством способов на всех этапах, дает пользователю уникальную возможность обработать, например, фотографии, с чрезвычайно высоким качеством, недостижимым для многих графических редакторов.

Конечно, это прежде всего программное обеспечение, рассчитанное на профессионалов. Как всякое профессиональное программное обеспечение, подразумевается, что специалист владеет английским языком на должном уровне. Это не популярная программа Photoshop, снабженная многочисленными подсказками, хорошей документацией, широко обсуждаемая на форумах.

К сожалению, найти русскоязычную документацию на ImageMagick будет сложно — профессионалы, способные работать с библиотекой функций (API) и командной строкой вряд ли уделяют внимание переводу весьма специфической технической документации. Поэтому некоторое время назад я решил создать небольшой справочник по основным функциям ImageMagick в формате электронной книги.

Я познакомился с ImageMagick, когда программировал сайт по истории фотографии: потребовалось улучшить, обработать сотни и тысячи фотографий-иллюстраций. Возникла необходимость повысить резкость, конвертировать фотографии в тот или иной формат, изменить размеры, контраст. Для сайта применялась оболочка на PHP и несколько вспомогательных программ на C - выбор ImageMagick казался очевидным.

(В те годы Photoshop был инструментом художника, тем более не допускал работы с потоками, а программа GIMP развивалась своим особенным, загадочным путем, явно игнорируя командную строку.)

Конечно, начиная работать с ImageMagick, я почувствовал, что это сложная программа. Но я также понял, что если хочу развиваться как фотограф и программист, работать с цифровыми изображениями, потребуется понимать, что такое «цифровая обработка» в командной строке, без привычных меню и «ползунков» Photoshop или GIMP.

ImageMagick не предоставлял удобной и красивой «оболочки», я открывал программу или в терминале, или через вызовы API в скриптах. Честно скажу, сначала я сомневался, что можно эффективно и качественно обрабатывать фотографии в консольной программе, ведь такой подход противоречил общепринятому среди фотографов мнению, будто «фотограф должен всегда видеть результат цифровых преобразований».

Однако уже через неделю после знакомства с волшебной командой «convert» сомнения исчезли: консольная программа прекрасно справляется с фотографиями, конечно, если пользователь знает основные принципы работы с цифровым изображением.

А через какое-то время работы с ImageMagick я неожиданно увидел, что качество моих фотографий немного улучшается. Нет, я не стал лучше фотографировать, но начал лучше понимать, что такое цифровая фотография с точки зрения применяемых алгоритмов и функций.

Но ImageMagick был горьким лекарством и суровым учителем - мне пришлось читать о цветовых пространствах, фильтрах Ланцоша и Лагранжа, «морфологии ядер», других особенностях алгоритмов цифровой графики.

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

Впрочем, это не перевод инструкции к программе, вызываемой командой «-help»: на форуме и официальном сайте ImageMagick доступны глубокие комментарии, замечания и качественная техническая документация  Энтони Тиссена (Anthony Thyssen). Я тщательно изучил его работы, чтобы дополнить текст экспертными сообщениями для понимания программы. Также я пытался включить в текст мнения других авторов, выписки из Википедии, даже форумную переписку.

Чтобы избежать ошибок, я стремился приблизить примеры к примерам со страниц официального сайта, также из "Руководства" Энтони Тиссена. Возможно, некоторые скрипты устарели, как сообщает Энтони, однако это не помешает понять принципы работы программы.

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

Официальная англоязычная документация ImageMagick не структурирована. Статьи располагаются по алфавиту, что затрудняет изучение программного пакета.

Поэтому структура руководства на русском языке создавалась по следующим правилам.

1. Сначала даются общие рекомендации по работе в командной строке, внимание уделяется основным утилитам пакета и синтаксису. Также описываются форматы файлов, настройка системы, оптимизация.

2. Команды разбиваются на несколько категорий, например, объединены операторы размытия и повышения резкости, коррекции цвета и баланса белого, контраста и яркости, дизеринга, методы композиции и морфологии, математически определяемые функции.

3. Для облегчения понимания ImageMagick в текст включаются многочисленные примеры работы с командной строкой в ОС Линукс.

4. В Приложении размещается обширная справка Dcraw и библиотеки LibRaw. Эти программные пакеты используются как делегаты ImageMagick и позволяют полноценно работать с цифровыми фотографиями. Это важные программы для фотографа, работающего с операционной системой Linux.

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

С уважением, Иван Титаренко.

Некоторые важные ссылки.

Официальная страница программы. Добро пожаловать в запутанный, но интересный мир цифровой обработки изображений!

Очень хорошее техническое руководство известного эксперта Энтони Тиссена (Anthony Thyssen). Я с большим удовольствием изучал полезнейшие статьи и примеры, по возможности дополнял текст обширными комментариями Энтони.

Многочисленные скрипты от известного эксперта Фреда Вайнхауса (Fred's ImageMagick Scripts). Примеры очень поучительные, это также работоспособные скриптовые программы для создания разных эффектов. Скрипты позволяют тонко и гибко имитировать как Photoshop, так и GIMP.

На этой странице доступен несколько запутанный «электронный учебник» для людей, предпочитающих операционную систему Windows.

Архив исходных кодов для самостоятельной сборки программы.

Лицензия.

Небольшая справка о программе из Википедии.

Работа с командной строкой.


Здесь и далее описывается работа с командным интерпретатором bash и принятый в Linux OS синтаксис. Программа ImageMagick кросс-платформенная, но синтаксис работы в операционных системах Windows немного отличается от используемого в Unix-подобных OS.

Параметры настройки - это опции командной строки для использования их с другими операторами во время выполнения программы.

Важно отметить, что существуют формы написания операторов, называемые здесь для удобства «плюс» и «минус» ("-" и "+"). Последняя форма ("+") обычно означает, что настройка отключена или сброшена до значения по умолчанию.

Также есть опции, управляющие работой последующих операторов. Например, для управления операторами: -dither, -gravity, -fill, -background, -bordercolor, -stroke, -font, -pointsize, -strokewidth, -box, -virtual-pixel, -interpolate.

Специальный оператор-настройка "-set" создан для изменения метаданных изображений после того, как они были прочитаны в память для обработки.

Существуют параметры вывода, подготавливающие запись файла на диск. Они могут быть указаны в любом месте командной строки, но применяются только при сохранении на диск. Это операторы, например, "-write" или "-identify", "-quality", "-loop", "-compression", "-format", "-path", "-transparent-color".

Если операторы не указываются или отключены (с помощью формы "+" ), то применяется соответствующее значение по умолчанию.

Ниже перечислены основные операторы управления и отладки, которые определяют, как ImageMagick выполняет свои задачи и какую информацию выводит в командной строке. Это операторы "-verbose", "-debug", "-warnings", "-quiet", "-monitor", - "-regard-warnings".

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

Операторы можно сгруппировать в несколько подкатегорий.

Операторы, читающие изображения из файла или конвейера, создающие новые изображения: "xc:", "canvas:", "logo:", "rose:", "gradient:", "radial- gradient:", "plasma:", "tile:", "pattern:", "label:", "caption:", "text:".

Операторы простой обработки изображений: -crop, -repage, -border, -frame, -trim, -chop, -draw, -annotate, -resize, -scale, -sample, -thumbnail, -magnify, -adaptive-resize, -liquid-resize, -distort, -morpohology, -sparse-color, -rotate, -swirl, -implode, -wave, -flip, -flop, -transpose, -transverse, -blur, -gaussian-blur, -convolve, -shadow, -radial-blur, -motion-blur, -sharpen, -unsharp, -adaptive-sharpen, -adaptive-blur, -noise, -despeckle, -median, -negate, -level, -level-color, -gamma, -auto-level, -auto-gamma, -sigmoidial-contrast, -normalize, -linear-stretch, -contrast-stretch, -colorize, -tint, -modulate, -contrast, -equalize, -sepia-tone, -solarize, -recolor, -opaque, -transparent, -colors, -map, -ordered-dither, -random-dither, -raise, -paint, -sketch, -charcoal, -edge, -vignette, -emboss, -shade, -poloroid, -encipher, -decipher, -stegano, -evaluate, -function, -alpha, -colorspace, -separate.

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

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

Особенность операторов списка заключается в том, что они изменяют весь текущий список изображений как единое целое. Это могут быть следующие операторы: -append, -flatten, -mosaic, -layers, -composite, -combine, -fx, -coalesce, -clut, -average, -evaluate-sequence.

Метод «layers» программы-утилиты "composite" в настоящее время является единственным оператором, который разделит текущий список изображений на два списка, прежде чем объединить их. Разделение выполняется путем поиска в строке специального оператора "null:".

Команды-утилиты программного пакета ImageMagick.

Команда "convert" - основная рабочая лошадка ImageMagick, поэтому чаще всего вызывается как для манипуляций с изображениями, так и для демонстрации примеров.

Команда «identify» предназначена для получения информации об изображении.

bash$ identify tree.gif
С помощью опции "-verbose" можно регулировать вывод информации.

Конкретная информация может быть получена и выведена с помощью параметра "-format" и указанием опций в процентах (%).

bash$ identify -format '%k\n' tree.gif
Команда «identify» по умолчанию считывает только минимальную базовую информацию об изображении, используя "-ping".

bash$ identify -format '"%[label]"\n' rose.png
Также можно выполнить некоторые арифметические задачи с помощью выражений FX.

bash$ identify -ping -format 'double_width=%[fx:w*2] PI=%[fx:atan(1)*4]\n' tree.gif

* Обратите внимание, что если изображение имеет более 1024 цветов, в подробный вывод не будут включены гистограммы или таблицы цветов.


Утилита "mogrify" похожа на "convert", за исключением того, что она предназначена для мгновенного изменения изображений в памяти. Основная цель программы - читать изображения (или анимации) по одному файлу в память, изменять их, прежде чем сохранять изображение на диск с тем же именем файла. Поэтому команда «mogrify» потенциально опасна, так как способна испортить исходное изображение, перезаписать его. В команде нельзя применять операторы обработки изображений, такие как: -fx, +swap, -composite, -append, -flatten, -layers.

Команда-утилита "composite" специально разработана для альфа-композитинга. Она дает доступ к некоторым из сложных способов альфа-композиции. Например, "-dissolve", "-blend" и "-watermark".


* Обратите внимание, что параметр "-tile" в утилите работает иначе, чем в утилитах "convert", «montage» и "display".


Оператор "-type" определяет цветовое пространство, когда изображение считывается в память или записывается на диск. Поэтому данный оператор может вносить некоторые изменения в цветовое пространство во время ввода-вывода файла.

Например, оператор "-type" имеет специальный параметр «bilevel», его можно использовать для преобразования в двухцветное (монохромное) изображение. Точно так же опции «TrueColor» и «TrueColorMatte» принудительно сохраняют изображения формата TIFF как полноцветного изображения RGB.

Другие настройки включают «GrayScale» и «GrayScaleMatte», что гарантируют запись изображения на диск только в оттенках серого.

Настройка "-type TrueColorMatte" заставит изображение JPEG добавить альфа-канал, но лишь для работы в памяти.

При записи в формат файла PNG установка "-type Pallette" определит формат как PNG8 с индексированием по цвету. Если добавить опцию «BiLevel», ImageMagick конвертирует цветные изображения в черно-белые для большинства форматов файлов изображений.

К сожалению, возможности "-type" зависят от конкретного формата изображения.

Контроль качества изображений.

Качество в данном случае зависит от версии IM, так как определяется возможностью работы с целыми числами или числами с плавающей запятой. Глубина - это битность формата файла, она может быть переменной.

Многие форматы изображений имеют глубину 8 бит. Они предоставляют 8 бит (от 0 до 2^8-1) для хранения каждого значения цвета, используемого в изображении. Это значения от 0 до 255 для красного, зеленого и синего каналов.

Часто этот тип изображений называют 24-битным изображениями («бит на пиксель», что отлично от параметров оператора "-depth"). Здесь формат JPEG классический пример.

Если также задействован альфа-канал, вы получите 4x8-битные значения или изображение 32 бит/пиксель. Формат изображения PNG поддерживает подобные настройки, хотя данные можно сохранять как 16 бит/пиксель.

То, что многие люди называют 8-битными изображениями (8 бит/пиксель), на самом деле изображения с 8-битной палитрой. Отсюда максимальное ограничение в 256 цветов для всего изображения.

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

Поскольку чаще всего форматы сохраняют значения цвета только с глубиной 8 бит на пиксель, многие пользователи компилируют ImageMagick так, чтобы программа работала только с «качеством 8», такая версия ImageMagick определяется как Q8. В этом случае требуется намного меньше памяти, чем если скомпилировать ImageMagick как версию Q16 (с поддержкой 16 бит).

Версия Q8 хорошо подходит для несложной обработки и преобразований между форматами, а также для создания простых картинок, аннотирования текстом или наложения изображений.

Однако версия ImageMagick Q8 не работает должным образом, когда вы начинаете использовать сложные последовательности операций, включающие многократные изменения цвета, контраста, трансформацию размера, осветление, коррекцию гаммы и т.д.

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

Помните, что «качество» задается во время компиляции ImageMagick. «Качество» нельзя изменить, кроме как путем повторной компиляции ImageMagick.

ImageMagick Q16 будет использовать как минимум вдвое больше памяти для хранения того же объема данных изображения, что и версия ImageMagick Q8. Вы можете скомпилировать версии Q32 и Q64, они обеспечат высококачественную обработку фотографий. (См. опции компиляции HDRI.)

ImageMagick Q16 позволяет сохранять больше битовой информации для каждого значения пикселя, чем Q8. Данные цвета сохраняются как целые числа от 0 до конца «квантового диапазона». Последнее значение известно в IM-программировании как текущий «QuantumRange» (устаревшее название «MaxRGB»).

Чем выше «качество» компиляции IM, тем точнее будут значения цвета при сохранении изображения в памяти.

Такие операции, как изменение размера, шумовые фильтры, размытие, повышение резкости, усреднение пикселей, изменение цвета, гаммы и гистограммы, а также множество сложных операций компоновки изображения, могут привести к нежелательным цветовым ошибкам в Q8 IM, создавая очевидные цифровые артефакты.

Хотя версия ImageMagick Q8 позволяет выводить изображения с глубиной 16 бит, такое изображение будет содержать только информацию, эквивалентную глубине 8 бит.

Скомпилированная с поддержкой 16 бит и выше программа лучше справится с восьмибитовыми изображениями. Конечно, сохранение окончательного изображения в формате с «глубиной» 8 бит приведет к «квантованию» цвета, но во время обработки изображения в памяти промежуточное качество изображения сохраняется, что позволяет избежать ошибок.


* Доступны некоторые форматы, которые сохраняют информацию высокого качества. Например, форматы MIFF, NetPBM.


Если ImageMagick считывает изображение, используя 8-битные значения, «глубина» изображений будет установлена на 8 бит, и при записи в файл ImageMagick сохранит изображение с глубиной 8 бит. Иногда вы можете переопределить параметр - "-depth" для изображения, чтобы обработка проводилась с максимальной глубиной, доступной для данной версии программы.

Формат HDRI.

Формат HDRI (работа с изображениями с расширенным динамическим диапазоном) разработан для более «естественного» отображения графических файлов, учитывая способность человеческого глаза одновременно видеть как яркие, так и темные области сцены. Поэтому версия HDRI ImageMagick специально скомпилирована для работы со значениями с плавающей запятой для изображений, хранящихся в памяти. Что позволяет выполнять точную обработку, предотвращает «усечение» цветов и прочие нежелательные эффекты.

HDRI использует тот же цветовой диапазон, что и параметр качества по умолчанию. Значения находятся в промежутке от 0 до конца квантового диапазона. Но они сохраняются как числа с плавающей запятой («doubles» в терминах программирования C), так что не будет эффектов квантования, округления значений до целых чисел. Значения не «обрезаются», если выходят за пределы квантового диапазона или становятся отрицательными. Поэтому вы не теряете много информации во время обработки.

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


* Оператор "-clamp" - оператор, о котором следует помнить при использовании HDRI версии IM. Оператор обрезает значения, выходящие за пределы «нормального диапазона». Любое отрицательное значение будет обрезано до нуля, а любое значение, превышающее «QuantumRange», будет установлено на квантовый диапазон. Однако оператор не округляет значения с плавающей запятой до целых чисел.


Ниже продемонстрированы квантовые эффекты.

# HDRI version of IM

bash$ convert -size 20x600 gradient: -rotate 90 \
+level 0,15 -level 0,15 level_rounding_hdri.png
bash$ convert -size 20x600 gradient: -rotate 90 \
-level 20% +level 20% level_clipping_hdri.png
Как видите, градиент остается без изменений даже после сильного сжатия или растяжения изображения и последующего уменьшения.

Можно также использовать специальную настройку-переключатель, чтобы указать, как следует работать со значениями с плавающей запятой. Например, указать опцию кодера "-define quantum:format=floating-point" для запроса значений с плавающей запятой при работе с определенными форматами файлов. Опция "-depth" создана для этих же целей. Если опция установлена как "-depth 32" используются «обычные» числа с плавающей запятой. Но если указано "-depth 64", то программа работает с типом «doubles» для данных с плавающей запятой. С этими флагами можно использовать TIFF, FITS и MIFF.

Другой специальный вариант кодера определен настройкой "-define quantum:scale=65535.0". Он масштабирует значение от нормализованного с плавающей запятой (от 0,0 до 1,0) во внутренний диапазон от 0,0 до 65535,0. Поэтому, если вы получаете почти черное изображение при чтении изображения с плавающей запятой, попробуйте добавить эту опцию.

Формат файла MPC с прямым переносом дампа памяти на диск также сохраняет значения с плавающей запятой, если используется HDRI версия IM, не требует каких-либо специальных флагов.

Разрешение изображения.

Разрешение — величина, определяющая количество точек (элементов растрового изображения) на единицу площади (или единицу длины).

Разрешение обычно указывается как dpi (DPI) или точки на дюйм, определяет, насколько далеко друг от друга находятся пиксели.

Это всего лишь некоторое число, хранящееся вместе с изображением, сообщающее устройствам вывода (принтерам, мониторам), сколько пикселей на дюйм должно отображаться.

Вы можете установить разрешение или плотность изображения при считывании в ImageMagick с помощью оператора "-density" или с помощью настройки "-set density".

bash$ convert -density 90 -pointsize 72 label:Hello density.gif
bash$ convert -density 72 -pointsize 12 -interline-spacing 12 -font Arial \
label:'First\nSecond\nThird' label_lspace_double.gif
Параметр "-units" определяет в каких значениях задается разрешение. По умолчанию используется «PixelsPerInch», но можно указать более современные метрические единицы «PixelsPerCentimeter» (последнее применяется для формата PNG).

Отладка, оптимизация, вывод информации.

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


• -bench iterations

Позволяет измерить производительность. Команда повторяется для заданного количества итераций («iterations»), затем выводится время исполнения цикла.

bash$ convert logo: -resize 200% -bench 5 logo.png Performance:
(В примере выполнено 5 итераций.)


• -debug events

Вывод отладочной информации.

Параметр «events» указывает, какие события должны регистрироваться. Возможные варианты «None», «All», «Trace» или список разделенных запятыми, состоящий из одного или нескольких значений: Accelerate, Annotate, Blob, Cache, Coder, Configure, Deprecate, Exception, Locale, Render, Resource, Security, TemporaryFile, Transform, X11, User.

Например, чтобы регистрировать события кэша для больших двоичных объектов.

bash$ convert -debug "Cache,Blob" rose: rose.png
Полный список методов отладки доступен с помощью команды "-list debug".

Параметр "-log" указывает формат вывода отладки.

Опция "+debug" отключает ведение журнала.


• -help

Выведет на дисплей встроенную в утилиты справочную информацию.


• -identify

Идентифицирует формат, а также описывает прочие характеристики изображения.

Например, выводится следующая информация: номер сцены в последовательности изображений; имя изображения; размер изображения; класс изображения («DirectClass» или «PseudoClass»); количество уникальных цветов; время чтения файла и время процесса обработки. Если указан аргумент "-colors", выводятся общие уникальные цвета изображения и значения ошибок уменьшения цвета. Если перед опцией стоит "-verbose", отображается еще большее количество свойств изображения, включая статистику, профили, гистограмму и т.д.

bash$ identify -format "%[exif:*time*]" pagoda_sm.jpg
(Метаданные цифровой камеры и данные EXIF обрабатываться с учетом регистра.)


• -list type

Выводит список поддерживаемых аргументов для различных опций или настроек. Списки различаются в зависимости от версии ImageMagick.


• -log string

Параметр определяет формат журнала, если активна опция "-debug" .

~ %d domain;
~ %e событие;
~ %f функция;
~ %l линия;
~ %m модуль;
~ %p идентификатор процесса ID;
~ %r время работы CPU;
~ %t время между началом процесса и окончанием;
~ %u пользовательское время CPU (для многопользовательских ОС);
~ %% вывод в процентах;
~ \n новая строка;
~ \r return (возврат каретки).
bash$ convert -debug coder -log "%u %m:%l %e" in.gif out.png
По умолчанию выводится вся информация.


• -monitor

Показывает степень прогресса операции.


• -path path

Запишет файлы на диск с указанным путем.


• -ping

Идентифицирует характеристики изображения: имя файла, ширину и высоту изображения, цвет, количество цветов, количество байтов, формат. Также имеет форму записи "+ping"


• -print string

Интерпретирует строку и выводит данные в консоль.


• -process command

Обработает изображение с помощью настраиваемого фильтра. Аргументы команды вводятся как arg1, arg2, arg3. Перед аргументами следует указать имя вызываемого модуля.


• -quiet

Подавит все предупреждающие сообщения. Но сообщения о критических ошибках будут выводиться.


• -regard-warnings

Параметр обрабатывает как ошибочные некоторые предупреждения.


• -respect-parentheses

Настройки остаются в силе до границы, определяемой скобками.


• -seed

Создает новую последовательность псевдослучайных чисел.

bash$ convert -size 100x100 -seed 4321 plasma:green-yellow plasma_rnd3.jpg

• -silent

Запрещает выводить сообщения. Опция оператора «import».


• -update seconds

Обнаружение изменения файла изображения и повторное отображение.

Предположим, что файл, видимый на дисплее, в процессе работы был перезаписан. Утилита «display» автоматически определит, что входной файл изменен, и соответствующим образом обновит изображение на мониторе.


• -verbose

Выведет подробную информацию об изображении, если параметр предшествует параметрам "-identify" или "info:".

bash$ convert rose: -matte -virtual-pixel transparent -verbose \
-distort Perspective "0,0,3,0 0,46,10,46 70,0,70,7 70,46,60,40" \
+verbose perspective_rose.png

• -version

Выводит на дисплей информацию о версии программы ImageMagick.

Печать изображений.


• -density width

• -density width x height

Установит горизонтальное и вертикальное разрешение изображения для рендеринга. Параметр задает разрешение изображения для хранения при кодировании растрового изображения или разрешение холста при рендеринге векторных форматов, таких как Postscript, PDF, WMF и SVG, в растровое изображение. Единица измерения по умолчанию - точки на дюйм (DPI). Также можно использовать параметр "-units" для переопределения выбора точек на сантиметр.

Разрешение по умолчанию составляет 72 DPI, что эквивалентно одной точке на пиксель (стандарт Macintosh и Postscript). Компьютерные экраны обычно поддерживают 72 или 96 DPI, в то время как некоторые принтеры поддерживают 150, 300, 600 или 1200 точек на дюйм.


* Обратите внимание, программа «Photoshop» сохраняет и получает данные о разрешении из проприетарного встроенного профиля.


Параметр "-density" устанавливает разрешение и не изменяет базовое растровое изображение.


• -precision value

Установит максимальное количество значащих цифр для печати.


• -units type

Единицы разрешения изображения.

Выберите из следующего списка: Undefined, PixelsPerInch, PixelsPerCentimeter. Опция обычно используется вместе с опцией "-density".

Системные настройки X Windows.


• -backdrop

Размещает изображение по центру. Центр определяется экраном рабочей станции X-сервера. Цвет фона задается опцией "-fill".

Прим. Референсная (эталонная) реализация от фонда X.Org Foundation, называемая X.Org Server, является канонической реализацией X Window System.


• -colormap type

Определит тип цветовой карты.

Параметр «type» может быть «shared» или «private».

Параметр применяется только в том случае, если визуальным элементом X-сервера по умолчанию является «PseudoColor» или «GrayScale».


• -frame

Включит рамку окна X в импортированное изображение.

bash$ convert rose: -frame 10x10 frame.gif
bash$ convert rose: -frame 15x6+2+2 frame_wierd.gif

• -iconic

Запуск в режиме значков X Windows.


• -preview type

Параметр влияет на операцию предварительного просмотра изображения.

bash$ convert file.png -preview Gamma Preview: gamma.png
Возможные опции: AddNoise, Blur, Brightness, Charcoal, Despeckle, Dull, EdgeDetect, Gamma, Grayscale, Hue, Implode, JPEG, OilPaint, Quantize, Raise, ReduceNoise, Roll, Rotate, Saturation, Segment, Shade, Sharpen, Shear, Solarize, Spiff, Spread, Swirl, Threshold, Wave.

Вывести полный список опций можно с помощью команды "-list preview" . Предварительный просмотр по умолчанию установлен как JPEG.


• -screen

Экран захвата. Параметр указывает, что запрос GetImage для получения изображения должен выполняться в просматриваемом окне. Поэтому опция позволяет выводить какие-то окна, чтобы перекрывать указанное окно или захватывать всплывающие.


• -snaps value

Установит количество снимков экрана. Позволяет захватить более одного изображения с экрана X-сервера, чтобы создать последовательность анимации.


• -view string

Параметры просмотра FlashPix.


* FlashPix — формат файлов для хранения растровой графики, позволяющий сохранять изображение в нескольких разрешениях в одном файле.



• -window id

Установит изображение как фоновое. Параметр «id» может быть идентификатором или именем окна. Укажите «root», чтобы выбрать действующее окно X-сервера в качестве целевого.

По умолчанию изображение накладывается на фон целевого окна. Если указана опция "-backdrop" или "-resize", изображение будет окружено цветом фона.

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


• -window-group

Укажите группу окон.

Ограничения, синхронизация, разделяемая память.


• -cache threshold

Параметр был заменен параметром "-limit".


• -limit type value

Операторуправляет ограничениями на дисковое пространство, память и т.д.

Выберите из списка: width, height, area, memory, map, disk, file, thread, throttle, time.

Значение «file» определяет допустимое количество файлов. Остальные параметры указаны в байтах. Задает аргументы для ограничений памяти и дискового пространства с префиксами SI (например, 100 МБ).

По умолчанию ограничения составляют 768 файлов, 3 ГБ для изображения, 1,5 ГБ памяти, 18,45 ГБ дискового пространства. Эти ограничения корректируются в зависимости от доступных ресурсов вашего компьютера.

:: -limit memory 32MiB -limit map 64MiB
Опция "-list" перечислит текущие ограничения.

bash$ identify -list resource
В большинстве случаев не нужно беспокоиться об ограничениях ресурсов, программа ImageMagick выбирает разумные значения по умолчанию.

Однако вы можете изменить настройки. Например, чтобы гарантировать, что ImageMagick не превысит лимит 10 МБ памяти, вы можете установить ограничение "-limit area 10MB".

В дополнение к параметрам ограничения ресурсов командной строки, ресурсы могут быть установлены с помощью переменных среды: MAGICK_AREA_LIMIT, MAGICK_DISK_LIMIT, MAGICK_FILE_LIMIT, MAGICK_MEMORY_LIMIT, MAGICK_MAP_LIMIT, MAGICK_THREAD_LIMIT, MAGICK_TIME_LIMIT.


* Переменные окружения Linux — именованные переменные, содержащие текстовую информацию, которую могут использовать запускаемые программы



• -shared-memory

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

ImageMagick следует скомпилировать с поддержкой общей памяти, а дисплей должен поддерживать расширение MIT-SHM. В противном случае параметр игнорируется.

Значение по умолчанию «True».


* MIT-SHM (англ. MIT Shared Memory Extension, XShm) — расширение X Window System для обмена видеоданными между клиентом и сервером с использованием общего поля памяти.



• -synchronize

Синхронизирует изображение с запоминающим устройством.

Установите значение «true», чтобы все изображения были синхронизированы с жестким диском.


* Частая файловая запись снижает производительность, но обеспечивает сохранение информации в случае сбоя системы (в том числе при работе с недостатком файловой памяти).


Битность, сжатие, формат изображений.


• -antialias

Включает или отключает отрисовку пикселей сглаживания при обработке шрифтов и линий.

По умолчанию объекты (текст, линии, многоугольники и т.д.) «сглаживаются». Форма записи "+antialias" позволяет отключить добавление краевых пикселей сглаживания. Это уменьшит количество цветов, добавляемых к изображению. Если вы не хотите смешивать цвета при уменьшении размера, используйте "-sample" вместо "-resize". Или установите "-filter point" перед оператором изменения размера.


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



• -compress type

Использует сжатие, указанное опцией «type». Возможные варианты: None, BZip, Fax, Group4, JPEG, JPEG2000, Lossless, LZW, RLE или Zip.

Чтобы вывести полный список типов сжатия, введите "-list compress" . Укажите "+compress", чтобы сохранить двоичное изображение в несжатом формате. По умолчанию используется тип сжатия для данного формата изображения.

Параметр "-quality" позволяет установить уровень сжатия для кодировщиков JPEG, PNG, MIFF и MPEG. Используйте "-sampling-factor", чтобы установить коэффициент дискретизации JPEG, MPEG и YUV для понижающей дискретизации каналов цветности.


• -define key {= value} ...

Добавит определенные глобальные настройки управления кодерами и операциями обработки изображений. Настройки можно посмотреть командой "-verbose info:".

Используйте "+define key", чтобы удалить ранее созданные определения. Опция "+define *" удалит все существующие определения.

bash$ convert bilevel.tif -define ps: imagemask eps3: stencil.ps

• -depth value

Битность изображения. Глубина цвета (качество цветопередачи, битность изображения) — термин компьютерной графики, означающий количество бит (объём памяти), используемое для хранения и представления цвета при кодировании одного пикселя растровой графики или видеоизображения.

Часто выражается единицей бит на пиксель (англ. bits per pixel, bpp). Битовая глубина определяет количество информации о цвете, доступное для каждого пикселя изображения. Чем больше битов информации о цвете выделено на каждый пиксель, тем больше количество доступных цветов и точнее их отображение, что влияет на размер изображения.

Используйте этот параметр, чтобы указать глубину цвета необработанных изображений, значение которых неизвестно, например, в цветовом пространстве RGB или CMYK. Или чтобы изменить глубину цвета любого изображения. Используйте опцию "+depth", чтобы вернуть значение по умолчанию.

bash$ convert -size 512x512 -depth 8 image.rgb image.png
bash$ convert -depth 8 -size 100x100 rgb:- stream_wand.gif
Также можно улучшить работу программных фильтров, если перейти из 8-битного режима в 16-битный (или 32-битный) режим или сразу начинать работу в этом режиме. Потери информации будут меньше, а тональные переходы цвета более плавными. Перед обратным преобразованием в 8-битный режим, например, если сохранить изображение в формате GIF, рекомендуется искусственно расширить диапазон пикселей с помощью операторов "-normalize" или "-evaluate multiply 30".


* HighColor или HiColor разработан для представления оттенков «реальной жизни», то есть хорошо воспринимаемые человеческим зрением цвета. В этом случае цвет кодируется 15 или 16 битами: 15-битный цвет использует 5 бит для представления красной составляющей, 5 для зелёной и 5 для синей, что дает 2^5=32 возможных значений каждого цвета, или 32768 (32×32×32) возможных цветов. 16-битный цвет использует 5 бит для представления красной составляющей, 5 для синей, 6 бит (2^6=64 возможных значения) для представления зелёной, так как человеческий глаз более чувствителен к зелёной составляющей (65536 цветов). 16-битный цвет упоминается как «тысячи цветов» («thousands of colors») в системах Macintosh.


Современные ЖК-дисплеи отображают 18-битный цвет (64×64×64=262144 комбинации), но благодаря дизерингу разница с TrueColor-дисплеями на глаз незначительна.


* RGB-изображения используют три цветовых канала. RGB-изображение с битовой глубиной 8 может содержать 256 различных значений для каждого канала, всего может быть представлено более 16 миллионов цветовых значений. RGB-изображения с 8-битными каналами иногда называют 24-битными изображениями (8*3=24, 24 бита на каждый пиксель).



• -endian type

Укажите порядок байтов (MSB или LSB) изображения.

Посмотреть полный список типов с порядком байтов можно с помощью опции "-list endian".

Используйте "+endian", чтобы вернуться к неопределенному порядку байтов.


• -format type

Опция задает формат изображений. Полный список форматов доступен с помощью опции "-list format". По умолчанию файл записывается под своим исходным именем. Однако, если расширение имени файла соответствует поддерживаемому формату, расширение заменяется типом формата изображения, указанным с помощью опции "-format". Например, если вы укажете «tiff» как тип формата, а имя файла входного изображения "image.gif", имя файла поменяется на "image.tiff".

bash$ convert null: -format '%[fx:rand()*30-15]' info:` \) \
-delete 0 -border 100x80 -gravity center \
-crop 200x160+0+0 +repage -flatten -trim +repage \
-background black \( +clone -shadow 60x4+4+4 \) +swap \
-background none -flatten \
poloroid_stack.png
bash$ convert rose: -set label "rose with a label" rose.png identify -format '"%l"\n' rose.png
ImageMagick поддерживает чтение более 100 основных форматов файлов (не включая подформаты), а также работает со встроенными изображениями, на которые можно ссылаться из командной строки. ImageMagick также предоставляет ряд идентификаторов формата для добавления, удаления и сохранения встроенных профилей.

Распространенные форматы.

JPEG (JPG). Формат JPEG (Joint Photographic Experts Group) предназначен для сохранения файлов со сжатием. Сжатие уменьшает размер файла во много раз, но с потерями качества. Потери становятся ощутимыми, если изображение в формате JPEG изменяется так, что величина изменения верхней или левой границы не кратна 8. Потери наиболее заметны в синем цветовом канале: поскольку синий цвет плохо воспринимается человеческим глазом, алгоритм JPEG использует это свойство зрения для сжатия (в цветовом пространстве YCbCr).


* Формат Jpeg2000 задействует другие методы сжатия изображения без потерь, по умолчанию не искажает цвет изображения.


Файлы в формате JPEG, созданные цифровыми камерами, программами сканирования и другими программами обработки изображений часто добавляют профили «программных комментариев» к изображениям. Оператор "+profile" удалит все цветовые профили из изображения, в то время как "-strip" удалит и профили, и метаданные.

Также обратите внимание, что оператор "-thumbnail" - это вариант оператора "-resize", но с включенной опцией "-strip".

Поскольку JPEG не сохраняет альфа-канал, при чтении изображение будет без альфа-канала. Параметр "-type TrueColorMatte" заставит любое изображение JPEG, считываемое после указанной опции, определять непрозрачный «матовый» канал, добавляемый к изображению в памяти.


* Лучший способ добавить прозрачность - использовать опцию "-matte" или "-alpha set".


Также "-quality" важная опция при сохранении изображений JPEG: она контролирует, насколько сильно изображение сжимается. Чем ниже значение, тем больше артефактов сжатия.


* Даже установка "-quality 100%" не гарантирует сохранение изображения без потери качества. Нет никакого способа определить "-quality" для получения файла необходимого размера, кроме как методом проб и ошибок. Например, начните с установки "-quality 75%" и проверьте полученный размер файла. Если он слишком большой, уменьшите "-quality" на 10%.


Вы можете указать максимальный выходной размер файла для изображения JPEG. Размер указывается с суффиксом.

:: -define jpeg:extension={size}
В то время как установка "-quality 100%" может приводить к возникновению артефактов, опция "-compress LossLess" будет работать с графической библиотекой таким образом, чтобы сохранить изображение JPEG без потери данных. Опция действует только в том случае, если ваша библиотека JPEG была исправлена. Также вы должны установить "-quality 100%" для правильной работы алгоритма. Сохранение с помощью этой опции добавляет патч при записи в файл. Не рекомендуется использовать опцию, следует воспользоваться другим форматом для изображений. Ннапример, PNG или JP2.

Коэффициент дискретизации "-sampling-factor" используется библиотекой JPEG для дискретизации с понижением цветности. 2x2, 1x1, 1x1 - стандартные методы подвыборки цветности ImageMagick и соответствует 4:, 2:, 0. Однако, когда настройка «-quality» указана как 90 или выше, субдискретизация не происходит.

Опция "-density" (плотность) не влияет на размер пикселей изображения. Но информация сохраняется в заголовке JFIF файла JPEG. Некоторые программы, такие как Photoshop, игнорируют этот параметр. Плотность важна только тогда, когда изображение выводится на принтеры или мониторы и т.д.

IM будет автоматически применять внутренний формат шкалы серого для изображений в оттенках серого (grayscale). Параметр "-type TrueColor" переопределит настройку и «заставит» ImageMagick всегда создавать цветное изображение в формате JPEG.

Отключите расчет оптимальных таблиц кодирования Хаффмана для этого изображения. По умолчанию включено. Параметр «false» «выключает» настройку, «true» включает.

:: -define jpeg:optimize-coding=false

Связанные форматы вывода JPEG.

JPEG2000: новый формат JPEG с улучшениями и дополнениями. Этот формат требует, чтобы была установлена библиотека JasPer jp2, иначе вы получите сообщение об ошибке. В этом формате для сжатия изображений используется вейвлет-сжатие вместо стандартного метода JPEG DCT, что позволяет эффективно сжимать изображение. К сожалению, формат нельзя рекомендовать, так как он не получил широкого распространения.

TIFF. Формат TIFF (Tagged Image File format) - универсальный формат для хранения фотографий или сканированных изображений с цветовыми каналами. Поддерживается профессиональным программным обеспечением. Имеет широкий диапазон передачи цветов: от монохромного до 24-битовой модели RGB (TrueColour) и 32-битовой цветоделенной модели CMYK. Также доступна опция LZW Compression. Формат TIFF позволяет сохранять фотографии в цветовых пространствах RBG, CMYK, YCbCr, CIE Lab и другие с большой глубиной цвета (8, 16, 32 и 64 бит). TIFF при сжатии не теряет в качестве.

BMP. Формат BMP устарел, но его распознает почти любая программа, работающая с графикой в среде Windows. BMP хранит данные с максимальным размером 65535×65535 пикселей. Работает только с индексированными цветами, независим от платформы. Из-за того, что этот формат поддерживает только индексированный цвет, его не применяют в полиграфии.

GIF. Формат GIF позволяет сохранять сжатые без потерь данные, но лишь с 256 цветами. Формат GIF подходит для чертежей и графиков, поддерживает прозрачность и анимацию.

PNG. Формат PNG успешно заменяет GIF и JPEG, не требует лицензии на использование. PNG поддерживает альфа-канал, неограниченное количество цветов, сжимает данные без потерь. Это один из новейших и современных форматов изображений, поддерживающий 32-битные цвета.

Для формата PNG "-quality" определяется как два десятичных знака. Первая цифра (десятки) - это уровень сжатия zlib от 1 до 9. Однако, если используется параметр 0, вы получите сжатие Хаффмана, а не сжатие zlib, что может улучшить сжатие.

Вторая цифра определяет тип фильтрации кодирования данных PNG до сжатия: 0 - без фильтрации; 1 - вспомогательный; 2 - наилучший; 3 - средний; 4 - алгоритм Паэта («Paeth»); 5 - адаптивный метод.

Поэтому для изображений со сплошной последовательностью цветов лучше использовать фильтр с установкой «без фильтрации» ("-quality 00"). Для изображений природных ландшафтов лучше использовать «адаптивную» фильтрацию ("-quality 05").

PNG и виртуальный холст.

PNG не содержит информацию о размере виртуального холста, но сохраняет данные о смещении виртуального холста, это позволяет сгенерировать «размер холста», соответствующий смещению и размеру изображения. Что может быть важно для некоторых операторов, таких как "-crop", "-trim" и "-flatten" и т.д.

Допустимо применять операторы "-page" и "-repage", чтобы установить или удалить смещение виртуального холста.

bash$ convert rose: -repage 0x0+40+30 png:- | \
bash$ convert - -background LightBlue -flatten png_offset_flattened.jpg
PNG не поддерживает настройку "-units" как «PixelsPerInch», используйте настройку «undefined» или «PixelsPerCentimeter».

Подформаты PNG.

~ PNG8: эквивалент GIF, включает логическую прозрачность и таблицу в 256 цветов.
~ PNG24: 8-битные каналы RGB без альфа-канала. В некоторых случаях может включать поддержку прозрачности.
~ PNG32: формат изображения RGBA с полной полупрозрачностью.
~ PNG48: 16-битные каналы RGB без альфа-канала.
~ PNG64: 16-битное изображение RGBA (включая полупрозрачность).
~ PNG00: цвет PNG и битовая глубина зависят от входного изображения.
Чтобы лучше контролировать запись изображений PNG, программист Гленн Рандерс-Персон изменил ряд элементов управления кодировщика «Define».

:: -quality '{level} {filter}'
Базовый уровень сжатия и фильтр при сохранении изображения PNG.

:: -define png:compression-level=zs
:: -define png:compression-strategy=zl
:: -define png:compression-filter=fm
Параметр "-quality" обычно устанавливает значения «zl» и «fm», но не «zs».

:: -depth {depth}
Битовая глубина изображения, обычно 8 или 16 бит.

:: -define png:bit-depth={depth}
Укажите глубину для файла PNG. Это отменяет стандартную установку "-depth", но только для записи изображений PNG и только тогда, когда изменение может быть выполнено без потерь.

:: -define png:color-type= {type}
~ "0" для оттенков серого, «bit-depths» 2, 3, 4, 8 или 16.
~ "2" для RGB, «bit-depths» 8 или 16.
~ "3" для индексированного цвет, «bit-depths» равен 1, 2, 4 или 8.
~ "4" для Gray-Matte.
~ "6" для RGB-Matte.

* Обратите внимание, что установка "-define png:color-type='2'" позволяет сохранить данные изображения как RGB (вместо sRGB). Однако аналогичный эффект возникает, если определить "-set colorspace sRGB" для линейного изображения RGB.


После цифровой обработки и для публикации может потребоваться сохранить изображение или в восьмибитовым формате, или в 16-разрядном (в форматах TIFF и PNG). Если в дальнейшем необходимо обрабатывать фотографии, то лучше сохранять изображения в формате, поддерживающем 16 бит (и выше) без потерь. Поэтому рекомендуется использовать несжатый TIFF, это «быстрый» формат, он сохраняет все метаданные (EXIF, IPTC, XMP) исходного файла. (PNG обычно удаляет метаданные.)

Форматы PbmPlus/NetPBM: PBM PGM PPM PNM PAM.

~ PBM, растровое изображение.
~ PGM, изображение в оттенках серого.
~ PPM, цветное изображение.
~ PFM, с поддержкой плавающей запятой для версии ImageMagick HDRI.
~ PAM, произвольный формат.
~ PNM, любой формат NetPBM.
Каждый формат, кроме «PAM» и «PFM», также может быть либо в «сырой» двоичной форме, либо в виде простого текстового формата ASCII (определяется с помощью опции "-compress None").

Форматы следует рассматривать как использующие цветовое пространство «linear-RGB». Однако в этом случае следует указать битовую глубину 16.

Специальные форматы файлов.

MIFF. Формат «miff» это формат ImageMagick. Все последовательности изображений и все атрибуты, связанные с изображениями, сохраняются в файле данного формата. Поэтому только программы ImageMagick способны прочитать этот файл. Формат нужен как промежуточный для сохранения результатов при обработке изображений. Он также подходит для «конвейерной обработки» от одной программы ImageMagick к другой при передаче метаданных и других атрибутов изображения.

INFO. Формат «info» не выводит изображение. Но с помощью этой опции можно посмотреть метаданные (см. команду «identify»). Как и в случае с «identify», допустимо указать параметры "-format" и "-verbose" , позволяющие выводить только запрашиваемую информацию.

bash$ convert granite: info:-
Оператор "-identify" эквивалентен "-write info:" для вывода идентификационной информации изображения на стандартный выход.

bash$ convert logo: -identify -trim -identify \
+repage -identify -resize 80x80\! -identify logo_thumbnail.gif
Параметр "-verbose" выводит дополнительную информацию, если применяется, например, оператор "-colors". Также можно использовать оператор "-print".

NULL. Это классическая «битодробилка» Linux. Вся информация, записанная в этот файл, «исчезает».

Histogram. Очень похож на «miff», но предоставляет большой комментарий к изображению.

bash$ convert tree.gif -define histogram:unique-colors=true \
-format %c histogram:info:-
bash$ convert tree.gif histogram:- | identify -format %c -
Создание комментария может занять много времени. Допустимо указать специальный параметр "-define histogram:unique-colors=false", отключающий ненужные комментарии.

Если вас интересует яркость изображения, преобразуйте изображение в оттенки серого, прежде чем создавать "histogram:"

bash$ convert rose: -colorspace Gray \
-define histogram:unique-colors=false \
histogram:histogram_gray.gif
MPC. Специальный формат для сохранения данных на диск между промежуточными операциями. Формат был разработан с учетом действительно больших изображений. По сути, это сохраненный на диск дамп памяти в виде двух двоичных файлов: файл ".mpc" содержит метаданные изображения, а ".cache" хранит пиксельный кэш изображения. Формат подходит для временных файлов «быстрого чтения», например, для хранения при обработке изображений по сценарию.

bash$ convert very_big_image.tif very_big_image.mpc
Для изображений среднего размера вы можете определить "-limit", чтобы увеличить пределы (например, "-limit area 8192 -limit memory 8192"), и тем самым попытаться избежать кэширования данных на диск.

Чтобы узнать, использует ли ImageMagick дисковый кэш для обработки изображений, следует добавить "-debug cache" в командную строку.

env MAGICK_TMPDIR=/data nice -5 \

bash$ convert -limit memory 32 -limit map 32 \
huge_9Gb_file.psd -scene 1 +adjoin layer_%d.png
Конечно, это подразумевает, что в директории "/data" достаточно свободного дискового пространства.

Если предполагается совершить множество операций над одним и тем же большим изображением, можно эффективно использовать формат MPC.

bash$ convert mybigassimage.jpg mybigassimage.mpc
bash$ convert mybigassimage.mpc -resize 50% resized.jpg
bash$ convert mybigassimage.mpc -rotate 90 rotated.jpg
Для удаления кэша и файла в данном случае необходима следующая команда.

bash$ rm -f mybigassimage.mpc mybigassimage.cache
(Если у вас много ОЗУ, попробуйте создать виртуальный диск с файловой системой «TMPFS».)

IM также предоставляет возможность для конвейерной обработки изображений «stream». Но в этом случае программа имеет ограниченный набор операций с изображениями.

bash$ stream -map rgb -storage-type char -extract 600x400+1900+2900 image.png - |\
bash$ convert -depth 8 -size 600x400 rgb:- tileimage.png
Невозможно сохранить результат в файл, но вы можете продолжить обработку меньшего изображения.

bash$ stream -map rgb -storage-type char -extract 600x400+1900+2900 image.png - |\
bash$ convert -depth 8 -size 600x400 rgb:- ... more_processing_here ... tile.png
Большинство форматов изображений используют цветовое пространство sRGB (например, JPEG, PNG). Некоторые поддерживают только линейный RGB (EXR, DPX, CIN, HDR). Некоторые форматы понимают CMYK. Форматы TIFF, PSD, JPG, JP2 поддерживают LAB (CieLAB).

Чтобы определить цветовое пространство изображения, введите следующую команду.

bash$ convert identify -verbose image.jpg
При обработке всегда следует помнить о цветовом пространстве. Какие-то алгоритмы часто предполагают линейное цветовое пространство RGB. Хотя вы можете получить удовлетворительные результаты при работе в цветовом пространстве sRGB, лучшие результаты будут достигнуты в линейном пространстве RGB.

bash$ convert image.jpg -colorspace RGB -resize 50% -colorspace sRGB resize.jpg
(Допустимо работать в цветовом пространстве LAB независимо от того, поддерживает ли версия Imagemagick HDRI.)


• -interlace type

• interlace="-interlace type"

Тип схемы чередования строк.

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

Оптимизацией изображения называется процесс, при котором из файла удаляется определенная часть информации, поэтому размер файла значительно уменьшается и ускоряется загрузка изображения из Интернета на компьютер пользователя. В веб-дизайне часто используются три формата оптимизированной пиксельной графики — JPEG, GIF и PNG. Для оптимизации изображений формата GIF можно задать хранение пикселей с чередованием строк (interlaced). В этом случае линии изображения размещаются в четыре прохода, при загрузке картинки ее качество последовательно улучшается. Это позволяет сформировать контуры изображения еще до полной загрузки.

Выберите из списка: none, line, plane, partition, JPEG, GIF, PNG.

Параметр применяется для указания типа схемы чересстрочной развертки для форматов необработанных изображений, таких как RGB или YUV.

~ «None» означает отсутствие чересстрочной развертки: RGBRGBRGBRGBRGBRGB ...
~ «Line» использует чересстрочную развертку: RRR ... GGG ... BBB ... RRR ... GGG ... BBB ...
~ «Plane» использует чередование плоскостей: RRRRRR ... GGGGGG ... BBBBBB ...
~ «Partition» похож на «Plane», за исключением того, что разные плоскости сохраняются в отдельные файлы (например, image.R, image.G и image.B).
Используйте «Line» или «Plane» для создания изображения чересстрочного PNG, GIF или прогрессивного JPEG.

Полный список схем чередования можно увидеть с помощью команды - "-list interlace".

Профили и качество изображения.

• -profile filename

• +profile profile_name

Оператор "-profile filename" добавит к изображению профили ICM (управление цветом ICC), IPTC или общий профиль.

Обратная форма "+profile profile_name" удалит указанный профиль.

Команда "convert identify -verbose" покажет встроенные профили, "-strip" удалит все профили и комментарии.

Установите "-define precision:highres-transform=true", чтобы увеличить точность преобразования.


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


bash$ convert cockatoo.jpg profile.exif
Результаты могут зависеть от того, имеет ли исходное изображение профиль. Так как "-profile" оператор, преобразование выполняется каждый раз, когда он встречается в командной строке.

Поскольку профили ICC не обязательно обратимые (симметричные), дополнительные шаги преобразования могут привести к нежелательным результатам.

Работа с профилями - волшебное искусство. Не все форматы поддерживают профили, но профили можно включать в JPEG, PNG, TIFF и даже GIF. К сожалению, многие программы не понимают цветовые профили.

Чтобы узнать, какие профили присутствуют в изображении, используйте команду.

bash$ identify -verbose image.tif | grep 'Profile-.*bytes'
Профили включают следующие данные.

~ EXIF, метаданные цифровой камеры.
~ ICC, профиль цветового пространства изображения.
~ ICM, профиль управление цветом Microsoft (например, ICC).
~ IPTC, изображение и информация об авторе.
~ 8BIM, профиль метаданных Photoshop.
~ XMP, платформа расширяемых метаданных Adobe (XMP).
Можно извлечь профиль командой.

bash$ convert -define jpeg:size=64x64 image.jpg xmp:profile.xmp
Также вставить произвольный профиль (как «blob» или двоичную строку).

:: -profile 'profile_name:data_file'
(В этом случае файл "data_file" добавляется к изображению как профиль profile_name.)

RGB, sRGB и CMYK не являются цветовыми пространствами, это цветовые системы, которыми ImageMagick управляет с помощью оператора "-colorspace". Но в каждой цветовой системе возможно бесконечное количество различных цветовых пространств.

Чтобы корректно работать с изображениями, вам нужны профили ICC (или ICM), которые точно характеризуют цвета фотографий. Обычно встраивают профили ICC.

Исходный профиль описывает цвета в вашем изображении "так, как они есть". Целевой профиль описывает цвета в выходном изображении после всех преобразований.

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

При преобразовании из субтрактивного в аддитивное цветовое пространство (или наоборот) без использования необходимого профиля вы не получите «правильные» цвета или яркость.

Вы можете загрузить цветовые профили с сайта "International Color Consortium".

Изменение цветового пространства через профили.

Команда ниже позволяет преобразовать цветовые пространства.

bash$ convert cmyk_image.jpg -colorspace rgb rgb_image.jpg
Если нет встроенного профиля, то первый оператор "-profile" считается входным профилем. Второй оператор определяет выходной профиль.

Оператор "-profile" должен быть помещен между входным и выходным файлом. Используйте оператор "+profile", чтобы удалить любой имеющийся профиль ICC.

bash$ convert rgb_image.jpg -profile USCoat.icm cmyk_image.jpg
bash$ convert rgb_image.jpg +profile icm \
-profile sRGB.icc -profile USCoat.icm cmyk_image.jpg
Если исходное изображение уже содержит профиль, например, CMYK, не следует добавлять еще один профиль.

bash$ convert cmyk_image.jpg -profile "CMYK.icc" -profile "RGB.icc" \
output_image.jpg
В данном случае команда приведет к преобразованию CMYK -> CMYK -> RGB. Но поскольку пространство CMYK не является симметричным, дополнительный шаг преобразования может привести к катастрофическим изменениям цвета.

Изменение цветового профиля.

Все изображения должны иметь встроенные профили ICC. Но в некоторых случаях придется воспользоваться настройками - "-black-point-compensation" и "-intent relative", чтобы получить желаемый результат.

bash$ convert rgb_image.jpg -intent relative -black-point-compensation \
-profile CMYK_PROFILE cmyk_image.jpg
Настройки "-black-point-compensation", "-intent" должны быть указаны перед оператором "-profile".

Метаданные EXIF.

Помимо описанной выше обработки цветового профиля, многие цифровые камеры сохраняют информацию о цветовом профиле в атрибуте профиля EXIF.

Профили IPTC.

Профиль IPTC используется в изображениях для хранения идентификационных атрибутов изображения, таких как подпись, авторство, ключевые слова и т.д.

Если вы хотите добавить к изображению профиль IPTC.

bash$ convert image.jpg -profile iptc iptc_image.jpg
Если изображение содержит профиль, вы можете сохранить его и затем добавить этот профиль к другим аналогичным изображениям.

bash$ convert iptc_image.jpg iptcData.iptc
Или вы можете извлечь текстовую версию профиля, например, для редактирования.

bash$ convert iptc_image.jpg IPTCTEXT:iptcData.pro
Также можно извлечь профиль XMP из изображения TIF.

bash$ convert picture.tif metadata.xmp

Качество изображения.

• -quality value

Уровень сжатия JPEG/MIFF/PNG.

Для JPEG и MPEG опция «quality» принимает значение от 1 (самое низкое качество изображения и максимальное сжатие) до 100 (наилучшее качество, но наименее эффективное сжатие). По умолчанию используется оценочное значение качества входного изображения, если оно может быть определено, иначе «quality» устанавливается как 92. Если «quality» больше 90, каналы цветности не подвергаются субдискретизации. Используйте параметр "-sampling-factor", чтобы указать коэффициенты для понижающей дискретизации цветности.

bash$ convert jpg_lossy.gif -quality 100% jpg_lossy_100.jpg
bash$ convert jpg_lossy.gif -quality 50% jpg_lossy_50.jpg
bash$ convert jpg_lossy.gif -quality 5% jpg_lossy_5.jpg
Для формата изображения JPEG-2000 «quality» устанавливается с помощью нелинейного уравнения библиотекой Jasper. Алгоритм предназначен для приблизительной оценки качества, обеспечиваемого форматом JPEG v1. Значение «quality» по умолчанию 100, сжатие без потерь.

Для форматов изображений MNG и PNG значение «quality» устанавливается как уровень сжатия zlib (качество 10) и адаптивная фильтрация с качеством 10. По умолчанию «quality 75» для PNG, что означает уровень сжатия 7 с адаптивной фильтрацией PNG, если изображение не имеет цветовой карты.

Для уровня сжатия 0 (значение «quality» менее 10) используется стратегия «только Хаффман», быстрая и эффективная.

Если адаптивный фильтр равен 4 или меньше, указанный тип фильтра PNG используется для всех строк развертки:

~ 0, нет (none);
~ 1, ниже (sub);
~ 2, выше (up);
~ 3, в среднем (average);
~ 4, фильтр Паэта (Paeth): (Фильтр Паэта основан на алгоритме Алана В. Паэта)
~ 5, адаптивная фильтрация используется, когда «quality» больше 50 и изображение без цветовой карты, в противном случае без фильтра;
~ 6, адаптивная фильтрация с минимальной суммой абсолютных значений;
~ 7, если MNG, применяется преобразование цвета LOCO и адаптивная фильтрация с минимальной суммой абсолютных значений;
~ 8, стратегия сжатия zlib Z_RLE (или стратегия Z_HUFFMAN_ONLY, уровень сжатия 0) используется с адаптивной фильтрацией PNG;
~ 9, используется стратегия сжатия zlib Z_RLE (или стратегия Z_HUFFMAN_ONLY, когда уровень сжатия равен 0) без фильтрации PNG.
Параметр «quality» не влияет на качество изображений PNG и MNG, поскольку сжатие всегда выполняется без потерь.

Не все комбинации уровня сжатия, стратегии и типа фильтра PNG можно получить с помощью параметра "-quality".

Значения из определений "define" имеют приоритет над значениями из параметра "-quality".

Для форматов изображений MIFF и TIFF «quality 10» - это уровень сжатия Zip/BZip от 0 (худшее, но самое быстрое сжатие) до 9 (лучшее, но самое медленное). Сжатие всегда происходит без потерь.

Для формата изображения BPG «quality 2» это фактический уровень сжатия BPG (диапазон от 0 до 51).

Прим. В компьютерной графике палитра — ограниченный набор цветов, доступный графической системе компьютера. Синоним: индексированные цвета.


• -set key value

• +set key

Задает атрибуты и свойства изображений для текущей последовательности.

Назначает (или отменяет) определенные настройки, связанные со всеми изображениями в текущей последовательности. При использовании формы "+set" этот параметр либо удаляется, либо сбрасывается до состояния по умолчанию в зависимости от ситуации.

Например, оператор изменит определенные атрибуты метаданных: -delay, -dispose, -page, -colorspace.

Если «key» не соответствует определенному известному атрибуту, настройка сохраняется как строка «свойств» произвольной формы. Такие настройки перечислены в выводе "-verbose info:". Сюда входят строковые «свойства», которые устанавливаются и присваиваются изображениям с помощью параметров "-comment", "-label", "-caption".

Настройку "-set profile" также можно использовать для вставки в файл формата PNG.

bash$ convert in.png -set profile PNG-chunk-x: <имя файла> out.png
bash$ convert in.png -set profile PNG-chunk-b01: file01 \
-profile PNG-chunk-b02: file02 out.png

• -strip

Захват любых профилей, комментариев, в том числе: bKGD, cHRM, EXIF, gAMA, iCCP, iTXt, sRGB, tEXt, zCCP, zTXt, date. Используется для удаления всех захваченных данных и комментариев.

bash$ convert histogram.gif -strip -resize 50% -separate histogram-%d.gif
bash$ convert rose: -define histogram:unique-colors=false \
-write histogram:mpr:hgram +delete \
mpr:hgram -strip -resize 50% histogram_resized.gif
bash$ convert -define jpeg:size=400x400 hatching_orig.jpg -resize '120x200' \
\( +clone -sample 1x1\! -alpha transparent -sample 1000x200\! \
-font SheerBeauty -pointsize 72 -gravity Center \
-strokewidth 8 -stroke black -fill black -annotate 0,0 '%c' \
-channel RGBA -blur 0x8 \
-strokewidth 1 -stroke white -fill white -annotate 0,0 '%c' \
-fuzz 1% -trim +repage -resize 115x \
\) -gravity North -composite -strip annotated.gif

Свойства изображений.


• -type type

Тип изображения.

Доступны опции: Bilevel, Grayscale, GrayscaleAlpha, Palette, PaletteAlpha, TrueColor, TrueColorAlpha, ColorSeparation, ColorSeparationAlpha.

TrueColor (от англ. true color — «истинный цвет») приближен к цветам «реального мира», предоставляя 16,7 млн различных цветов. 24-битный цвет TrueColor использует по 8 бит для представления красной, синей и зелёной составляющих. Кодируется 2 в 8 степени - это 256 различных вариантов представления цвета для каждого канала, или всего 16777216 цветов (256×256×256).

Обычно, когда формат поддерживает различные субформаты (например, оттенки серого или «истинный цвет»), кодировщик пытается выбрать самый эффективный субформат. Параметр "-type" позволяет переопределить выбор.

Например, чтобы предотвратить преобразование цветного изображения JPEG в черно-белое.

bash$ convert bird.png -type TrueColor bird.jpg
Точно так же "-type TrueColorAlpha" заставит кодировщик создать альфа-канал, даже если изображение «непрозрачное», но выходной формат поддерживает прозрачность.

Укажите опцию "-type optimize", чтобы изображение было записано в файл с наименьшим возможным размером.

Метки, имя.


• -label name

Присвоит изображению метку.

Опция позволяет присвоить изображению метку при считывании или создании. Вы можете использовать операцию "-set" для переназначения меток уже считанных изображений. Форматы TIFF, PNG, MIFF поддерживают сохранение информации метки вместе с изображением.

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

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

Например: -label "%m:%f %wx%h" bird.miff

Метка не видна на изображении, но внедряется в поток данных с помощью тега «Label» или аналогичного механизма. Если вы хотите, чтобы метка была видна на изображении, воспользуйтесь методами "-draw".

bash$ convert -label 'logo' logo: label_logo.png
bash$ convert -label 'PNG' present.gif label.png
Если первым символом «string» является «@», метка считывается из файла, названного оставшимися знаками в строке.


• -name

Назначает изображению имя.


• -taint

Пометит изображение как измененное.

Интерполяция, виртуальные пиксели.


• -intensity method

Метод генерации значения интенсивности из пикселя.

ImageMagick предоставляет ряд методов, используемых в ситуациях, когда оператору необходимо определить одно значение шкалы серого для какой-либо цели из изображения с красными, зелеными и синими пиксельными компонентами. Обычно используется формула Rec709Luma (она же применяется в преобразовании "-colorspace gray").

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

~ Rec601Luma 0,298839R'+0,586811G'+0,114350B'
~ Rec601Luminance 0,298839R+0,586811G+0,114350B
~ Rec709Luma 0,212656R'+0,715158G'+0,072186B'
~ Rec709Luminance 0,212656R+0,715158G+0,072186B
~ Brightness max(R',G',B')
~ Lightness (min(R',G',B')+max(R',G',B'))/2,0

* Обратите внимание, что указанные выше значения R, G, B это значения линейного RGB изображения, а R', G', B' нелинейные значения sRGB.


Эти методы вычисления интенсивности являются математическими по своей природе и будут использовать значения, соответствующие каналам R, G, B, независимо от того, какое цветовое пространство используется.

~ Average (R'+G'+B')/3,0
~ MS (R'^2+G'^2+B'^2)/3,0
~ RMS sqrt((R'^2+G'^2+B'^2)/3,0)
Методы часто применяются для других целей, таких как создание разностного изображения в градациях серого из двух цветных (например, с помощью "-compose Difference").

Настройка MS подходит для минимизации цветовых ошибок. В то время как метод RMS подходит для расчета расстояния цветового вектора на основе цветоразностного изображения.

См. также "-grayscale" - оператор применяет одну из приведенных выше формул градации серого непосредственно к изображению без установки параметра "-intensity".

Алгоритм преобразования цветового пространства "-colorspace grey" также использует текущую настройку интенсивности, но всегда преобразует изображение в соответствующее цветовое пространство sRGB или linear-RGB перед применением вышеуказанной функции.

bash$ convert test.png -intensity brightness -fx intensity gray_brightness.png
Список возможных методов настройки яркости пикселей доступен как опция "-list density".

Операторы, на которые влияет параметр "-intensity": -adaptive-blur, -adaptive-sharpen, -black-threshold, -clut, -colors, -compose {LightenIntensity, DarkenIntensity, CopyOpacity, CopyBlack}, -contrast-stretch, -distort {ErodeIntensity, DilateIntensity}, -normalize, -random-threshold, -range-threshold, -selective-blur, -shade, -threshold, -tint, -white-threshold.


• -interpolate type

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

Оператор "-interpolate" определяет, как интерпретировать поиск цвета изображения. Это важно для различных операций с изображениями, таких как "-fx" и "-distort", а также зависящих от оператора функций.

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

Возможные значения:

~ average, средний цвет окружающих четырех пикселей;
~ average4, средний цвет окружающих четырех пикселей;
~ average9, средний цвет окружающих девяти пикселей;
~ average16, средний цвет окружающих шестнадцати пикселей;
~ background;
~ bilinear, двойная линейная интерполяция пикселей (по умолчанию);
~ blend;
~ catrom, бикубический из окружающих 16 пикселей;
~ integer, цвет верхнего левого пикселя;
~ mesh, делит область на две плоские треугольные для интерполяции;
~ nearest-neighbor, ближайший пиксель к точке поиска (функция округления);
~ spline, прямые сплайновые кривые (цвета размыты).
Параметр важен для операторов искажения, таких как "-distort", "-implode", "-transform" и "-fx".

Чтобы вывести полный список методов интерполяции, введите "-list interpolate".

См. также "-virtual-pixel" для управления поиском позиций за пределами областей.

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

Простые методы интерполяции.

«Nearest-Integer» - простой метод интерполяции: алгоритм выберет цвет одного пикселя из исходного изображения без какого-либо смешивания. Метод сохраняет исходные цветовые значения изображения, но за счет эффектов наложения и, как правило, менее «гладкого» вида изображений.

Метод «Nearest-Neighbour» похож на первый метод, но отличается способом поиска. «Nearest» выбирает пиксель, ближайший к координате поиска с плавающей запятой, и даст более правильный результат, чем «Nearest-Integer».

«Blend» будет смешивать (усреднять) ближайшие 1, 2 или 4 пикселей, в зависимости от их расстояния до точки выборки.

«Average» никогда не будет обеспечивать точноесоответствие цвета исходному, но всегда смешивает 4 окружающих пикселя для получения локального среднего значения.

«Average9» усредняет ближайшие 9 пикселей вокруг точки выборки, что приводит к размытию.

«Average16» будет усреднять ближайшие 16 пикселей вокруг точки выборки, давая еще более размытый результат.

Также доступен простой метод интерполяции «Background», он возвращает текущий цвет фона для любой выборки исходного изображения.

«Bilinear» (или линейная интерполяция) - метод интерполяции по умолчанию и, вероятно, один из самых простых способов получения реального интерполированного результата путем объединения цветов пикселей вокруг точки поиска или выборки. Метод соединяет линии полос в ортогональных направлениях, чтобы определить цвет данной точки выборки.

Метод «Mesh» является разновидностью «Bilinear» интерполяции.

«Catmull-Rom», «Catrom» (обычно неправильно называют «бикубической» интерполяцией) более сложен для определения цветов при поиске точки. Метод не только учитывает цвета в какой-либо области, но анализирует цвета за пределами этих ближайших пикселей (16 пикселей в области 4x4 вокруг точки выборки). Результат очень похож на интерполяцию «Bilinear», однако имеет более плавную кривую смешивания. На кривую также сильно влияют окружающие цвета, что приводит либо к очень сильному и резкому изменению цвета, либо к более плавному, смешанному изменению цвета, определяемому окружающими цветами.

Чтобы избежать эффекта звона, можно проводить операции изменение размеров и интерполяцию в цветовом пространстве, отличном от «RGB», например, в цветовом пространстве «Lab» или «Luv».

Метод «Spline» аналогичен «Catrom», также использует ближайшие 16 пикселей для определения цвета. Однако это очень размытая гауссовская интерполяция, поэтому ее можно применить для сглаживания.

«Bilinear», «Mesh» и «Catrom» обычно дают очень хорошие и похожие результаты.

bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Integer -clut gray_levels_integer.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate NearestNeighbor -clut gray_levels_nearest.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Average -clut gray_levels_average.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Blend -clut gray_levels_blend.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate BiLinear -clut gray_levels_bilinear.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Catrom -clut gray_levels_catrom.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Spline -clut gray_levels_spline.jpg

• -statistic type geometry

Заменит каждый пиксель соответствующей статистикой из окрестности.

Можно выбрать следующие варианты.

~ Contrast, максимальная разница (макс.-мин.), деленная на (макс.+мин.) значение в окрестности.
~ Maximum, максимальное значение на канал в окрестности.
~ Gradient, максимальное значение разницы (макс.-мин.) в окрестности.
~ Maximum, максимальное значение на канал в окрестности.
~ Minimum, минимальное значение на канал в окрестности.
~ Mean, среднее значение на канал.
~ Median, среднее значение на канал в окрестности.
~ Mode, часто применяемый режим, значение на канал в окрестности.
~ Nonpeak, значение непосредственно перед или после медианного значения на канал в окрестности.
~ RMS, среднеквадратичное значение на канал в окрестности.
~ StandardDeviation, значение стандартного отклонения на канал в окрестности.
bash$ convert rose: -statistic Mode 10 rose_paint_mode.gif

• -storage-type type

Возможные типы пикселей.

~ char unsigned characters
~ double doubles
~ float floats
~ integer integers
~ long longs
~ quantum pixels (диапазон, определяемый версией ImageMagick)
~ short unsigned shorts
Типы «float» и «double» нормализованы от 0,0 до 1,0, или значения пикселей варьируются от 0 до максимального значения, которое способен поддерживать тип.


• -virtual-pixel method

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

Параметр важен для таких операторов, как "-distort", "-implode" и "-fx". Однако он также влияет на операции, получающие доступ к пикселям непосредственно за пределами окна-ячейки, такие как "-convolve", "-blur" и "-sharpen".

Выберите один из следующих способов:

~ background, область вокруг изображения это цвет фона;
~ black, область вокруг изображения черная;
~ checker-tile, чередование квадратов с изображением и цветом фона;
~ dither, неслучайный паттерн с размытием 32x32;
~ edge, расширит крайний пиксель до бесконечности;
~ gray, область вокруг изображения серая;
~ horizontal-tile, горизонтально расположит изображение, цвет фона сверху/снизу;
~ horizontal-tile-edge, горизонтально расположит изображение мозаикой и воспроизведет краевые пиксели;
~ mirror, зеркальные тайлы;
~ random, выберет случайный пиксель из изображения;
~ tile, мозаика;
~ transparent, область вокруг изображения «прозрачная» черная;
~ vertical-tile, вертикальная мозаика, стороны - цвет фона;
~ vertical-tile-edge, вертикальная мозаика и копирование граничных пикселей;
~ white, область вокруг изображения белая.
Значение по умолчанию «Edge». Значение оказывает минимальное влияние на краевые эффекты при обработке изображений.

Параметр «Tile» нужен, чтобы краевые эффекты накладывались на границы изображения.

bash$ convert tree.gif -set option:distort:viewport 70x70-19-19 \
-virtual-pixel Tile -filter point -distort SRT 0 \
+repage virtual_tile.gif
Это позволяет гарантировать, что изображение остается «мозаичным».

«Mirror» очень похож на «Tile» и может быть хорошим выбором для некоторых улучшений изображения, чем значение по умолчанию «Edge».

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

Настройки «White», «Gray» и «Black» аналогичны предыдущей настройке «Transparent». Они возвращают указанный цвет для любого пикселя, выходящего за пределы области.

Ни один из методов "-virtual-pixel" не возвращает какой-либо цвет, кроме тех цветов, что уже присутствует в изображении (если только цвет не был определен с помощью настроек «transparent», «background», «black», «white», «gray»). Цвета никогда не создаются, хотя можно добавить один конкретный цвет.

Полный список опций доступен с помощью команды "-list virtual-pixel" .

Свертка, сдвиг.


• -copy geometry offset

Копирует пиксели из одной области изображения в другую.


• -displace horizontal-scale {%} {!}

• -displace horizontal-scale x vertical-scale {%} {!}

Сдвиг пикселей изображения в соответствии с картой смещения.

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

Любые идеальные серые области на карте смещения создают нулевое смещение. Темные (черные) области создают максимальное отрицательное смещение поисковой точки, а белые - максимальное положительное смещение поисковой точки.


* Обратите внимание, что смещается поиск «фона».


Аргументы определяют максимальное количество смещения в пикселях для карты. Если масштаб смещения велик, можно также искать части «фонового» изображения за пределами самой карты. То есть вы можете очень легко скопировать часть исходного изображения за пределами области наложения в область наложения.

Флаг "%" устанавливает масштаб смещения относительно размера наложенного изображения, где 100% это половина ширины/высоты изображения. Флаг "!" переключает процентные аргументы, чтобы ссылаться на размер конечного изображения.


• -implode factor

Сместит пиксели изображения к центру.

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

bash$ convert koala.gif -implode.6 implode.gif
bash$ convert koala.gif -implode 5 implode_big.gif
Однако имейте в виду, что значения "-implode" выше 1.0 зависит от настройки виртуальных пикселей.

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

bash$ convert koala.gif -implode -2 explode.jpg

• -roll {+-} x {+-} y

Свернет изображение по вертикали или горизонтали на указанную величину. Отрицательное смещение «x» перемещает изображение справа налево. Негативное смещение «y» перемещает изображение снизу вверх.

bash$ convert koala.gif -roll +0+20 roll_horiz.gif
Конечно, вы также можете повернуть изображение.

bash$ convert koala.gif -roll +30+0 roll_vert.gif
Или, используя отрицательные значения, повернуть в противоположном направлении.

bash$ convert koala.gif -roll +0-20 roll-horiz.gif
Оператор важен для мозаичных изображений, поскольку изменяет исходную точку тайла, не нарушая мозаики.


• -shear Xdegrees [x Ydegrees]

Сдвинет изображение по оси «x» и/или оси «y».

Углы сдвига могут быть положительными, отрицательными или нулевыми. Когда «Ydegrees» опущен, по умолчанию используется «Xdegrees». Если заданы два угла, горизонтальный сдвиг выполняется перед вертикальным. Сдвиг контролируется соответствующим углом. Пустые треугольники, оставшиеся после обрезки, заполняются цветом, определенным параметром "-background".

Оператор "-shear" берет каждую строку (или столбец) пикселей и перемещает их так, чтобы каждая строка (или столбец) смещалась на одинаковую величину относительно соседней строки (или столбца).

bash$ convert koala.gif -background Blue -shear 20 shear_rot.gif
bash$ convert koala.gif -background Blue -shear 20x0 shear_x.gif
bash$ convert koala.gif -background Blue -shear 0x50 shear_y.gif
bash$ convert koala.gif -background Blue -shear 20x50 shear_xy.gif
bash$ convert koala.gif -background Blue -shear 20x0 -shear 0x50 shear_xy2.gif
bash$ convert koala.gif -background Blue -shear 0x50 -shear 20x0 shear_yx.gif

• -splice geometry

Добавит строки и столбцы текущего цвета "-background" в изображение в соответствии с заданной настройкой "-gravity".

bash$ convert rose: -background blue -splice 20x10+40+30 splice.gif
bash$ convert rose: -background blue -splice 20x0+40+0 splice_column.gif
bash$ convert rose: -background blue -splice 0x10+0+30 splice_row.gif
bash$ convert rose: -background blue -splice 20x10 splice_topleft.gif
Если цвет фона не установлен, ImageMagick попытается определить его значение. Это означает, что для некоторых изображений цвет может стать белым (значение по умолчанию), а для других черным.


* Всегда устанавливайте значение "-background" перед использованием оператора.


Оператор "-splice" хорошо работает при добавлении пространства только к одному краю изображения.

Примеры.

bash$ convert rose: -background blue -splice 0x10 splice_top.gif
bash$ convert rose: -gravity south \
-background blue -splice 0x10 splice_bottom.gif
bash$ convert rose: -background blue -splice 20x0 splice_left.gif
bash$ convert rose: -gravity east \
-background blue -splice 20x0 splice_right.gif
bash$ convert rose: -gravity southeast \
-background blue -splice 20x10 splice_botright.gif
Или добавить область для текстовой метки.

bash$ convert rose: -gravity South -background LimeGreen -splice 0x15 \
-annotate 0x0 'Rose' splice_label.gif

• -spread amount

Смещение пикселей изображения на произвольную величину.

Аргумент «amount» определяет размер окрестности вокруг каждого пикселя, из которой выбирается пиксель для смешивания. Поиск контролируется параметром "-interpolate".

Оператор "-spread" заменит цвет каждого пикселя на случайный соседний исходного изображения. Выбор будет сделан в соответствии с использованной интерполяцией пикселей (настройка "-virtual-pixel").

bash$ convert -size 80x40 xc:red xc:blue -append -spread 5 spread_interpolated.png
bash$ convert -size 80x80 xc: -virtual-pixel black -spread 10 spread_virtual.png
Чтобы избежать проблем с виртуальными пикселями и возможным «смещением цвета краев», можно настроить интерполяцию как "-interpolate Nearest -virtual-pixel Mirror".

bash$ convert rose: -interpolate nearest -virtual-pixel mirror \
-spread 5 spread_rose.png

• -swirl degrees

Пиксели в изображении «закручиваются» вокруг центра. «Degrees» определяет силу завихрения.

Оператор "-swirl" действует как миксер для торта. Он будет деформировать изображение по кругу на градусы, указанные в аргументе.

bash$ convert koala.gif -swirl 180 swirl.jpg
bash$ convert koala.gif -bordercolor white -border 20x20 \
-swirl 180 -implode.3 -shave 20x20 whirlpool.jpg

• -wave amplitude

• -wave amplitude x wavelength

Разделит столбцы изображения на синусоидальную волну.

Оператор "-wave" похож на "-shear", он также добавляет к изображениям «линейное смещение». Однако этот оператор будет перемещать только столбцы пикселей по вертикали в соответствии с синусоидальной волновой функцией.

Оператор "-wave" принимает два аргумента: максимальная высота или амплитуда, по которым пиксели будут смещаться вверх или вниз и длина волны синусоидальной функции в пикселях.

bash$ convert koala.gif -background Blue -wave 10x64 wave.jpg

Пороговая настройка.


• -auto-threshold method

Сегментация изображения. Автоматически выполняет пороговую обработку изображений. Допустимые алгоритмы.

~ Undefined, метод не указан (эквивалент OTSU).
~ Kapur, пороговая обработка максимальной энтропии.
~ OTSU, пороговая обработка изображений на основе кластеров.
~ Triangle, геометрический метод определения порога.
Вычисленное пороговое значение возвращается как свойство изображения "auto-threshold: verbose". Можно использовать вместо этого настройку "-define auto-threshold:verbose true".


• -black-point-compensation

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


• -black-threshold value {%}

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

Пороговое значение может быть задано в процентах или в виде абсолютного целого числа в пределах [0, QuantumRange], соответствующих желаемому значению "-channel". См. "-threshold" для получения дополнительных сведений о порогах и результирующих значениях.


• -blue-primary x,y

Установит основную точку синей цветности.


• -clamp

Установит каждый пиксель, значение которого ниже нуля, на ноль, а любой пиксель, значение которого выше квантового диапазона, на квантовый диапазон (например, 65535), в противном случае значение пикселя останется неизменным.

bash$ convert area.gif -define convolve:scale=-1\! \
-morphology Convolve Laplacian:0 -clamp neigh_edge.gif
bash$ convert -size 20x600 gradient: -rotate 90 \
-level 20% -clamp +level 20% level_hdri_clamp.png im_profile -s level_hdri_clamp.png level_hdri_clamp_pf.gif

• -color-threshold start-color-stop-color

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


• -green-primary x,y

Первичная точка зеленой цветности.


• -lat width

• -lat widthxheight {+-} offset {%}

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

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

bash$ convert input.png -lat 17 output.png
Маленький размер окна сделает порог более чувствительным к небольшим изменениям освещенности, он быстрее вычисляется, но на него отрицательно влияет шум изображения.


• -perceptible epsilon

Установит каждый пиксель, значение которого меньше «epsilon» на «-epsilon» или «epsilon» (в зависимости от того, что ближе); в противном случае значение пикселя остается неизменным.


• -random-threshold lowxhigh

Применит к изображению случайный порог.

bash$ convert gradient.png -channel All \
-random-threshold 0x100% random_grad_0x100.gif
bash$ convert gradient.png -channel All \
-random-threshold 10x90% random_grad_10x90.gif
bash$ convert gradient.png -channel All \
-random-threshold 25x75% random_grad_25x75.gif
bash$ convert gradient.png -channel All \
-random-threshold 50x50% random_grad_50x50.gif

• -range-threshold low-black,low-white,high-white,high-black

Жесткое или мягкое ограничение порога в некотором диапазоне значений.


• -red-primary x,y

Установит основную точку красной цветности.


• -threshold value {%}

Любым значениям пикселей (точнее, пикселям каналов, указанных опцией "-channel"), которые превышают указанный порог, повторно назначается максимальное значение канала, а всем остальным значениям присваивается минимальное.

Пороговое значение может быть задано в процентах или как целое число, соответствующие желаемому значению канала. Когда задано как целое число, минимальное достижимое значение равно 0 (соответствует черному цвету, если все каналы задействованы), но максимальное значение (соответствующее белому) - это значение квантовой глубины, зависящее от конкретной версии ImageMagick. Поэтому лучше указывать пороговые значения в процентах.

Следующее приведет к тому, что пиксели со значениями красного выше 50% станут полностью красного цвета, в то время как пиксели с красным ниже 50% будут установлены на 0 в красном канале. Зеленый, синий и альфа-каналы (если они есть) останутся без изменений.

bash$ convert in.png -channel red -threshold 50% out.png
В качестве непрактичных, но поучительных примеров можно создать полностью черное и полностью белое изображение с теми же размерами, что и входное изображение.

bash$ convert in.png -channel RGB -threshold 100% black.png convert in.png -channel RGB -threshold -1 white.png
См. также "-black-threshold" и "-white-threshold".


• -white-point x,y

Цветность белой точки.


• -white-threshold value {%}

Сделает белыми все пиксели выше порогового значения, оставив равные или ниже порогового значения пиксели без изменений.

Пороговое значение может быть задано в процентах или в виде абсолютного целого числа в пределах [0, QuantumRange], соответствующее желаемому значению "-channel". См. "-threshold" для получения дополнительных сведений о порогах и результирующих значениях.

Другие функции.


• -immutable

Сделает изображение неизменяемым.


• -maximum

Возвращает максимальную интенсивность последовательности изображений. Выберет «максимальное» значение из всех окружающих пикселей.

Устаревший вариант одноименного метода.


• -minimum

Возвращает минимальную интенсивность последовательности изображений. Выберет «минимальное» значение из всех окружающих пикселей.

Устаревший вариант одноименного метода.


• -mode geometry

Установит цвет пикселя как «преобладающий цвет» соседних с ним пикселей.

bash$ convert rose: -crop 20x20 +repage +adjoin rose_tiles_%02d.gif montage -mode concatenate -tile 4x rose_tiles_*.gif rose_rejoined.gif

• -sort-pixels

Сортирует пиксели в каждой строке сканирования в порядке возрастания интенсивности.

Автоматический поворот фотографий.


• -auto-orient

Настраивает изображение таким образом, чтобы ориентация была удобной для просмотра. Оператор считывает и сбрасывает настройку профиля изображения EXIF, а затем выполняет поворот изображения на 90 градусов.


* Настройка профиля EXIF устанавливается с помощью датчика силы тяжести в цифровой камере.


Также ImageMagick предоставляет специальный оператор "-orient", возможные значения выводятся командой "-list orientation".

bash$ convert pagoda_sm.jpg -orient bottom-right \
-format '%[exif:orientation]' info:
bash$ convert -define jpeg:size=500x180 hatching_orig.jpg -auto-orient \
-thumbnail 250x90 -unsharp 0x.5 thumbnail.gif
Вращение без потерь можно осуществить с помощью оператора "-rotate" , а затем либо сбросить настройку ориентации EXIF (с помощью "-orient"), либо просто удалить данные EXIF.


• -orient image orientation

Указывает ориентацию изображения цифровой камеры.

Выберите одну из следующих опций: bottom-left, right-top, bottom-right, top-left, left-bottom, top-right, left-top, undefined, right-bottom.

Уровни каналов.


• -channel type

Регулирует цветовые каналы изображения.

Выберите следующие значения: Red, Green, Blue, Alpha, Gray, Cyan, Magenta, Yellow, Black, Opacity, Index, RGB, RGBA, CMYK, CMYKA.

Вышеупомянутые каналы также могут быть указаны в виде списка, разделенного запятыми, или сокращены как объединения букв R, G, B, A, O, C, M, Y, K.

Цифры также применяются для указания каналов.

~ 0, Red или Cyan.
~ 1, Green или Magenta.
~ 2, Blue или Yellow.
~ 3, Black.
~ 4, Alpha или Opacity.
~ 5, Index.
Например, чтобы выбрать только каналы Red и Blue, введите команду.

:: -channel Red,Blue -channel R,B -channel RB -channel 0,2
Выбрать все каналы, присутствующие в изображении, можно с помощью специальной опции «All».


* Не все операторы поддерживают настройку «chanell».


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

Например, для операторов "-auto-level" и "-auto-gamma" цветовые каналы изменяются таким образом, чтобы цвета оставались синхронизированными. Но если флаг "sync" не установлен, каждый канал изменяется независимо от других, что может привести к искажению цвета.

Метод "-morphology Convolve" и математические методы "-compose" понимают флаг "sync" для изменения поведения цветов пикселей в соответствии с альфа-каналом (если он есть). Другими словами, полностью прозрачные цвета не должны влиять на конечный результат.

Полный список значений доступен как опция, введите "-list channel".

По умолчанию ImageMagick устанавливает для "-channel" значение "RGBK, sync" (настройка действует на все цветовые каналы, кроме канала прозрачности). Опция "+channel" вернет настройку к значениям по умолчанию.

bash$ convert rose: -colorspace HSI -channel B -separate channel_average.gif
bash$ convert rose: -colorspace HSL -channel B -separate channel_lightness.gif
bash$ convert rose: -colorspace HSB -channel B -separate channel_brilliance.gif
bash$ convert rose: -colorspace CMYK -channel K -negate -separate channel_black.gif
bash$ convert rose: -colorspace LAB -channel R -separate channel_lab_light.gif
Операторы, на которые влияет параметр "-channel", следующие: -auto-gamma, -auto-level, -black-threshold, -blur, -clamp, -clut, -combine, -composite (только математические методы), -convolve, -contrast-stretch, -evaluate, -function, -fx, -gaussian-blur, -hald-clut, -motion-blur, -morphology, -negate, -normalize, -ordered-dither, -radial-blur, -random-threshold, -range-threshold, -separate, -threshold, -white-threshold.

Прим. Некоторые операторы не понимают настройку по умолчанию "+channel". Например, "-threshold" будет отображать изображение в оттенках серого перед установкой порога, если не был определен параметр "-channel". Подобное поведение нельзя контролировать с помощью "sync".

Также некоторые операторы, такие как "-blur", - "-gaussian-blur", изменят обработку цветовых каналов, если альфа-канал включен с помощью "-channel". Обычно это делается для того, чтобы прозрачные цвета считались «полностью прозрачными». Однако более новые эквиваленты "-morphology" умеют работать с флагом "sync" и будут правильно обрабатывать прозрачность.

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

Альфа-канал (маска-канал) - способ объединить переходную прозрачность с изображением. Формат GIF поддерживает простую бинарную прозрачность, когда любой пиксель может быть либо полностью прозрачным, либо непрозрачным. Формат PNG позволяет использовать 254 (или 65534) уровня частичной прозрачности. Все три типа PNG-изображений («TrueColor», «GrayScale» и индексированная палитра) могут поддерживать альфа-канал, хотя обычно он применяется лишь к изображениям «TrueColor». Вместо того чтобы сохранять три байта для каждого пикселя (красный, зелёный и синий, RGB), сохраняются четыре: красный, зелёный, синий и альфа, таким образом получается RGBA. Переходная прозрачность позволяет создавать «спецэффекты».


• -channel-fx expression

Обмен, извлечение или копирование каналов изображений: определяются один или несколько каналов, мнемонических или числовых. Например, «red» или 0, «green» или 1 и т.д.

Поддерживает следующие операции:

~ "<=>" - поменять местами два канала (например, красный <=> синий);
~ "=>" - скопировать один канал в другой (например, красный => зеленый);
~ "=" - присвоить каналу постоянное значение (например, красный = 50%);
~ "," - создать изображение с каналами в указанном порядке (например, красный, зеленый);
~ ";" - добавить новое выходное изображение для следующего набора операций с каналом (например, красный, зеленый, синий);
~ "|" - перейти к следующему входному изображению для источника данных канала (например, | серый => альфа).
Например, чтобы создать 3 изображения в градациях серого из красного, зеленого и синего каналов изображения.

:: -channel-fx "red; green; blue"
Канал без символа операции подразумевает разделение (точка с запятой).

Здесь мы берем изображение sRGB и изображение в градациях серого и вводим изображение в градациях серого в альфа-канал.

bash$ convert wizard.png mask.pgm -channel-fx '| gray= > alpha' wizard-alpha.png
Используйте аналогичную команду для определения маски чтения.

bash$ convert wizard.png mask.pgm -channel-fx '| gray= > read-mask' wizard-mask.png
Добавьте "-debug pixel" перед параметром "-channel-fx" для отслеживания морфологии канала.

Обнуление цветовых каналов.

Прямой метод - использовать оператор "-evaluate" для обнуления всех значений в нежелательном канале.

bash$ convert rose: -colorspace HSL \
-channel G -evaluate set 0 +channel \
-colorspace sRGB rose_grey.gif
Однако известны не столь очевидные способы обнуления.

~ -channel G -evaluate set 0 +channel
~ -channel G -fx 0 +channel
~ -channel RB -separate -background black -combine +channel
~ -gamma 1,0,1
~ -channel G -threshold 101% +channel
~ -channel G -threshold -1 -negate +channel
~ -fill black -colorize 0,100%,0

* Прим. Математическая морфология (ММ) — теория и техника анализа и обработки геометрических структур, основанная на теории множеств, топологии и случайных функциях. В основном применяется в обработке цифровых изображений, но также может быть применима на графах, полигональной сетке, стереометрии и многих других пространственных структурах.



• -combine

Объединит несколько изображений в одно.

Ранее установленные с помощью параметра "-channel" каналы для результирующего изображения берутся из значений оттенков серого каждого изображения в последовательности по порядку.

Опцию можно рассматривать как инверсию оператора "-separate" (при прочих равных настройках).

bash$ convert rose: -separate -swap 0,2 -combine rose_rb_swap.gif
bash$ convert original.png -channel RGB -separate sepimage.png
bash$ convert sepimage-0.png sepimage-1.png sepimage-2.png -channel RGB \
-combine imagecopy.png
Операторы "-combine" и "-separate" игнорируют порядок, определенный "-channel". Каналы всегда будут обрабатываться в порядке "Red, Green, Blue, Matte".

Объединение изображений каналов, отличных от RGB.

Оператор можно применять в разных цветовых пространствах, но требуется указать применяемое пространство с помощью оператора "-set colorspace" .

bash$ convert separate_HSB_?.gif -set colorspace HSB -combine \
-colorspace sRGB rose_HSB_combined.gif
bash$ convert rose: -colorspace Lab -separate \
\( -clone 0 -negate \) -swap 0 +delete \
-combine -set colorspace Lab \
-colorspace sRGB rose_light_neg.gif

• -separate

Разделит каналы RGB изображения на каналы в градациях серого. Укажите канал с помощью настройки "-channel".

Простой способ разделить цветовые каналы - применить оператор "-separate" для извлечения текущего содержимого каждого канала в градациях серого.

bash$ convert rose: -channel R -separate separate_red.gif
bash$ convert rose: -channel G -separate separate_green.gif
bash$ convert rose: -channel B -separate separate_blue.gif
Оператор "-separate" позволяет разделить несколько цветовых каналов в соответствии с настройкой "-channel". Количество элементов в "-channel" будет определять количество созданных изображений (в порядке RGBA).

bash$ convert rose: -separate separate_RGB_%d.gif
bash$ convert rose: -colorspace CMYK -separate separate_CMYK_%d.gif

* Обратите внимание, что по умолчанию параметр "-channel" не включает специальный прозрачный канал.


Вы можете извлекать определенные значения каналов из цветовых пространств для специальных целей. Например, здесь мы извлекаем яркость или интенсивность оттенков серого из встроенного изображения розы.

bash$ convert rose: -colorspace HSI -channel B -separate channel_average.gif
bash$ convert rose: -colorspace HSL -channel B -separate channel_lightness.gif
bash$ convert rose: -colorspace HSB -channel B -separate channel_brilliance.gif
bash$ convert rose: -colorspace CMYK -channel K -negate -separate channel_black.gif
bash$ convert rose: -colorspace LAB -channel R -separate channel_lab_light.gif
Канал «Lightness» цветового пространства LAB (а также LUV) считается наиболее подходящим для визуального восприятия человеком.

Другие методы разделения каналов.

bash$ convert rose: -fx R channel_red.gif
bash$ convert rose: -fx G channel_green.gif
bash$ convert rose: -fx B channel_blue.gif

Таблицы цветов LUT, Hald.


• -clut

Заменит значения каналов в первом изображении на значения соответствующего канала во втором изображении.

Второе изображение (LUT) обычно представляет градиентное изображение с гистограммами каналов.

Опция дополнительно контролируется параметром "-interpolate", который особенно удобен для LUT, если его длина недостаточна для достижения уровня качества (Q), установленного ImageMagick. (Поэтому рекомендуется настроить параметр "-interpolate" как «bilinear» и «catrom».)

Значения в канале, определенные параметром "-channel", будут заменены на новые значения. В частности, поскольку значение по умолчанию для "-channel" установлено как RGB, прозрачность (альфа/матовый канал) не изменится, если параметр "-channel" не перенастроен.

Когда альфа-канал установлен, он обрабатывается оператором "-clut" так же, как другие каналы.

Если изменяемое изображение или поисковое изображение не содержат прозрачности (т.е. альфа-канал не существует), но параметр "-channel" включает альфа-канал, предполагается, что изображение представляет градиент оттенков серого, который используется для замены значений альфа-канала. То есть вы можете использовать изображение CLUT в градациях серого для настройки включенного альфа-канала изображения, или перевести изображение в оттенки серого с помощью цветов CLUT.

Изменение цвета изображений с помощью таблиц.

Существует два типа цветных LUT таблиц: простые одномерные или «поканальные» и трехмерные цветные LUT таблицы. Таблица LUT канала имеет три независимых таблицы поиска: по одной для каналов RG и B. Каждая запись в LUT канала сопоставляет значение входного со значением выходного. На красный канал выходного изображения влияет только исходное значение красного цвета входного изображения.

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

Файл LUT не обязательно должен быть большим.

bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Integer -clut gray_levels_integer.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate NearestNeighbor -clut gray_levels_nearest.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Average -clut gray_levels_average.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Blend -clut gray_levels_blend.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate BiLinear -clut gray_levels_bilinear.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Catrom -clut gray_levels_catrom.jpg
bash$ convert gray_image.jpg gradient_levels.png \
-interpolate Spline -clut gray_levels_spline.jpg
Настройки «Integer» и «Nearest» не сглаживают цвета. Поэтому смешанные цвета не будут добавляться. Параметр «BiLinear» будет создавать полосы, но только в виде резких изменений градиента. «Catrom» сгладит изменения цвета. «Spline» будет размывать цвета.

Чтобы избежать проблем с интерполяцией лучше всего применить большой файл LUT. Должен охватываться весь диапазон возможных значений интенсивности. Для ImageMagick Q16 требуется, чтобы файл LUT был в высоту 65536 пикселей.

См. также "-hald-clut" - алгоритм заменяет цвета в соответствии с поиском значения полноцветного RGB из двухмерного представления трехмерного цветового куба.


• -hald-clut

Применяет к изображению таблицу цветов Hald.

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

bash$ convert image.png hald.png -hald-clut transform.png
Параметр допускает работу с графическими редакторам GIMP или Photoshop для корректировки цвета и последующего применения к нескольким изображениям с помощью сценария ImageMagick.


* Обратите внимание, что оператор работает в цветовом пространстве RGB и триплет значений цвета используется для интерполированного поиска представленного изображения цветового куба. Поэтому операция не затрагивается параметром "-channel", а также не может регулироваться прозрачность или альфа-канал.


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

Допустимо применить полную 3D-таблицу поиска цветов для прямой замены всех цветов изображений. Вместо того чтобы искать значение каждого цветового канала как отдельного объекта (см. CLUT), все цвета используется для поиска нового цвета.

Однако для трехмерных таблиц цветов обычно требуются специальные форматы файлов для правильного хранения трехмерного массива значений цвета. Если применяется особая компоновка значений цвета, трехмерная таблица может быть сохранена в двухмерном изображении, известном как «LUT Hald Color». Это обычное изображение, поэтому для сохранения «LUT Hald 3D Color» допустимо указать любой формат изображения.

Для создания таблицы цветов Hald 3D используйте генератор изображений. Например, как в следующем случае.

bash$ convert hald:3 hald_3.png
Для изображения HALD с 8-битным цветом в каналах вам понадобится версия ImageMagick Q16, создающая изображение 4096x4096. Однако можно использовать меньшее изображение Hald, так как ImageMagick будет интерполировать соседние 8 цветов из Hald. В таком случае результаты могут быть не столь точными, как ожидалось.

bash$ convert rose: hald_3.png -hald-clut rose_hald_noop.png
Пример работы с тонами сепии.

bash$ convert hald_3.png \( +clone -sepia-tone 60% \) -average hald_sepia.png
bash$ convert rose.png hald_sepia.png -hald-clut rose_hald_sepia.png
В отличие от более простого поиска одномерного градиента оператора CLUT, вы можете применить Hald CLUT для поворота цветов. (Например, чтобы поменять местами красный и синий цвета.) Метод имеет недостатки, если его использовать для раскрашивания полутонового изображения или корректировки значений цвета гистограммой. Метод нельзя использовать для работы с альфа-матовыми каналами.

Предопределенные фильтры.


• -blue-shift factor

Смоделирует сцену в ночное время при лунном свете. Начните с коэффициента 1,5.


• -charcoal factor

Смоделирует рисунок углем. Оператор "-charcoal" похож на операторы обнаружения края, пытается преобразовать края объекта на изображении в рисунок карандаша или угля.

Аргумент определяет толщину краевых линий.

bash$ convert rose: -charcoal 1 rose_charcoal_1.gif
bash$ convert rose: -charcoal 3 rose_charcoal_3.gif
bash$ convert rose: -charcoal 5 rose_charcoal_5.gif

• -emboss radius {x sigma}

Тиснение изображения. Оператор "-emboss" пытается имитировать эффект травления кислотой на металле. Этот оператор работает только с оттенками серого.

bash$ convert rose: -emboss 0x.5 rose_emboss_0x05.gif
bash$ convert rose: -emboss 0x2 rose_emboss_0x20.gif

• -paint radius

Эффект картины маслом.

Оператор "-paint" предназначен для преобразования изображения в «картину» с нанесением толстых «капель» краски на холст.

bash$ convert rose: -paint 1 rose_paint_1.gif
bash$ convert rose: -paint 3 rose_paint_3.gif
bash$ convert rose: -paint 5 rose_paint_5.gif
Чем больше радиус для пятен краски, тем сильнее форма приближается к квадратной. Эффект можно несколько сгладить, предварительно размывая изображение.

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

bash$ convert rose: -morphology OpenI Disk rose_paint_open.gif
bash$ convert rose: -morphology CloseI Disk:2.5 rose_paint_close.gif

• -polaroid angle

Создаст эффект фотографии камеры Polaroid.

Опция "+polaroid" используется, чтобы повернуть изображение на случайный угол от -15 до +15 градусов.

Тимоти Хантер разработал алгоритм "-polaroid", придающий фотографиям «полароидный вид».

bash$ convert spiral_stairs_sm.jpg -thumbnail 120x120 \
-bordercolor white -background black +polaroid poloroid.png

* Обратите внимание, что получившееся изображение имеет полупрозрачную тень, поэтому вы должны либо использовать изображение в формате PNG, либо добавить оператор "-flatten" для форматов GIF или JPG.



• -sepia-tone percent-threshold

Имитация фотографии в тонах сепии.

Укажите «threshold» для задания порога интенсивности от 0 до 99,9%.

Алгоритм применяет к изображению специальный эффект, аналогичный эффекту, достигаемому в фотолаборатории с помощью тонирования сепией. Порог варьируется от 0 до «QuantumRange». Значение 80% - хорошая отправная точка для разумного тонирования.

bash$ convert rose: -sepia-tone 65% sepia-tone.jpg
bash$ convert rose: \( +clone -sepia-tone 60% \) -average sepia-tone_blended.jpg

• -sketch radius

• -sketch radius {x sigma} + angle

Смоделирует карандашный набросок с заданным радиусом (radius), стандартным отклонением (sigma) и углом (angle).

bash$ convert pagoda_sm.jpg -colorspace gray -sketch 0x20+120 sketch_new.gif

• -solarize percent-threshold

Удалит все пиксели выше порогового уровня.

Укажите в процентах порог интенсивности от 0 до 99,9%. Опция создает эффект соляризации, как при экспонировании фотопленки на свету во время процесса проявления.

Функция "-solarize" «выжигает» некоторые цвета. Чем ярче исходный, тем темнее соляризованный цвет. Подобное происходит в фотографии, если фотопленка очень сильно экспонирована.

bash$ convert rose: -solarize 90% solarize.jpg
Все, что выше заданного уровня градаций серого, игнорируется. Такого же эффекта можно достичь, если применить математический оператор "-fx" .

bash$ convert rose: -fx '.9>u ? u: 1-u' solarize_fx.jpg
Этот оператор хорошо подходит для извлечения полутоновых серых цветов из изображений.

Здесь используется "-sigmoidal-contrast", чтобы создать «нечеткий» порог на уровне 70% серого, затем применяется соляризация.

bash$ convert -size 10x300 gradient: -rotate 90 \
-sigmoidal-contrast 50x70% fuzzy_thres.png
bash$ convert fuzzy_thres.png -solarize 50% fuzzy_spike.png
bash$ convert fuzzy_spike.png -level 0,50% filament.png

* Обратите внимание, «белое» становится «черным», в то время как полутоновые серые тона сохраняются.



• -stegano offset

Встраивает водяной знак в изображение (display -size 320x256+35 stegano: image.png).


• -stereo +x {+y}

Составьте два изображения, чтобы создать красный и голубой стереоанаглиф.

Левая часть стереопары (второе изображение) сохраняется как красный канал выходного изображения. Правая сторона (первое изображение) сохраняется как зеленый и синий каналы. Для правильного просмотра стереоизображения необходимы красно-зеленые стереоочки.

Анаглиф (от греч. «рельефный») — метод сепарации изображений чёрно-белой стереопары при помощи цветового кодирования. Чаще всего используются красный и бирюзовый цвета.


• -vignette radius {x sigma}{+-} x {+-} y {%}

Смягчит края изображения, создаст виньетку.

Спад эффекта виньетки контролируется аргументом «radius» умноженным на «sigma». Для номинального спада будет установлено значение "0 x sigma". Значение "0x0" создаст круг или эллипс без спада. Аргументы «x» и «y» управляют размером круга. Большие значения уменьшают радиусы, а меньшие увеличивают. Значение "+0+0" создадут круг или эллипс того же размера, что изображение. Значения по умолчанию для «x» и «y» составляют 10%от соответствующего размера изображения.

Примеры.

«Округление» изображения с мягкими размытыми контурами.

bash$ convert rose: -background black -vignette 0x5 rose_vignette.gif
Используя нулевую (или очень маленькую) «sigma», вы можете удалить размытие и создать эллиптические или овальные рамки.

bash$ convert rose: -background black -vignette 0x0 rose_vignette_0.gif
Чтобы добавить «прозрачность», укажите следующие настройки.

bash$ convert rose: -alpha Set -background none -vignette 0x3 rose_vignette.png
Если указать очень большое число для второго аргумента, можно получить «линейное» распределение для размытия виньетки (обычно используется стандартное распределение Гаусса).

bash$ convert rose: -background black -vignette 5x65000 rose_vignette_linear.gif

Гамма-коррекция изображений.



* Гамма-коррекция или коррекция гаммы (иногда — гамма) — предыскажения яркости чёрно-белого или цветоделенных составляющих цветного изображения при его записи в телевидении и цифровой фотографии.



• -auto-gamma

Автоматическая гамма-коррекция.

Вычисляет средние значения гамма-коррекции, любое «серое» изображение становится на 50% серым. Хорошо подходит для «реальных» изображений с небольшим количеством темных и светлых областей, как правило, не применяется для изображений с большим количеством яркого неба или темных теней. Не подходит для диаграмм.

Настройте "-channel", в том числе флаг "sync", чтобы определить, как изменяются значения цвета.


* По умолчанию параметр "-channel" установлен как «RGB, sync».



• -gamma value

Уровень гамма-коррекции.

Одно и то же цветное изображение на двух мониторах может выглядеть по-разному. Гамма-коррекция необходима, чтобы отрегулировать изображение на дисплее. Разумные значения простираются от 0,8 до 2,3. Гамма меньше 1.0 делает изображение темнее, а гамма больше 1.0 делает его светлее. Большие корректировки гаммы могут привести к потере некоторой информации, если изображение восьмибитовое (квантовый диапазон от 0 до 255).

Гамма корректирует значения канала изображения попиксельно в соответствии со степенным законом.

Используйте "+gamma value", чтобы установить уровень гаммы без фактической настройки пикселей изображения. Этот параметр полезен, если изображение имеет известную гамму (например, в формате PNG). Можно использовать «гамму файла», которая является обратной величиной гаммы дисплея.

Например, если изображение sRGB и следует указать гамму для формата PNG.

bash$ convert input.png +gamma 0.45455 output.png
(Здесь величина вычисляется по формуле 0,45455 = 1/2,2)


* Обратите внимание, что настройка гаммы также доступны с помощью оператора "-level".


Допустимо «удалить» гамму в командной строке, чтобы преобразовать изображение в линейное цветовое пространство RGB или использовать опцию "-gamma 0.454545" (1 / 2.2 = 0.454545).

bash$ convert image.jpg -colorspace RGB newimage.jpg
bash$ convert image.jpg -gamma 0.454545 newimage.jpg
Если у изображения гамма 4,4, вы можете удалить значение с помощью команды "-gamma 0.227272" (0.227272 = 1/4,4), а затем применить новую гамму 2,2 с помощью установки "-gamma 2.2".

bash$ convert red44.png -gamma 0.5 -set gamma 0.4545 red22_new.png
Или просто используйте "-set gamma".

bash$ convert image.png -set gamma 0.4545 image.png
Это изменит значение гаммы, но не изменит значения пикселей.

Посмотреть установки гаммы можно с помощью следующей команды.

bash$ identify -verbose start.png | grep -i gam
:: Gamma: 0.45455
:: png:gAMA: gamma=0.45455
Еще способы изменить гамма-коррекцию.

bash$ convert start.png +gamma 2 -verbose info: | grep -i gam
bash$ convert start.png -set gamma 2 -verbose info: | grep -i gam
Ни один из примеров не изменил значения пикселей, но изменилось внутреннее значение гаммы.

Чтобы определить гамму кодировщика PNG.

bash$ convert start.png -set png:gAMA 2 -verbose info: | grep -i gam
bash$ convert input.png -set png:gAMA XYZ result.png
Если вы хотите изменить значения пикселей, а не только параметр гаммы.

bash$ convert start.png -gamma 2 txt:
bash$ convert start.png -gamma 0.5 txt:
Обычно гамма устанавливается как 2.2, но чтобы сделать изображение линейным, нужно обратить эту степенную функцию, то есть указать гамму как 1/2.2.

:: gamma_corrected_value = value^1/2.2
bash$ convert -size 100x100 gradient:'gray(100%)-gray(0)' -gamma 2.2 \
-set colorspace sRGB gradient_gamma.gif

* Обратите внимание, теперь изображение имеет намного более равное количество светлых и темных цветов, чем ранее. Однако фактические значения в изображении больше не являются «линейными», что может вызвать проблемы при последующей обработке.


Стандартные значения гаммы.

В большинстве систем аналогового телевидения гамма-коррекция кодирования находится в пределах 1.2—1.3. Стандартное значение гаммы для цветовых пространств sRGB и Adobe RGB определяется как 2.2. Такое же значение принято в операционной системе Windows и большинстве других. В компьютерах Macintosh первых поколений гамма монитора составляла 1.8.

Собственная гамма большинства мониторов ЭЛТ около 2.5, для получения стандартной гаммы отображения 2.2 видеокарта осуществляет дополнительную коррекцию сигнала. Характеристики ЖК-мониторов еще более нелинейны. Поэтому зачастую требуются коррективы с использованием таблицы отображения (- «look-up table», LUT).

Гамма дисплея может вводить в заблуждение, поскольку термин используются вместо термина гамма-коррекции, но значения терминов разные. Коррекция гаммы задаётся как гамма кодирования. Например, при установке «гамма-коррекции 1.5» фактически применяемая гамма может составлять 1/1.5, поскольку гамма 1/1.5 компенсирует гамму 1.5 (1.5*1/1.5=1.0). Как следствие, увеличение гамма-коррекции может сделать изображение ярче, в отличие от увеличения гаммы дисплея.

Гамма и профили.

Точная кривая гаммы обычно записана в профиле цветности. Большинство пространств цветности, такие как sRGB и Adobe RGB 1998, для обработки изображений используют гамма-кодирование с коэффициентом 1/2.2. Файлы RAW имеют линейную гамму, но программы просмотра файлов RAW выводят изображение на дисплей с изменением гаммы-кодирование 1/2.2, чтобы «осветлить» изображение.

Если профиль цветности не приложен, обычно подразумевается стандартная гамма 2.2. Профиль цветности часто отсутствует в файлах форматов PNG и GIF.

Корректировка с помощью гистограммы.

Гистограмма (в фотографии) — это график статистического распределения элементов цифрового изображения с различной яркостью, в котором по горизонтальной оси представлена яркость, а по вертикали — относительное число пикселей с конкретным значением яркости.

Гистограмма - особый тип графика. Гистограмма выводит уровни цвета пикселей изображения в фиксированное количество «ячеек», каждая из которых охватывает небольшой диапазон значений. Таким образом, каждая ячейка содержит количество уровней цвета (значений пикселей) в изображении, которые попадают в этот диапазон.

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

Гистограмма может создаваться для каждого канала отдельно или же как общая гистограмма каналов.

bash$ convert rose: histogram:histogram.gif
Гистограмму также можно создать в виде линейного графика, где линия соединяет вершины столбцов.

Фактическая высота гистограммы не имеет практического значения, поскольку обычно масштабируется так, чтобы самый высокий пик касался верхней части изображения. В гистограмме важнее распределение по всему диапазону и то, как относительные высоты соотносятся друг с другом.

При просмотре гистограммы следует учитывать следующие факторы.

1. Формирует ли гистограмма одну широкую полосу значений. В этом случае изображение правильно использует цветовое пространство и, следовательно, имеет хороший контраст.

2. Заметны ли смещения в правую или левую сторону. В зависимости от смещения, изображение имеет низкий контраст (мутное, серое) или слишком светлое, темное.

3. Заметны ли на гистограмме пики. Если на гистограмме видны пики, значения могут выйти за пределы квантовых диапазонов.

4. Где больше всего пикселей. Если слева - изображение очень темное; справа - слишком яркое.

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


• -auto-level

Автоматически настраивает уровни цвета изображения. Это «идеальный» оператор нормализации изображения. Алгоритм находит точные минимальные и максимальные значения для цвета в изображении, а затем применяет оператор "-level", чтобы растянуть значения до полного диапазона. Оператор обычно не используется для реальных или сканированных изображений или изображений в формате JPEG, так как один «внешний» пиксель может задать неверные минимальные или максимальные значения "-level". Это «правильный» оператор для растягивания цветов градиентных изображений, используемых для создания таблиц поиска цвета, карт искажения или других математически определенных изображений.

Оператор похож на операторы "-normalize", - "-contrast-stretch" и "-linear-stretch", но без биннинга гистограммы или проблем отсечения, которые могут возникнуть у последних операторов. То есть "-auto-level" является «идеальной» версией этих операторов.

Настройте "-channel" и флаг "sync" для синхронизации каналов, чтобы определить, какие значения цвета изменяются.

bash$ convert -size 100x100 xc: -channel G +noise Random \
-virtual-pixel Tile -blur 0x5 -auto-level \
-separate +channel random_5_gray.png

* Значение по умолчанию для оператора "+channel" определено как "RGB, sync", опция "sync" гарантирует, что все цветовые каналы будут изменяться с одним и тем же значением гаммы, сохраняя цвета и игнорируя прозрачность.



• -clahe widthxheight {%} {+} number-bins {+} clip-limit {!}

Адаптивное выравнивание гистограммы с ограничением контраста.

Изображение разделено на части с заданными шириной и высотой (в пикселях). Добавьте символ-знак "%", чтобы определить ширину и высоту в процентах от размера изображения. Размер частей должен быть больше размера сохраняемых функцией и соответствовать соотношению сторон изображения. Добавьте "!", чтобы задать точную ширину и высоту частей.

«Number-bins» - количество интервалов гистограммы на часть (минимум 2, максимум 65536). Количество ячеек гистограммы должно быть меньше количества пикселей в одной части. Аргумент «clip-limit» - предел для локальных изменений контраста.

Значения 2 до 3 будут хорошими отправными точками (например, "-clahe 50x50%+128+3"). Очень большие значения позволяют выравнивать гистограмму, то есть в результате достигается максимальный локальный контраст. Значение 1 не изменит изображение.


* Обратите внимание: если аргументы не заданы, по умолчанию они устанавливаются как 128, без отсечения.



• -contrast-stretch black-point

• -contrast-stretch black-point {x white-point} {%}

Увеличит контраст изображения, растягивая диапазон значений интенсивности.

При выполнении растяжения следует обстоятельно подойти к установкам черной и белой точек, обрезая лишь до необходимых значений. Выполняя растяжку, «black-out» не превышает значение «black-point» пикселей, а «white-out» не превышает «white-point» пикселей.


* Обратите внимание, что "-contrast-stretch 0" изменит изображение таким образом, что минимальные и максимальные значения будут растянуты от 0 до «QuantumRange» без какой-либо потери данных из-за пересвета. Это эквивалентно установке "-contrast-stretch 0.15x0.05%".


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

Все каналы нормализуются согласованно на одинаковую величину, чтобы сохранить целостность цвета, но лишь в том случае, если указана настройка по умолчанию "+channel". Любой другой параметр "-channel" нормализует каналы RGB независимо друг от друга.

Оператор "-contrast-stretch" аналогичен оператору "-normalize", за исключением того, что он позволяет пользователю указать количество обрезаемых пикселей. Это допускает некоторый контроль над выбором черной и белой точек.

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

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

bash$ convert gray_range.jpg -contrast-stretch 15% stretch_gray.jpg
Важная особенность алгоритма "-contrast-stretch" - возможность установить ноль для пороговых значений черной и белой точек. Установка "-contast-stretch 0" определяет минимальный и максимальный интервалы на гистограмме изображения. В результате минимальный и максимальный интервалы растягиваются до полностью черного и полностью белого цветов. Это приведет к растяжению контраста с минимальным или, возможно, нулевым отсечением.

См. также "-auto-level" для «идеальной» нормализации математических изображений.

Прим. Этот оператор находится на рассмотрении и требует доработок.


• -equalize

Поканальное выравнивание гистограммы изображения. Чтобы выполнить выравнивание гистограммы на всех каналах одновременно, преобразуйте изображение в цветовое пространство, такое как HSL, OHTA, YIQ или YUV, выровняйте соответствующий канал, а затем преобразуйте обратно в RGB, если необходимо.

Например, с использованием пространства HSL.

:: ... -colorspace HSL -channel lightness -equalize -colorspace sRGB ...
Для YIQ, YUV и OHTA используйте красный канал.

:: ... -colorspace OHTA -channel red -equalize -colorspace sRGB ...
Перераспределение гистограммы - это нелинейный метод перераспределения ячеек в гистограмме для достижения определенной формы. Двумя наиболее распространенными формами являются однородные (плоские) и гауссовские (колоколообразные), хотя также применяются гиперболические и рэлеевские распределения.

В случае равномерного распределения ячейки гистограммы сдвинуты, разнесены и объединены, так что в среднем гистограмма имеет плоскую или постоянную высоту по всему диапазону. Это называется выравниванием гистограммы. Именно это делает функция "-equalize".

К сожалению, эквализация не применяет одну и ту же операцию ко всем каналам. Поэтому возможны цветовые сдвиги, особенно когда функция применяется к цветовому пространству RGB.

Примеры выравнивания гистограммы "-equalize".

Обратите внимание на сдвиг цветового баланса.

bash$ convert zelda.png -write histogram:zelda_hist.gif \
-equalize -write histogram:zelda_equal_hist.gif \
zelda_equal.png
bash$ convert zelda.png -colorspace gray histogram:zelda_ghist.gif
bash$ convert zelda_equal.png -colorspace gray \
histogram:zelda_equal_ghist.gif

• -linear-stretch black-point

• -linear-stretch black-point {xwhite-point} {%}

Алгоритм похож на "-contrast-stretch", также использует ячейку гистограммы для определения диапазона значений цвета для растяжения. Однако опция «растягивает» цвета с помощью оператора "-level". Таким образом, хотя первоначальное определение может иметь эффекты «биннинга», цвета изображения растягиваются математически, а не с использованием бинов гистограммы. Это делает оператор точным.


* Обратите внимание, что "-linear-stretch 0" не изменяет изображение, в то время как значение 1 почти идеально растягивает цветовой диапазон.


См. также "-auto-level" для математической нормализации изображений.

Операторы "-contrast-stretch" и "-linear-stretch" создают гистограмму (используя 1024 значения) для определения положения цвета и последующего растягивания. Но эти операторы разные: "-linear- stretch" выполняет операцию "-level", в то время как "-contrast-stretch" использует значения гистограммы для растяжения и замещения цвета (что допускает квантовое округление). Оператор "-normalize" применяет алгоритмы "-contrast-stretch".

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

Если для "-linear-stretch" указана черная точка, белая точка будет определять общее количество пикселей в изображении за вычетом количества черных точек.

Если черная точка указана как процентное количество, белая точка будет рассчитываться как 100% за вычетом процентного количества черной точки. Следовательно, значение "-linear-stretch 1%" эквивалентно - "-linear-stretch 1x99%".

Оператор "-linear-stretch" позволяет одинаково обрабатывать все каналы, что гарантирует отсутствие сдвига цвета.

bash$ convert port.png -linear-stretch 1x1% \
-write histogram:port_ls1_hist.gif \
port_ls1.png
bash$ convert port.png -channel RGB -linear-stretch 1x1% \
-write histogram:port_ls1rgb_hist.gif port_ls1rgb.png
Этот оператор находится на рассмотрении для доработки.


• -normalize

Увеличит контраст изображения, растягивая диапазон значений интенсивности.

Значения интенсивности растянуты, чтобы охватить весь возможный диапазон. При этом затемняется не более 2% пикселей.


* Обратите внимание, что начиная с ImageMagick 6.4.7-0, оператор "-normalize" эквивалентен оператору "-contrast-stretch 2%x1%".


Все каналы нормализуются на одинаковую величину, чтобы сохранить целостность цвета, если используется настройка по умолчанию "+channel" . Любой другой параметр "-channel" нормализует каналы RGB независимо друг от друга.

Например, здесь мы добавляем несколько дополнительных цветов (градиент от синего к темно-синему) к нормализации.

bash$ convert -size 100x100 gradient:gray70-gray30 \
-size 50x100 gradient:blue-navy +append color_range.jpg
bash$ convert color_range.jpg -normalize normalize.jpg
Оператор "-normalize" является лишь подмножеством оператора - "-contrast-stretch" со значениями по умолчанию для точки черного 2% и точки белого 1%.

Поэтому, из-за особенностей формата JPEG (искажения цвета при сжатии), "-normalize" не растягивает самые яркие и темные цвета, но увеличивает их значения, подобно настроенному оператору "-contrast-stretch 2%,99%".

Если самые высокие и низкие значения цвета очень близки, функция "-normalize" завершится с ошибкой, никаких действий предпринято не будет.

Если вы хотите растянуть значения самых ярких и темных цветов до крайних значений, используйте "-auto-level".

См. "-contrast-stretch" для получения более подробной информации. Также см. "-auto-level" для «идеальной» нормализации, которая лучше подходит для математически порожденных изображений.

Этот оператор дорабатывается.

Настройка яркости, контраста.


• -sigmoidal-contrast contrast x mid-point

Увеличит контраст без насыщения светлых участков или теней. Параметр «contrast» указывает, насколько увеличится контраст. Например, 0 - без изменений, 3 - типично, 20 - сильно.

Средняя точка определяет, где должен падать максимальный наклон контрастности в итоговом изображении (0% - белый, 50% - средний серый, 100% - черный).

По умолчанию контраст изображения увеличен, используйте форму "+sigmoidal-contrast", чтобы отказаться от увеличения контраста.

Чтобы добиться результата, схожего с «sigmoidal-contrast» (регулировка гаммы), следует применить "-sigmoidal-contrast {brightness} x 0%" для увеличения яркости и "+sigmoidal-contrast {brightness} x 0%" для уменьшения яркости. Обратите внимание на установку 0 для средней точки кривой.

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

Нормализация с помощью оператора "-normalize" высококонтрастных штриховых рисунков и графики может быть качественной. Но нормализованные фотографии, скорее всего, будут выглядеть нереально, их будет трудно вывести на принтер. Оператор "-contrast-stretch" способен ограничивать нормализацию, однако операторы "-levels" или "-sigmoidal-contrast" лучше справляются с фотографиями.

На недоэкспонированных цифровых фотографиях темные области могут быть осветлены без выделения ярких участков с помощью оператора - "-sigmoidal-contrast" с указанным пороговым уровнем.

bash$ convert night_club_orig.jpg -sigmoidal-contrast 4,0% night_club_fixed.jpg
bash$ convert night_scape_orig.jpg -sigmoidal-contrast 10,0% night_scape_fixed.jpg
Основной параметр регулирует степень осветления. Чем больше яркость, тем большее значение. И тем более зернистым будет изображение. Итак, после осветления в случае сильной недодержки, вы получите зернистое черно-белое изображение.


• -brightness-contrast brightness

Яркость или контраст изображения. Нулевое значение для «brightness» или «contrast» означает отсутствие изменений. Диапазон значений от -100 до +100. Положительные значения увеличивают яркость или контраст, а отрицательные значения уменьшают. Чтобы контролировать только контраст, необходимо установить «brightness 0». Чтобы управлять только яркостью, установите «contrast 0» или оставьте поле незаполненным.

Также можно применять параметр "-channel" для управления отдельными каналами. По умолчанию ко всем каналам применяется одно и то же преобразование.

Аргументы яркости и контрастности преобразуются в смещение и наклон линейного преобразования и применяются с использованием функции-полинома "slope, offset".

Наклон изменяется от 0 при «contrast -100» до почти вертикального при «contrast +100». При установке «brightness 0» и «contrast -100» результат будет выглядеть как серая картинка. Для «brightness 0» и «contrast +100» результат будет приближаться к пороговому значению среднего серого, но не достигать его (то есть линейное преобразование - очень крутая вертикальная линия в середине серого). Отрицательные наклоны невозможны. Все достижимые уклоны равны нулю или положительны.

Смещение изменяется от -0,5 при «brightness -100» до 0 при «brightness 0» до +0,5 при «brightness +100». Таким образом, когда «contrast 0» и «brightness 100», результат будет полностью белым. Точно так же, когда «contrast 0» и «brightness -100», результат будет полностью черным.

Поскольку диапазон значений аргументов составляет от -100 до +100, добавление символа "%" не обязательно.


• -contrast

Увеличивает или уменьшает контраст изображения. Этот параметр усиливает разницу интенсивности между светлыми и темными элементами изображения. Используйте "-contrast" для усиления контрастности изображения или "+contrast" для уменьшения контрастности.

Для более выраженного эффекта оператор можно указать дважды.

bash$ convert rose: -contrast -contrast rose_c2.png

• -modulate brightness[,saturation,hue]

Изменит яркость, насыщенность и оттенок изображения.

Аргументы даны в процентах. Значение 100 означает отсутствие изменений, любые отсутствующие значения считаются равными 100.

«Brightness» это множитель общей яркости изображения, поэтому 0 означает чистый черный цвет, 50 - вдвое ярче, 200 - еще вдвое ярче. Чтобы инвертировать значение, добавьте опцию "-negate".

«Saturation» контролирует количество цвета в изображении. Например, 0 создает изображение в оттенках серого, а большое значение, такое как 200, дает очень красочный, «мультипликационный» цвет.

Аргумент «hue» вызывает «поворот» цветов в изображении на указанную величину. Например, значение 50 приводит к повороту на 90 против часовой стрелки, преобразованию красных оттенков в пурпурные и т.д. Значение 0 или 200 приводит к полному повороту цвета изображения на 180 градусов. Значение 300 означает вращение на 360 градусов, не приводящее к изменению цветов исходного изображения.

Например, чтобы увеличить яркость цвета на 20%, уменьшить насыщенность цвета на 10% и оставить оттенок неизменным, используйте "-modulate 120,90".

Примените настройку "-set colorspace", чтобы указать, какое цветовое пространство модулировать. Выберите из HCL, HCLp, HSB, HSI, HSL (по умолчанию), HSV, HWB или LCH (LCHuv).

bash$ convert image.png -set option:modulate:colorspace hsb -modulate 120,90 modulate.png
Возможно, эта опция особенно хорошо подходит для точной настройки цветов изображения в пространстве CMYK, чтобы они попадали в цветовой охват устройства вывода.

Оператор "-modulate" изменяет изображение в специальном цветовом пространстве HSL (оттенок, насыщенность, яркость). Сначала оператор преобразует изображение в указанное цветовое пространство, модифицирует его, затем преобразует в исходное цветовое пространство.

Оператор принимает три значения в процентах, поэтому аргумент 100 не повлияет на изображение.

bash$ convert rose: -modulate 100,100,100 mod_noop.gif
Первое значение, яркость, является множителем общей яркости изображения.

bash$ convert rose: -modulate 0 mod_bright_0.gif
bash$ convert rose: -modulate 50 mod_bright_50.gif
bash$ convert rose: -modulate 100 mod_bright_100.gif
bash$ convert rose: -modulate 150 mod_bright_150.gif
bash$ convert rose: -modulate 200 mod_bright_200.gif

* Обратите внимание, что хотя аргумент яркости 0 создает черное изображение, вы не создадите абсолютно белое изображение.


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

bash$ convert rose: -modulate 100,0 mod_sat_0.gif
bash$ convert rose: -modulate 100,20 mod_sat_20.gif
bash$ convert rose: -modulate 100,70 mod_sat_70.gif
bash$ convert rose: -modulate 100,100 mod_sat_100.gif
bash$ convert rose: -modulate 100,150 mod_sat_150.gif
bash$ convert rose: -modulate 100,200 mod_sat_200.gif
Насыщенность, установленная как 0, создаст изображение в оттенках серого. Однако серый цвет смешивает все три цветовых канала одинаково, как определено цветовым пространством HSL, и не дает истинной «интенсивной» шкалы серого.

Малые значения увеличивают «пастельные» цвета, а значения, превышающие 100, дают красочные изображения, иногда похожие на карикатурные.

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

Модуляция оттенка.

«Hue» позволяет менять цвета по кругу. Значение вычисляются сложением модуля.

Формулы преобразования между углом и аргументом модуляции.

:: hue_angle=(modulate_arg-100)*180/100
:: modulate_arg=(hue_angle*100/180)+100
Значение "100" (для всех трех аргументов) не вызывает изменений. В то время как значения "0" или "200" эффективно нейтрализуют цвета в изображении, но не изменяют интенсивность.

bash$ convert rose: -modulate 100,100,0 mod_hue_0.gif
bash$ convert rose: -modulate 100,100,33.3 mod_hue_33.gif
bash$ convert rose: -modulate 100,100,66.6 mod_hue_66.gif
bash$ convert rose: -modulate 100,100,100 mod_hue_100.gif
bash$ convert rose: -modulate 100,100,133.3 mod_hue_133.gif
bash$ convert rose: -modulate 100,100,166.6 mod_hue_166.gif
bash$ convert rose: -modulate 100,100,200 mod_hue_200.gif
Как вы можете видеть, значение 33.3 производит отрицательное вращение (против часовой стрелки) всех цветов примерно на 60 градусов, эффективно сопоставляя красный с синим, синим с зеленым и зеленым с красным.

Значения "0" или "200' приводят к полному отрицанию цветов на 180 градусов без снижения яркости изображения.


* Обратите внимание, что оттенки меняются по кругу, поэтому использование значения "300" приведет к повороту цвета на 360 градусов, что не изменяет цвета.


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

При работе с форматами изображений JPEG могут возникать следующие проблемы: создаются «не совсем белые» цвета, а также все цвета немного отличаются из-за алгоритма сжатия с потерями.

bash$ convert wedding_party_sm.jpg -modulate 85 modulate_off-white.png
В пространстве HSL «не совсем белые цвета» были помещены в небольшую область. Когда яркость уменьшается, такие цвета «расширяются», в результате цвета, близкие к белому, становятся красочными.

Поэтому используйте "-modulate" с цветовым пространством HSB вместо цветового пространства HSL.

Чтобы модулировать изображение в цветовом пространстве HSB, вы можете определить настройку "modulate:colorspace".

bash$ convert wedding_party_sm.jpg \
-define modulate:colorspace=HSB -modulate 85 \
modulate_HSB.png
Но еще лучше не сохранять изображение в формате JPEG.

Увеличение яркости на 150% изображения «розы» в HSL, а также в цветовом пространстве HSB.

bash$ convert rose: -modulate 150 mod_bright_HSL.gif
bash$ convert rose: -define modulate:colorspace=HSB \
-modulate 150 mod_bright_HSB.gif
Модуляция оттенка в HSL или HSB не очень точная. Эти цветовые пространства не принимают во внимание реалистичную интенсивность цветов. Поворот между оттенками «синий» и «желтый» также приведет к большим сдвигам яркости.

Однако оператор модуляции способен обрабатывать специальные цветовые пространства «LCHab» и «LCHuv».

bash$ for i in 0 25 50 75 100 125 150 175; do \
bash$ convert rose: -define modulate:colorspace=LCHab \
:: -modulate 100,100,$i mod_lch_$i.gif \
:: done

* Обратите внимание, что оттенки распределены иначе, чем в стандартных цветовых пространствах. Но что более важно, сохраняется яркость исходного изображения. Для очень темных цветов «LCHuv» может порождать значения цвета с неоднородностями. Однако этого не должно происходить с реальными изображениями.


Регулировка уровней каналов.


• -level black_point {,white_point} {%} {,gamma}

Управляет уровнями каналов изображения. Регулируются только каналы, определенные текущим параметром "-channel" (по умолчанию RGB), что позволяет ограничить действие оператора.


* Обратите внимание, что альфа-канал обрабатывается как «матовый» (0 - непрозрачный), в ином случае значение 0 считалось бы «прозрачным».


Оператор "-level" это оператор общего уровня. Он принимает три значения: «black_point» и «white_point», а также дополнительное третье значение регулировки гаммы.

При правильном применении "-level" значения растягиваются так, что заданное значение «black_point» в исходном изображении устанавливается равным нулю (или черному), в то время как заданное значение «white_point» установлено в «QuantumRange» (белый). Затем между этими двумя точками цвета линейно «растягиваются», чтобы заполнить диапазон всех возможных значений. В результате улучшаются контраст и цвета, что обеспечивает прямую регулировку контрастности. Также будет скорректирована гамма.

Диапазон черных и белых точек составляет от 0 до «QuantumRange» или от 0 до 100%. Если белая точка опущена, она устанавливается в QuantumRange, но за вычетом black_point, чтобы изменить центр контраста. Если в строке присутствует знак процента (%), черные и белые точки считаются процентами от полного цветового диапазона. Если гамма не указана, предполагается значение по умолчанию 1.0 (без гамма-коррекции).

Поскольку обычно и черные, и белые точки настраиваются на одинаковую величину от значений 0% и 100%, вы можете указать значение только для «black_point». Белая точка будет автоматически скорректирована на необходимую величину.

bash$ convert test.png -level 25%,75% test_level.png
bash$ convert rose: -level 25% rose_level.gif

* Обратите внимание, что 25% это сильный контраста для любого изображения, такое значение принято только для демонстрации эффекта.


bash$ convert rose: -level 0,75% rose_level_light.gif
bash$ convert rose: -level 25%,100% rose_level_dark.gif
Цвета за пределами заданного диапазона «обрезаны» или «выжжены» и больше недоступны для обработки. Это самая большая проблема оператора "-level".

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

bash$ convert rose: -level -25% rose_decontrast.gif
Существует форма оператора "+level". Вместо того чтобы растягивать значения для сопоставления «black_point» и «white_point» с «черным» и «белым», оператор сопоставляет «черный» и «белый» с заданными точками. Другими словами, оператор "+level" является полной противоположностью "-level".

Например, мы сопоставляем «черный» с 25% серого, а «белый» с 75% серого, эффективно уменьшая контраст.

bash$ convert test.png +level 25% test_level_plus.png
bash$ convert rose: -level 25%\! rose_level_plus.gif
Если вы сравните описанную выше операция "+level 25%" с результатами операции "-level -25%", вы увидите различия в работе.

Еще один полезный эффект "+level" заключается в том, что вы можете полностью сжать все значения цвета в изображении до одного и того же уровня шкалы серого.

bash$ convert test.png +level 30%,30% test_level_const.png
Оба вышеуказанных варианта оператора «level» также позволяют использовать третью настройку. А именно регулировку гаммы («gamma»). По умолчанию для этого параметра установлено значение 1.0, поэтому какая-либо корректировка гаммы не выполнятся.

bash$ convert rose: -level 0%,100%,2.0 rose_level_gamma_light.gif
bash$ convert rose: -level 0%,100%,0.5 rose_level_gamma_dark.gif
Обычно значения варьируются от 10 для ослепительно яркого изображения и до 0,2 для очень темного изображения. Однако есть «специальное» значение 2.0. Его можно использовать для получения квадратного корня из нормализованного цвета изображения.

Обе версии «level» управляют гаммой одинаково. Допускается комбинировать регулировку уровня «черного» и «белого» с нелинейной регулировкой гаммы. Вы также можете настроить только один канал изображения.

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

bash$ convert test.png -channel B +level 25%,100%,.6 test_blue_tint.png
Этот конкретный пример можно использовать для тонирования фотографии.

Оператор "-gamma" дает эффект подобный параметру «gamma» оператора "-level". Что позволяет похожим образом настроить гамму для каждого канала.

bash$ convert rose: -gamma 0.8,1.3,1.0 gamma_channel.gif
Функция фактически эквивалентна функции "-evaluate", но с инвертированным аргументом. Поэтому "-evaluate POW 2.2" на самом деле будет выполнять операцию "-gamma 0.45455" (0,45455 = 1/2,2), это обратный результат от "-gamma 2.2".


• -level-colors {black_color} {,} {white_color}

Отрегулируйте уровень изображения, используя предоставленные цвета, разделенные дефисом.

Функция аналогична "-level", за исключением того, что значения для каждого цветового канала определяется заданными цветами «black_color» и «white_color», как описано в параметре "-fill".

Цвета, предоставленные для "-level-colors", отображаются как «черные» и «белые», при этом все другие цвета линейно скорректированы (или обрезаны). Каждый канал настраивается отдельно с использованием значений указанных цветов.

Форма оператора «+» (+level-colors) позволяет сопоставлять «черный» и «белый» цвета с заданными цветами, в результате получается градиентное (ненасыщенное) изображение. Оператор также можно применить для преобразования простого изображения в оттенках серого в изображение с использованием указанного градиента цветов.

Если указать цвет с разделителем-запятой, это заменит соответствующую «черную» или «белую» точку. Но если разделитель-запятая не указан, данный цвет используется как для черных, так и для белых точек.

Оператор "+level-colors" полезен, поскольку позволяет изменять цвета на заданные значения, линейно сжимая все остальные, чтобы соответствовать заданным.

Например, сопоставить «black» и «white» с «green» и «gold».

bash$ convert test.png +level-colors green,gold levelc_grn-gold.png
Здесь градиент оттенков серого преобразуется в ограниченный заданными цветами градиент, и хотя цвета за пределами диапазона оттенков серого изменяются, они будут соответствовать указанному диапазону цветов. Этот эффект делает "+level-colors" очень полезным, особенно при преобразовании изображений в градации серого.

Если вы указываете только одно название цвета, но добавляете запятую, отсутствующий цвет по умолчанию будет либо «black», либо «white» (в зависимости от ситуации).

bash$ convert test.png +level-colors,DodgerBlue levelc_dodger.png
bash$ convert test.png +level-colors,Gold levelc_gold.png
bash$ convert test.png +level-colors,Lime levelc_lime.png
bash$ convert test.png +level-colors,Red levelc_red.png
Подобное упрощает преобразование изображений в градациях серого в градиент любого цвета. Например, здесь черно-белый градиент перераспределяется на красно-белый. Обратите внимание на запятую в аргументе.

bash$ convert cow.gif +level-colors red, cow_red.gif
В результате не только «черный» цвет заменяется на красный, но и все «серые» цвета меняются на соответствующее сочетание «красного» и «белого», что приводит к красивому эффекту.

Баланс белого, точки цветности.


• -illuminant method

Эталонный источник света. Варианты A, B, C, D50, D55, D65, E, F2, F7 или F11. По умолчанию D65.

ImageMagick использует стандартный источник света D65 в качестве эталонного белого цвета при преобразовании из sRGB.

Если пользователь хочет применить другой источник света, кроме стандартного способа преобразования можно указать опции, например, "-colorspace XYZ" и "-color-matrix" перед преобразованием.


* CIE Standard Illuminant D65 (иногда пишется D65) обычно используется в стандартных источниках света, определенных международной комиссией по освещению (CIE). D65 приблизительно соответствует полуденному солнцу в Западной Европе/Северной Европы, поэтому его также называют источником дневного света. D65 предназначен для представления среднего значения дневного света, коррелированная (CCT) цветовая температура около 6500 K. CIE standard illuminant D65 должен использоваться во всех колориметрических расчетах для предоставления дневного света, если только не существует особых причин для использования другого источника света.



• -white-balance

Применяет балансировку белого к изображению в соответствии с предугадыванием серого в цветовом пространстве LAB. Используйте "-define white-balance:vibrance value {%}", чтобы изменить насыщенность цвета каналов A и B.

ImageMagick преобразует RGB в Lab, но применяет эталонный белый источник света D65. Adobe Photoshop преобразует RGB в Lab, применяя белый источник света D50. Очевидно, преобразование из D65 в D50 в пространстве sRGB может быть выполнено с использованием матрицы.

bash$ convert in.tif -colorspace xyz -color-matrix \
"1.0478112 0.0228866 -0.0501270 \
0.0295424 0.9904844 -0.0170491 \
-0.0092345 0.0150436 0.7521316" \
-colorspace lab out.tif
Существует иной способ преобразования в D50 cielab - использовать программу cctiff (входит в состав программного пакета Argyll CMS).

Следующая строка выполняет желаемое преобразование.

bash$ cctiff -t1 -ir -p sRGB.icm input.tiff output.tiff
Прим. Как правило, логика алгоритма баланса белого исходит из предположения, что усреднено кадр нейтрален в цвете, при этом самые яркие фрагменты кадра имеют нейтрально-белый цвет, а все остальные цвета корректируются относительно них. Поэтому для цветокоррекции в цифровой форме достаточно изменить коэффициенты усиления в нужных цветовых каналах.

Цветовая дискретизация.


• -colors value

Установит желаемое количество цветов изображения. Фактическое количество цветов в изображении может быть меньше количества цветов для того или иного формата, но не больше.


* Обратите внимание, что это вариант уменьшения цветности. Из изображений с меньшим количеством уникальных цветов, чем указано в «value», будут удалены все повторяющиеся или неиспользуемые цвета. Порядок существующей цветовой палитры может быть изменен.


Оператор «colors» часто используется для уменьшения цвета.

bash$ convert colorwheel.png -dither None -colors 64 colors_64_no.gif
bash$ convert colorwheel.png -dither Riemersma -colors 64 colors_64_rm.gif
bash$ convert colorwheel.png -dither FloydSteinberg -colors 64 colors_64_fs.gif
Также ImageMagick по умолчанию применяет дизеринг для затенения цветов на изображении. Это предотвращает резкие изменения цвета из-за плавно меняющихся градиентов.

Если вы отключите дизеринг ("+dither"), вы сможете увидеть, какие цвета были ранее объединены программой, или заметить изменения цвета из-за отсутствия сглаживания.

В настоящее время в ImageMagick реализован только один алгоритм квантования цвета, «Adaptive Spatial Subdivision», он работает очень хорошо.

Прим. При преобразовании изображения из цветного в оттенки серого можно эффективно перевести изображение в цветовое пространство «grayscale» перед уменьшением количества цветов.


• -dither method

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

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

Дизеринг включен по умолчанию, чтобы выключить его, используйте форму "+dither". Отключение дизеринга часто, но не всегда, приводит к более быстрому процессу обработки изображения, меньшему количеству цветов, но большему количеству "«мультяшности»" или раскрашиванию изображения. Иногда возникают эффекты «цветных полос» в областях с цветовыми градиентами.

Операторы уменьшения цвета "-colors", "-monochrome", - "-remap" и "-posterize" применяют дизеринг к изображениям, используя урезанный набор цветов. Эти операторытакже входят в часть алгоритма автоматического уменьшения цвета при сохранении изображений в форматах с ограниченной поддержкой цвета, таких как GIF, XBM и другие, поэтому сглаживание также может использоваться и в этих случаях.

В качестве альтернативы вы можете применять "-random-threshold" для случайного дизеринга. Или используйте "-ordered-dither" для применения шаблонов дизеринга с отображением пороговых значений, указывая стандартные цветовые карты.

С помощью настройки, например, "-define dither:diffusion-amount 35%", можно управлять количеством дизеринга Флойда-Стейнберга.

Дизеринг Флойда-Стейнберга дает более равномерный дизеринг, чем дизеринг Римерсмы (установлен по умолчанию). Каждый из этих методов дизеринга по разному распределяет «цветовую ошибку» между соседними пикселями.

bash$ convert colorwheel.png -dither Riemersma -colors 16 dither_riemersma.gif
bash$ convert colorwheel.png -dither FloydSteinberg -colors 16 dither_floyd.gif
В частности, дизеринг Флойда-Стиенберга дает более «хеш-подобный» узор пикселей, чем дизеринг кривой Гильберта.

В отличие от других методов дизеринга (например, порогового и упорядоченного), параметр "-channel" не влияет на квантование цвета или дизеринг с коррекцией ошибок.

Однако методы могут создавать пиксели случайного цвета в однородных по цвету областях. Это особенно характерно для больших изображений, содержащих объекты с большим количеством цветов и области с однотонными неизменными цветами.

Опция "convert -list dither" предоставит дополнительную информацию.


• -kmeans colors {x iterations} {+tolerance}

Итеративное (многократное) уменьшение цветности на желаемое количество цветов. Например, "-kmeans 5x100+0,01". Исходные цвета находятся с помощью цветового квантования.

Здесь итерации это количество проходов (по умолчанию 100 проходов). Сходимость - порог остановки при изменении цвета между итерациями, по умолчанию 0,01. Обработка завершается, если итерация завершена.

Используйте "-define kmeans:seed-colors color-list" для инициализации цветов, где "color-list" - это список исходных цветов, разделенных точкой с запятой. Например, "-define kmeans: seed-colors red; sRGB (19,167,254); #00ffff". Палитра цветов имеет приоритет над квантованием цвета. Список цветов имеет приоритет над количеством цветов. Любым неопределенным начальным цветам назначаются случайные цвета, взятые из изображения.


• -monochrome

Преобразует изображение в монохромное (черно-белое).

bash$ convert logo.png -monochrome monochrome.gif

• -ordered-dither threshold_map {,level ... }

Дизеринг изображения с использованием предварительно определенного упорядоченного дизеринга (указанного пороговой картой) и однородной цветовой карты с заданным количеством уровней для каждого цветового канала.

Вы можете выбрать одну из стандартных карт пороговых значений.

~ threshold 1x1 Threshold 1x1 (non-dither)
~ checks 2x1 Checkerboard 2x1 (dither)
~ o2x2 2x2 Ordered 2x2 (dispersed)
~ o3x3 3x3 Ordered 3x3 (dispersed)
~ o4x4 4x4 Ordered 4x4 (dispersed)
~ o8x8 8x8 Ordered 8x8 (dispersed)
~ h4x4a 4x1 Halftone 4x4 (angled)
~ h6x6a 6x1 Halftone 6x6 (angled)
~ h8x8a 8x1 Halftone 8x8 (angled)
~ h4x4o Halftone 4x4 (orthogonal)
~ h6x6o Halftone 6x6 (orthogonal)
~ h8x8o Halftone 8x8 (orthogonal)
~ h16x16o Halftone 16x16 (orthogonal)
~ c5x5b c5x5 Circles 5x5 (black)
~ c5x5w Circles 5x5 (white)
~ c6x6b c6x6 Circles 6x6 (black)
~ c6x6w Circles 6x6 (white)
~ c7x7b c7x7 Circles 7x7 (black)
~ c7x7w Circles 7x7 (white)
«Threshold» создает простой 50%-ный порог изображения. Оператор можно использовать вместе с "-level" для постеризации.

Вы можете определить свою собственную карту пороговых значений для упорядоченного дизеринга и полутонового изображения в пользовательском или системном XML-файле thresholds.xml.

bash$ convert gradient.png -ordered-dither diag od_diag.gif
bash$ convert gradient.png -ordered-dither threshold,6 od_threshold_6.gif
bash$ convert gradient.png -ordered-dither checks,6 od_checks_6.gif
bash$ convert gradient.png -ordered-dither o2x2,6 od_o2x2_6.gif
bash$ convert gradient.png -ordered-dither o4x4,6 od_o4x4_6.gif
bash$ convert gradient.png -ordered-dither o8x8,6 od_o8x8_6.gif
Опция "-list threshold" покажет дополнительные значения.


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


Прим. Дизеринг, дизеринг (англ. dither от среднеанглийского didderen — дрожать) — при обработке цифровых сигналов представляет собой подмешивание в сигнал псевдослучайного шума с подобранным спектром. Применяется при обработке цифрового звука, видео и графической информации для уменьшения негативного эффекта от квантования.


• -posterize levels

Уменьшит цвета до ограниченного количества. Очень низкие значения «levels» (например 2, 3 или 4) приведут к заметному эффекту постеризации.

bash$ convert colorwheel.png +dither -posterize 2 posterize_2_cw.gif
bash$ convert colorwheel.png +dither -posterize 3 posterize_3_cw.gif
bash$ convert colorwheel.png +dither -posterize 6 posterize_6_cw.gif

• -quantize colorspace

Уменьшит количество цветов до необходимого для данного пространства. Этот параметр определяет цветовое пространство, используемое для уменьшения количества цветов, необходимых для последующего дизеринга такими операторами, как "-colors". Уменьшение количества цветов происходит автоматически при сохранении изображений в том или ином формате (например, GIF или PNG8).

Параметр "-quantize" становится особенно важным, когда выбрано небольшое количество цветов. Цвета сильно зависят от того, как организовано цветовое пространство.

Цветовой куб sRGB (красный, зеленый, синий) обычно приводит к выбору цветов, близких к основному цвету. Цветовое пространство sRGB хорошо подходит для таких изображений, как символы, логотипы, но это плохое цветовое пространство для фотографий.

Цветовое пространство CMY в точности совпадает с цветовым пространством sRGB, поскольку цветовые каналы этого пространства всего лишь инвертируются для преобразования между цветовыми пространствами sRGB и CMY.

Цветовое пространство CMYK делает почти то же самое. Поскольку канал «K» и палитра изображений используют один и тот же указатель данных, ImageMagick преобразует его обратно в CMY перед квантованием.

Цветовое пространство XYZ близко к линейному цветовому пространству RGB. Но цветовая ось сдвинута, чтобы лучше содержать все возможные цвета, которые мы можем видеть (и даже «невидимые» цвета), данные о цвете в цветовом круге сжимаются, после квантования становятся более «разбросанными».

Цветовые пространства LAB и LUV основаны на разных цветовых осях по отношению друг к другу.

Специальные цветовые пространства, включающие канал оттенка, такие как HSL, HSL (оттенок, насыщенность, яркость) и HWB (оттенок, белый, черный), дают представление цвета в цветовом круге как часть цветового пространства. (И на самом деле для создания этого цветового круга использовалось цветовое пространство HSL.)

YIQ, YUV предназначены для получения более естественных «пастельных» и «полутоновых» оттенков цветов, они намного лучше подходят для фотографий и изображений «реального» мира, обеспечивая тонкую работу с оттенками, особенно скинтонами.

bash$ convert alpha_gradient.png -quantize transparent \
+dither -colors 15 alpha_colors_15qt.png
Для получения полного списка доступных цветовых пространств см. оператор "-colorspace"


• -remap filename

Уменьшите количество цветов в изображении до цветов, используемых в данном файле-изображении «filename».

bash$ convert logo.png -dither Riemersma -remap colortable.gif remap_logo_rm.gif
bash$ convert logo.png -remap netscape: remap_netscape.gif
Если параметр "-dither" включен (включен по умолчанию), тогда заданные цвета смешиваются по мере необходимости, в противном случае выбирается ближайший цвет (в цветовом пространстве RGB) для замены этого пикселя в изображении.

В качестве побочного эффекта применения "-remap" ко всем изображениям в текущей последовательности все изображения будут иметь одну и ту же таблицу цветов. Это означает, что при сохранении в формате, например, GIF, эта таблица цветов будет применяться в качестве единой общей или глобальной таблицы цветов для всех изображений.

Опция "+remap" эквивалентна объединению всех изображений вместе (без дополнительных цветов фона) и уменьшению цветности этих изображений с использованием "-colors" с ограничением 256 цветов. Затем применяется оператор "-remap" к списку изображений. Поэтому все изображения соответствуют единой цветовой карте.

Если количество цветов во всех изображениях меньше 256, то оператор "+remap" не должен выполнять никакого уменьшения цвета или дизеринга, так как изменения цвета не требуются. В этом случае единственный эффект - принудительное применение глобальной таблицы цветов. Что рекомендуется после использования "-colors" или "-ordered-dither" для уменьшения количества цветов в последовательности анимированных изображений.


* Обратите внимание, что палитра переназначенного изображения имеет глубину не более 8 бит.



• -sampling-factor horizontal-factor x vertical-factor

Опция определяет коэффициенты дискретизации, которые будут использоваться кодировщиком JPEG для понижающей дискретизации цветности. Если этот параметр не указан, библиотека JPEG будет использовать свои собственные значения по умолчанию. При чтении или записи формата YUV и при записи формата M2V (MPEG-2) укажите "-sampling-factor 2x1" или "-sampling-factor 4:2:2"

Цветовая субдискретизация (англ. chroma subsampling) — технология кодирования изображений со снижением цветового разрешения, при которой частота выборки цветоразностных сигналов может быть меньше частоты выборки яркостного сигнала. Основана на особенности человеческого зрения, выраженной большей чувствительностью к перепадам яркости, чем цвета. Используется в системах аналогового и цифрового телевидения, цифровой видеозаписи и алгоритмах сжатия изображений, таких как JPEG.

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


• -segment cluster-threshold x smoothing-threshold

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

Укажите порог кластера как количество пикселей в каждом кластере, которое должно превышать пороговое значение, чтобы считаться допустимым. Порог сглаживания устраняет шум во второй производной гистограммы. По мере увеличения значения можно ожидать более плавной второй производной. По умолчанию 1,5.

Если параметр "-verbose" определен, возвращается подробный отчет о цветовых кластерах.


• -treedepth value

Глубина дерева для алгоритма уменьшения цвета. Обычно это целое значение равно нулю или единице, что приводит к оптимальной глубине дерева для алгоритма уменьшения цвета.

Оптимальная глубина позволяет наилучшим образом представить исходное изображение с максимальной скоростью вычислений и наименьшим объемом памяти. Однако для некоторых изображений глубина по умолчанию не подходит. Чтобы обеспечить наилучшее вычисление, попробуйте значения от 2 до 8 для этого параметра. Обратитесь к алгоритму уменьшения цвета для получения более подробной информации.

Параметры "-colors" или "-monochrome", или запись в формат изображения, требующий уменьшения цвета, заставят действовать опцию «treedepth». Возможно, это неплохой вариант для преобразования из одного формата в другой.

Введение в понижение цветности.

Опция "-remap" позволяет задать собственный набор предопределенных цветов.

Использование "-posterize" может математически разделить каждый цветовой канал на набор цветовых уровней или интенсивностей, создав «однородную цветовую карту». (Цветовая карта с постоянным набором значений или интенсивностей для каждого канала.)

И, наконец, "-threshold" позволяет назначить каждому цветовому каналу нулевое значение или значение «MaxRGB», в зависимости от уровня «Q».

bash$ convert colorwheel.png +dither -colors 32 color_quantize.gif
bash$ convert colorwheel.png +dither -remap colortable.gif color_predefined.gif
bash$ convert colorwheel.png +dither -posterize 3 color_uniform.gif
bash$ convert colorwheel.png \
-separate -threshold 50% -combine color_threshold.gif
Алгоритм дизеринга позволяет разместить пиксели разных цветов рядом друг с другом таким образом, чтобы заставить глаз видеть в изображении больше цветов, чем используется на самом деле. Цвет более точно соответствует исходному цвету изображения из-за того, что человеческий глаз «объединяет» соседние цвета вместе.

К основным стилям замены цвета относятся.

~ Прямое сопоставление цветов (порог и постеризация).
~ Случайный дизеринг (случайное размещение пикселей).
~ Дизеринг с коррекцией ошибок (псевдослучайные шаблоны пикселей).
~ Упорядоченный диффузный дизеринг пикселей (регулярные шаблоны пикселей).
~ Цифровое полутоновое изображение (точки разного размера).
Однако дизерингу присущи артефакты. Как только изображение размывается, цветовой узор становится частью изображения. А когда узор размыт, удалить его крайне сложно. Также, как правило, не рекомендуется повторно или многократно применять дизеринг к изображению, чтобы не ухудшать качество изображения.


* Случайный дизеринг - самый простой метод дизеринга. Однако это наихудший метод дизеринга, хотя у него есть несколько специальных применений.


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

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

Извлечение таблицы цветов.

bash$ identify -verbose image.png
bash$ convert image.png miff:- | identify -verbose -
bash$ convert image.png -verbose -identify null:
bash$ convert image.png -verbose info:
(Методы позволяют получить подробную информацию о цветах или гистограмму, если изображение содержит более 1024 цветов.)

Следующий метод лучший, чтобы создать гистограмму, извлечь комментарий.

bash$ convert tree.gif -format %c -depth 8 histogram:info:-
bash$ convert tree.gif histogram:- | identify -depth 8 -format %c -
Таблица цветов.

bash$ convert tree.gif -unique-colors -scale 1000% tree_colors.gif
bash$ convert tree.gif -unique-colors -depth 16 txt:-
Усредненный цвет изображения можно быстро найти, используя оператор "-scale" для уменьшения изображения до одного пикселя.

bash$ convert rose: -scale 1x1\! -format '%[pixel:s]' info:-
Вы можете получить средний цвет красного канала.

bash$ convert rose: -channel R -separate -format '%[mean]' info:
Извлечение определенного цвета.

bash$ convert rose: -format '%[pixel:p{40,30}]' info:-
bash$ convert rose: -crop 1x1+40+30 -depth 8 txt:-
Помните, что опция "-print" эквивалентна использованию "-format ... -write info:" и работает в любом месте цепочки обработки изображений.

Раскрашивание, колоризация, цветокоррекция.


• -colorize value

Раскрасит изображение на величину, указанную в «value», используя цвет, указанный в настройке "-fill".

Укажите степень окрашивания в процентах. К красному, зеленому и синему каналам могут быть применены отдельные значения с разделенным запятыми списком значений цветности. Например, "-colorize 0,0,50".

Оператор позволяет смешать некоторое количество белого с каким-либо иным цветом, сделав изображение ярче без полного насыщения.

bash$ convert test.png -fill white -colorize 50% colorize_lighten.png
Точно так же можно использовать цвет «black», чтобы затемнить изображение.

bash$ convert test.png -fill black -colorize 50% colorize_darken.png
Здесь используется цвет «gray50» - точный «средний» цвет цветового спектра RGB.

bash$ convert test.png -fill gray50 -colorize 40% colorize_grayer.png
Метод позволяет добиться эффекта «ненасыщенности».

Оператор "-colorize" также может использоваться с указанием в процентах «растворения» для каждого из трех цветовых каналов отдельно, что полезно для линейного затемнения (или осветления) изображения особым образом.

Часто "-colorize" применяют для простой замены всех цветов в изображении для стопроцентного тонирование, но с сохранением альфа-прозрачности.

bash$ convert test.png -alpha off \
-fill blue -colorize 100% \
-alpha on colorize_shape.png

• -color-matrix matrix

Применяет цветокоррекцию к изображению.

Этот параметр позволяет изменять насыщенность, оттенок, альфа-яркость и некоторые другие значения. Хотя можно использовать матрицы преобразования переменного размера, обычно применяется ячейка 5x5 для изображений RGBA и ячейка 6x6 для CMYKA (или RGBA со смещениями). Матрица аналогична матрице, используемой в Adobe Flash, за исключением того, что смещения указаны в столбце 6, а не 5 (для поддержки изображений CMYKA), также смещения нормализованы.

В качестве примера, чтобы добавить контраст к изображению со смещениями, попробуйте эту команду.

bash$ convert kittens.jpg -color-matrix \
' 1.5 0.0 0.0 0.0, 0.0, -0.157 \
0.0 1.5 0.0 0.0, 0.0, -0.157 \
0.0 0.0 1.5 0.0, 0.0, -0.157 \
0.0 0.0 0.0 1.0, 0.0, 0.0 \
0.0 0.0 0.0 0.0, 1.0, 0.0 \
0.0 0.0 0.0 0.0, 0.0, 1.0' kittens.png
Оператор "-color-matrix" перекрашивает изображения с помощью матрицы. Вы определяете матрицу значений, в которой указано, как линейно смешивать различные значения цветовых каналов для получения новых значений цвета.

Типичное использование - предоставить оператору 9 значений, которые образуют три функции (строки), или предоставить три множителя (столбцы). Первые три числа - это формула цвета для красного канала, а следующие для зеленого и синего.

bash$ convert rose: -color-matrix ' 1 0 0 0 1 0 0 0 1 ' matrix_noop.png
Это эквивалентно применению уравнений.

~ red'=1*red+0*green+0*blue
~ green'=0*red+1*green+0*blue
~ blue'=0*red+0*green+1*blue
В данном конкретном случае изображение не изменяется.

Смешивая строки, вы можете менять местами различные каналы.

bash$ convert rose: -color-matrix ' 0 0 1 0 1 0 1 0 0 ' matrix_red_blue_swap.png
Или просто скопируйте красный канал в два других канала, чтобы извлечь «красный канал».

bash$ convert rose: -color-matrix ' 1 0 0 1 0 0 1 0 0 ' matrix_red_channel.png
Можно преобразовать изображение в изображение в оттенках серого, используя соотношение оттенков серого 2/5/3.

bash$ convert rose: -color-matrix '.2.5.3.2.5.3.2.5.3 ' matrix_grayscale.png
Вы можете применить матрицу, содержащую до 6 строк и столбцов. Они соответствуют каналам: «Red», «Green», «Blue», «Black» «Alpha» (если установлено) и «константа».


* Обратите внимание: «Black» и «Alpha» каналы должны быть предоставлены, если матрица большая, даже если их значения не указываются.


Последний столбец, «константа», это добавление или вычитание, если значение отрицательное, к формуле. Шестая строка игнорируется.

По умолчанию определение матрицы имеет ту же структуру, что и ядро морфологии или свертки, определяемое пользователем, и рассматривается как ядро «Square», если геометрия размера не указана. Смещение ядра в настоящее время не используется. Данный массив значений накладывается на матрицу 6x6 перед применением к изображению. Внутренняя обработка подразумевает, что вы можете вычислить значение матрицы несколькими строками чисел. Это полезно, когда вам нужно включить «константу» в расчеты цвета или вы хотите изменить только один канал.

Например, инвертировать изображение.

bash$ convert rose: -color-matrix '6x3: -1 0 0 0 0 1 0 -1 0 0 0 1 0 0 -1 0 0 1' matrix_negate.png
Установите все значения красного канала на максимум, используя «константу».

bash$ convert rose: -color-matrix '6x1: 0,0,0,0,0,1' matrix_red_max.png
Из-за наложения на единичную матрицу никакие другие значения канала не меняются, хотя они пересчитываются.

Здесь мы получаем цвет сепии.

bash$ convert rose: -color-matrix \
' 0.393 0.769 0.189 0.349 0.686 0.168 0.272 0.534 0.131 ' \
matrix_sepia.png
Яркие цвета в технике «Digital Velvia» - матрица увеличивает яркость каждого цветового канала, вычитая цвета из других каналов, что делает цвета более яркими в изображении RGB.

bash$ convert rose: -color-matrix \
' 1.2 -0.1 -0.1 -0.1 1.2 -0.1 -0.1 -0.1 1.2 '\
matrix_vivid.png
Цвет с эффектом полароидной фотопленки.

bash$ convert rose: -color-matrix \
'6x3: 1.438 -0.122 -0.016 0 0 -0.03 -0.062 1.378 -0.016 0 0 0.05 -0.062 -0.122 1.483 0 0 -0.02 ' \
matrix_polaroid.png

• -negate

Заменяет каждый пиксель дополнительным цветом. Интенсивность красного, зеленого и синего цветов изображения отменяется. Белый становится черным, желтый становится синим и т.д. Используйте "+negate" для удаления пикселей в градациях серого.

bash$ convert -size 100x100 gradient: -evaluate cos 0.5 -negate \
gradient_cosine.jpg
bash$ convert -size 106x106 radial-gradient: -negate \
-gravity center -crop 75x75+0+0 +repage gradient_radial.jpg

• -tint value

Раскрасит изображение цветом. Укажите степень тонирования в процентах. Чистые цвета (черный, белый, красный, желтый и т.д.) не подвержены влиянию "-tint".


* Оператор "-tint" позволяет оттенять только полутоновые цвета изображения.


Это оператор градаций серого, а цвет модерируется или усиливается заданным процентом (от 0 до 200). Для ограничения эффектов и чтобы не влиять на черно-белое изображение, оператор настраивается с помощью математической формулы.

Настройка "-tint 100" будет окрашивать идеальный серый цвет так, что он становится вдвое меньшей интенсивности, чем цвет подложки. Более низкое значение будет окрашивать в более темный цвет, а более высокое значение будет окрашивать его так, чтобы оно соответствовало этому цвету.

bash$ convert test.png -fill red -tint 40 tint_red.png
Также вы можете подкрашивать отдельные цветовые компоненты. Например, "-tint 30,40,20,10".

Чтобы сделать полутоновые цвета изображения ярче или темнее.

bash$ convert test.png -fill white -tint 130 tint_lighter.png
Если значение меньше 100, цвета «потемнеют».

bash$ convert test.png -fill white -tint 70 tint_darker.png
Здесь аргумент процента это не «процент смешивания», а скорее «процент яркости». Например, аргумент не будет работать с «черным» цветом заливки.

Цветовое пространство.


• -colorspace value

Установит цветовое пространство изображения.

Возможны следующие варианты: CMY, CMYK, Gray, HCL, HCLp, HSB, HSI, HSL, HSV, HWB, Jzazbz, Lab, LCHab, LCHuv, LMS, Log, Luv, OHTA, Rec601YCbCr, Rec709YCbCr, RGB, scRGB, sRGB, Transparent, xyY, XYZ, YCbCr, YCC, YDbDr, YIQ, YPbPr, YUV, Undefined.

Полный список цветовых пространств доступен с помощью опции "-list colorspace".

bash$ convert rose: -colorspace RGB -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_rgb.png
bash$ convert rose: -colorspace LAB -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_lab.png
bash$ convert rose: -colorspace LUV -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_luv.png
Используйте параметр "-profile" с указанием имени файла и пути для более точного преобразования цвета из линейных цветовых пространств RGB, CMYK или оттенков серого.


* Обратите внимание, что ImageMagick предполагает цветовое пространство sRGB по умолчанию, если опция "-format" не указывает иное. Для преобразования цветового пространства производится изменение гамма-коррекции, чтобы получить линейный RGB.


Оператор "-colorspace" определяет способ сохранения цвета изображения в памяти. Обычно каждое изображение имеет 3 или 4 канала данных. Текущее «цветовое пространство» определяет, что именно представляют данные каждого канала. Хотя каналы часто называются «красный», «зеленый», «синий» названия не всегда соответствуют определенному цвету.

Не думайте о канале «R» как о красном, воспринимайте его как канал 1, ведь он может содержать данные для «красного» или «голубого», в зависимости от цветового пространства.

Также часто используется цветовое пространство CMYK, где цвета зависят от количество цветных «чернил» для печати на бумагу, это субтрактивное цветовое пространство.


* Обратите внимание, что «K» - это сокращение от «blacK», что отрицает значения интенсивности.


В этом случае каналы «RGB» имеют альтернативные названия «голубой», «пурпурный» и «желтый» или просто буквы «C», «M» и «Y». Также добавляется специальный четвертый цветовой канал «черный» или «K». Это значит, что канал «Green» теперь используется как канал «Magenta».

То же самое происходит и с другими цветовыми пространствами. Например, если вы работаете в пространстве LAB, «красный» канал будет содержать значение «яркость», в то время как «зеленый» канал содержит значение «А» (или красно-зеленый), а «синий» значение «В» (сине-желтый).

Опция "-set colorspace" изменяет только настройку цветового пространства в памяти. Например, вы можете преобразовать RGB в HSL, но без изменения или модификации пикселей в файле. Типичный пример - когда вы вручную комбинируете данные канала, чтобы установить окончательное цветовое пространство.

Цветовое пространство scRGB требует поддержки HDRI, иначе оно ведет себя так же, как линейный RGB.


* High Dynamic Range Imaging, HDRI или просто HDR — метод работы с изображениями и видео, диапазон яркости которых превышает возможности стандартных технологий.


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

Используйте опцию «Undefined» для идентификации мультиспектральных изображений.

Хельмут Дерш, известный разработчик «Barrel Distortion» и «Len Correction», рекомендует подумать об использовании линейного цветового пространства LAB для обработки изображений, особенно для изменения размера или искажения изображения.

Настройка "gradient:gray(100%)-gray(0)" гарантирует, что создается градиент линейных данных RGB в линейном цветовом пространстве RGB. Опция "-set colorspace sRGB" указывает, что «линейный» градиент фактически находится в «sRGB».

Некоторые популярные цветовые пространства.

~ Нелинейная обработка цветов sRGB.
~ Цветовая радуга и оттенки: HSB, HSL, HSI, OTHA, интенсивность не сохраняется.
~ Цвета стандартной четкости, XYZ.
~ Точные или воспринимаемые цветовые различия (LAB и LUV, эквиваленты оттенков LCHab и LCHuv).
~ Лучшее сжатие значений цвета, например, в YIQ и YUV.
~ Телевизионное изображение: YCbCr, YPbPr, где Y сигнал BW.
~ Гамма-коррекция и цветовое пространство sRGB.
Пространство sRGB IEC-61966-2.1 применяется как многоцелевое стандартное цветовое пространство для различных цифровых устройств: цифровых камер, струйных принтеров и мониторов и т.д. Цветовое пространство sRGB соответствует диапазону цветов, воспроизводимому типичным монитором с гаммой 2,2. Поэтому пространство sRGB подходит для файлов без внедренного профиля, полученных с помощью цифровой камеры или сканера. Это цветовое пространство используется в web-дизайне, но не подходит для фотографии и профессиональной печати. Основной недостаток пространства заключается в сильном сужении CMYK: при цветоделении удается сохранить не больше 75-85% оттенков голубого цвета.

Пространство Adode RGB (1998) принято как стандарт для редактирования RGB-изображений, предназначенных для преобразования в CMYK. Так, Adode RGB (1998) используется как рабочее пространство RGB при допечатной подготовке в Photoshop. Пространство Adode RGB (1998) имеет широкую гамму цветов.

Пространство ProPhoto RGB — это RGB-пространство с широким диапазоном цветов, которое можно применять в качестве рабочего пространства при редактировании изображений, предназначенных для печати на струйных принтерах. Данное цветовое пространство, как и пространство Adode RGB (1998), можно использовать в большинстве случаев в качестве рабочего RGB-пространства. Однако если исходное изображение было получено в пространстве Adode RGB (1998), например, большинство цифровых камер позволяет устанавливать его, то в качестве рабочего пространства следует выбирать Adode RGB (1998).


* Цветовое пространство scRGB High-DynamicRange - метод хранения цвета с расширенным динамическим диапазоном. Поскольку метод использует 16-битные целые числа, то изображения scRGB должны сохраняться только в тех форматах, которые поддерживают эти настройки. Например, PNG, PPM, MIFF.



• -cycle amount

Смещение палитры изображения. «Amount» определяет количество позиций, на которые смещается каждая запись цветовой карты.


• -fuzz distance {%}

• fuzz="-fuzz distance {%} "

Цвета в пределах этого расстояния считаются равными.

Некоторые алгоритмы ищут «целевой» цвет. По умолчанию цвет должен быть точным. Используйте этот параметр для сопоставления цветов, близких к целевому цвету в пространстве RGB. Например, если вы хотите автоматически обрезать края изображения с помощью "-trim", но изображение было сканировано и целевой цвет фона немного отличается. Расстояние может быть выражено в абсолютных единицах интенсивности или в процентах от максимально возможной интенсивности (255, 65535 или 4294967295).

bash$ convert colorwheel.png -fuzz 90% -fill white -opaque white opaque_w90.jpg
bash$ convert colorwheel.png -fuzz 25% -fill gray50 -opaque gray50 opaque_g25.jpg
Используйте "+fuzz", чтобы сбросить значение «fuzz» на 0.


• -intent type

Укажите тип рендеринга при управлении цветом изображения.

Используйте этот параметр, чтобы повлиять на операцию управления цветом изображения (см. "-profile").

Выберите одно из следующих значений: Absolute, Perceptual, Relative, Saturation (абсолютное, перцепционное, относительное, насыщенное).

По умолчанию применяется перцепционное значение для цветового пространства sRGB, но для цветовых пространств RGB и Grayscale значение не определяется.

Добавьте опцию "-list intent", чтобы увидеть полный список значений.


* Рендеринг или отрисовка (англ. rendering — «визуализация») — термин в компьютерной графике, обозначающий процесс получения изображения по модели с помощью компьютерной программы. Модель — это описание объектов или явлений на строго определённом языке или в виде структуры данных. Такое описание может содержать геометрические данные, положение точки наблюдателя, информацию об освещении, степени наличия какого-то вещества, напряжённость физического поля и пр.


Черно-белое и монохромное изображение.


• -grayscale method

Переводит цветное изображение в оттенки серого.

При этом будет использован один из методов "-density" преобразования.

Например, чтобы преобразовать в (линейное) изображение в оттенках серого Rec709Luminance, введите.

bash$ convert in.png -grayscale Rec709Luminance out.png
Чтобы преобразовать изображение в (нелинейное) оттенки серого Rec709Luma.

bash$ convert in.png -grayscale Rec709Luma out.png
Лучший простой метод преобразования изображения в оттенки серого - применить настройку "-colorspace gray".

bash$ convert test.png -colorspace Gray gray_colorspace.png

* Обратите внимание, что синий цвет намного темнее красного.


Преобразование с использование "-colorspace gray" эквивалентно использованию формулы преобразования rec709luma с оператором "-grayscale".

bash$ convert test.png -grayscale rec709luma gray_grayscale.png
Значение «rec709luma» всего лишь одно из многих, определенных с помощью параметра "-intensity".

bash$ convert test.png -grayscale rec601luma gray_grayscale_601.png
Уровни интенсивности при разных формулах для каналов красного, зеленого и синего цветов немного отличаются.

Известно много методов преобразования цветного изображения в черно-белое.

Например, в данном случае алгоритм преобразует изображение в цветовое пространство HSL, затем извлекает яркостное значение. Также с помощью "-define modulate:colorspace" можно указать другие модели цветового пространства.

bash$ convert test.png -modulate 100,0 gray_modulate.png
Можно использовать оператор «FX» для усреднения трех каналов, чтобы получить чисто математическое значение шкалы серого.

bash$ convert test.png -fx '(r+g+b)/3' gray_fx_average.png
Среднее значение канала sRGB также эквивалентно каналу интенсивности цветового пространства OHTA (красный канал). Это «I» канал цветовой модели HSI.

Если сложить все три канала вместе («расстояние Манхэттена»), результирующее изображение не потеряет данные из-за эффектов «квантового округления», но вы можете удалить информацию о самых ярких цветах. Вы также теряете канал прозрачности.

bash$ convert test.png -separate \
-background black -compose plus -flatten gray_added.png
Вы можете применять технику добавления каналов для управления взвешиванием отдельных цветовых каналов.

bash$ convert test.png -fx '0.3*r+0.6*g+0.1*b' gray_diy.png
Можно использовать параметр «intensity».

bash$ convert test.png -fx intensity gray_intensity.png
Хорошо известный оператор "-evaluate" также позволяет провести преобразование.

Например, ниже создается черно-белое изображение с соотношением 2/5/3 каналов RGB.

bash$ convert test.png -channel R -evaluate multiply.2 \
-channel G -evaluate multiply.5 \
-channel B -evaluate multiply.3 \
+channel -separate -compose add -flatten gray_253.png
Вышеупомянутое будет страдать от эффектов «квантования» для ImageMagick, скомпилированного с поддержкой «Q8», так как результаты работы функции "-evaluate" будут сохранены в маленькое 8-битное целое число. Поэтому возникают потери точности в вычислениях. ImageMagick, скомпилированный с поддержкою Q16 или выше, будет давать более точный результат.

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

Также можно применить оператор "-separator".

bash$ convert test.png -separate -average gray_average.png
Использование оператора цветовой матрицы "-recolor" позволит вам указать весовые коэффициенты для трех цветовых каналов.

bash$ convert test.png -recolor '.2.5.3.2.5.3.2.5.3' gray_recolor.png
Обычно первая строка чисел - это весовой коэффициент для красного канала целевого изображения, следующие строки чисел для зеленого и последние три числа для синего.

Допустимо использовать оператор "-type", чтобы обрабатывать изображение как полутоновое.

bash$ convert test.png -type GrayScaleMatte gray_type.png

* Параметр "-type" обычно применяется, когда изображение читается или записывается в файл. Таким образом, его действие откладывается до окончательной записи изображения. Эффект также сильно зависит от возможностей формата файла изображения


Слои.


• -layers method

Обработка нескольких изображений, формирующих набор слоев изображения или кадров анимации.

Определяет различные методы работы с изображениями для упорядоченной последовательности, которая может представлять набор наложенных «слоев изображения», анимацию GIF или полностью «объединенную» последовательность анимации.

bash$ convert canvas_bgnd_coal.gif -layers CompareAny compare_any.gif gif_anim_montage compare_any.gif compare_any_frames.gif
bash$ convert canvas_bgnd_coal.gif -quiet -layers CompareClear compare_clear.gif gif_anim_montage compare_clear.gif compare_clear_frames.gif
bash$ convert canvas_bgnd_coal.gif -layers CompareOverlay compare_overlay.gif gif_anim_montage compare_overlay.gif compare_overlay_frames.gif
Полный список типов слоев доступен как опция "-list Layers".


• -flatten, -mosaic, -coalesce

Псевдонимы (ярлыки) соответствующих операторов.

Оператор "-layers flatten" использует ярлык "-flatten", "-layers mosaic" имеет псевдоним "-mosaic", "-layers coalesce" называется "-coalesce".

Оператор "-layers flatten" (или псевдоним "-flatten") скомпонует все изображения. Однако позиции изображения указываются с использованием текущего виртуального холста или смещения страницы.

bash$ convert -size 100x100 xc:skyblue \
-fill dodgerblue -draw 'circle 50,50 15,25' \
-page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-layers flatten flatten_canvas.gif
Вам не нужно создавать начальный холст, "-flatten" создаст его самостоятельно. Цвет холста определяется опцией "-background", а размер размером виртуального холста первого изображения.

bash$ convert -page 100x100+5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-background dodgerblue -layers flatten flatten_page.gif
Хотя параметр "-gravity" влияет на размещение изображения, заданное с помощью "-geometry", он не будет влиять на расположение изображения с виртуальным смещением холста.

bash$ convert -page 75x75+5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-background dodgerblue -flatten flatten_bounds.gif
Обычно "-flatten" используется для объединения нескольких слоев изображений.

bash$ convert balloon.gif \( +clone -background navy -shadow 80x3+5+5 \) +swap \
-background none -flatten flatten_shadow.png
Оператор "-layers mosaic" (псевдоним "-mosaic"): вместо того, чтобы создавать начальный холст на основе размера холста исходного изображения, "mosaic" создает холст такого размера, чтобы вместить все изображения.

bash$ convert -page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-background dodgerblue -layers mosaic mosaic.gif
Оператор "-layers merge" очень похож на предыдущий оператор. Он также создает холст такого размера, чтобы изображения помещались с соответствующими смещениями.

Оператор "-layers merge" объединяет изображения слоев для создания нового изображения слоя.

Если вам не нужно смещение, следует применить "+repage".

bash$ convert -page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-background dodgerblue -layers merge +repage layers_merge.gif
bash$ convert -page -5-10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-background dodgerblue -layers merge +repage layers_merge_2.gif
Оператор "-layers trim-bounds" гарантирует, что все изображения получат положительное смещение при минимальном размере холста, сохраняя при этом относительные положения и без фактического слияния изображений.

Оператор "-layers coalesce" (псевдоним "-coalesce") разработан для преобразования анимации GIF в последовательность изображений.

Однако он тесно связан с оператором "-flatten", что приводит к полезным эффектам для многослойных изображений.

bash$ convert -page 100x100+5+10 balloon.gif -layers coalesce coalesce_canvas.gif
При работе с изображением, состоящим из нескольких слоев, «coalesce» можно использовать для создания «прогрессивного наслоения».


* Следует принять меры предосторожности, чтобы отключить обработку анимации GIF.


bash$ convert -page 100x100+5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-set dispose None -coalesce miff:- |\
montage - -frame 4 -tile x1 -geometry +2+2 \
-background none -bordercolor none coalesce_none.gif

Композиция.


• -compose operator

Способ объединения изображений.

Параметр влияет на операторы обработки изображений, каким-либо образом объединяющие два (или более) изображения. Воздействует на операторы: -compare, -composite, -layers, -flatten, -mosaic, -sizes merge, -border, -frame, -extension.

bash$ convert rose: -channel R -evaluate multiply .2 \
-channel G -evaluate multiply .5 \
-channel B -evaluate multiply .3 \
+channel -separate \
-background black -compose plus -flatten grey_253.png
bash$ convert rose: -alpha set -mattecolor Gold -bordercolor none \
-compose Dst -frame 7x7+3+2 compose_frame_dst.gif
bash$ convert rose: -matte -mattecolor '#CCC6' -frame 10x10+3+4 \
\( -size 100x100 plasma:fractal -normalize -blur 0x1 \) \
-compose DstOver -composite frame_plasma.gif
bash$ convert rose: -repage +10+10 \
\( +clone -background black -shadow 60x3+5+5 \) \
\( granite: -crop 100x80+0+0 +repage \) \
-background none -compose DstOver -layers merge layer_dstover.gif

• -compose

Альфа-композиция двух изображениях и необязательной маски.

Возьмет первое изображение («фоновое», «целевое») и наложит второе (- «исходное») изображение в соответствии с текущими настройками "-compose". Расположение исходного или наложенного изображения контролируется в соответствии с настройками "-gravity" и "-geometry".

Если дано третье изображение, оно рассматривается как «маскирующее» в градациях серого относительно первого («целевого») изображения. Маска смешивается с исходным изображением. Однако если установлена настройка «displace», маска используется для создания отдельного изображения с Y-смещением.

Если метод "-compose" требует дополнительных числовых аргументов или флагов, они могут быть определены установками "-set option:compose: args". Некоторые методы "-compose" могут изменять целевое изображение за пределами области наложения.


* Включите в команду определение "-define compose:clip-to- self=true" для настройки.


Для оператора "-compose" есть методы с дополнительными числовыми аргументами. В команду "composite" эти аргументы передаются с использованием специальных опций: "-dissolve", "-blend", - "-watermark" (аналог "modulate"), "-displace" и "-distort".

Спецификация композитинга SVG требует, чтобы значения цвета инепрозрачности находились в диапазоне от 0 до «QuantumRange». Диапазон можно изменить с помощью настройки "-set option:compose:clamp=false".

Методы композиции.


• -average

Усреднит набор изображений. Если размеры изображений не совпадают, возникает ошибочная ситуация.

bash$ convert test.png -separate -average gray_average.png
bash$ convert rose: \( +clone -sepia-tone 60% \) -average sepia-tone_blended.jpg

• -blend geometry

Смешает одно изображение с другим по заданному абсолютному значению или в процентном соотношении.

«Blend» усреднит изображения в соответствии с заданными процентными значениями и «прозрачностью» каждого пикселя. Если указано только одно процентное значение, оно устанавливает вес составного или «исходного» изображения, в то время как фоновое изображение взвешивается на прямо противоположную величину. То есть "-blend 30%" объединяет 30% «исходного» изображения с 70% «целевого» изображения. Что эквивалентно настройке "-blend 30x70%".

В результате непрозрачность двух изображений (в наложенных областях) будет составлять 100%.

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

bash$ composite -blend {argument} -gravity South \
compose_R.png compose_plus_GB.png -alpha Set {result}
Метод "-blend" позволяет плавно заменять одно изображение другим без наложения.


* Поскольку изображения складываются (используется оператор «Plus»), вы можете перегрузить максимумы цветового канала.


В большинстве случаев рекомендуется применять "-blend" с одним аргументом.

bash$ convert rose: -type grayscale rose_gray.png composite -blend 0 rose: rose_gray.png -alpha Set blend_color_0.jpg composite -blend 50 rose: rose_gray.png -alpha Set blend_color_50.jpg composite -blend 100 rose: rose_gray.png -alpha Set blend_color_100.jpg composite -blend 150 rose: rose_gray.png -alpha Set blend_color_150.jpg composite -blend 200 rose: rose_gray.png -alpha Set blend_color_200.jpg
Фоновое изображение должно содержать альфа-канал.

~ 0x0. Изображения растворяются до полной прозрачности. Эквивалентно "compose Clear".
~ 0. Фоновое изображение не меняется. Эквивалентно "compose Dst".
~ 100. Наложение изображения на чистый холст. Эквивалентно "compose Src".
~ 100x100. Два изображения сложены вместе. Эквивалентно "compose Plus".
~ 50. Среднее значение двух изображений. Это эквивалентно действию оператора "-average".

• -dissolve src_percent [x dst_percent]

«Растворит» изображение в фоновом на заданный процент.

Непрозрачность составного изображения умножается на заданный процент, затем оно накладывается «поверх» основного. Если «src_percent» больше 100, растворение основного изображения будет прозрачным при значении 200. Если определены два значения, каждое изображение растворяется в указанном соотношении.


* Обратите внимание, что проценты растворения не складываются: два непрозрачных изображения, растворенные 50,50, дают 75% прозрачность. Для смешивания двух изображений 50%+50% вам необходимо использовать значения растворения 50,100.


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

Если задан только один процентный аргумент, растворяется только наложение. В диапазоне от 0% до 100%, фоновое изображение не растворяется, в то время как от 100% до 200% наложение остается как есть, но растворяется фоновое изображение.

bash$ composite -dissolve {argument} -gravity South \
star.gif dragon_sm.gif -alpha Set {result}
Фоновое изображение должно содержать альфа-канал.

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

bash$ convert dragon_sm.gif star.gif -alpha on \
-compose dissolve -define compose:args='50,50' \
-gravity South -composite dissolve_50_50.png
bash$ composite -compose Dst_Over -tile pattern:checkerboard \
dissolve_50_50.png dissolve_50_50_bg.png
Ниже приведены особые случаи для метода "-dissolve".

~ "0x0", изображения растворяются до полной прозрачности. Эквивалентно "compose Сlear".
~ "0", фоновое изображение не меняется. Эквивалентно "compose Dst".
~ "100", наложение изображения на фон. Эквивалентно "compose Over".
~ "200", наложение изображения на чистый холст (фон прозрачный). Эквивалентно "compose Src".

• -watermark brightness x saturation

Водяной знак на изображении с заданной яркостью и насыщенностью.

Берется изображение в градациях серого (с альфа-маской) и изменяется яркость целевого изображения в соответствии со значением оттенков серого изображения водяного знака и процентным значением «brightness». Атрибут насыщенности цвета напрямую изменяется процентным значением «saturation» (по умолчанию 100%, без изменений цвета).

Оператор и утилита composite.


• -composite

Выполнит альфа-композитинг для двух изображений и дополнительной маски.

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

bash$ composite {overlay} {background} [ {mask} ] [-compose {method} ] {result}
Команда-утилита "composite" - обычный метод композиции IM. Также можно использовать, с небольшими синтаксическими особенностями, команду "convert" и внутренний оператор с аналогичным названием "-composite".

bash$ convert {background} {overlay} [ {mask} ] [-compose {method} ] -composite {result}
Альфа-композитинг контролируется параметром "-compose", установленный по умолчанию как «Over». В данном случае исходное изображение перерисовывается над фоновым изображением (определяются как «source» и «destination»).

Утилита "composite" и оператор "-composite" ImageMagick предоставляют основные средства для размещения изображения поверх других изображений различными способами.

Метод компоновки по умолчанию «Over», он «накладывает» наложенное изображение на фоновое, предсказуемо обрабатывая прозрачность. Фоновое изображение определяет окончательный размер, независимо от того, где находится наложение (см. параметр "-geometry").

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

bash$ composite -gravity center castle.gif frame.gif castle_button.gif
Вы также можете точно разместить фрагменты изображений.

bash$ composite -geometry +31+105 hand_point.gif dragon.gif \
dragon_claw_pointed.jpg
То, как изображение отображается на фоне, контролируется параметром "-compose". По умолчанию, как указано выше, определена настройка "-compose over".

Большинство других предоставленных методов компоновки не очень удобны, за исключением очень специфических ситуаций.

Методы Дафф-Портера.

Методы Дафф-Портера: Over, Dst_Over, Src, Copy, Replace, Dst, In, Dst_In, Out, Dst_Out, ATop, Dst_ATop, Clear, Xor.


* Dst фоновое изображение, сокращение от «destination». Src исходное, «source». Метод компоновки по умолчанию «Over».


Методы «очистки»: Src, In, Dst_In, Out, Dst_ATop и Clear.

Вы можете определить с помощью "define" методы наложения, например, "compose:outside-overlay=false", что позволит алгоритмам Дафф-Портера не очищать целевое изображение за пределами наложенной области.


* Обратите внимание, что «Copy» это специальный 13-й метод объединения, предоставляемый IM.


Методы альфа-объединений Дафф-Портера не допускают, чтобы прозрачные пиксели были видимыми. Это важно, поскольку полностью прозрачная часть изображения имеет неопределенный цвет. Именно поэтому методы Дафф-Портера считаются предпочтительным методом маскирования при работе с цветными изображениями.


• Over, наложенное изображение над фоновым.

Наложенное изображение помещается «поверх» фонового изображения.

bash$ convert -background none -fill white \
-font Ravie -pointsize 36 label:A label_A_white.png
bash$ composite -gravity center label_A_white.png rose: compose_over.gif

• Dst_Over, изображение "под" фоновым.

• :: convert -background none -fill black \

• -font Ravie -pointsize 36 label:A label_A_black.png

• :: composite -compose Dst_Over -geometry +5+5 \

• label_A_black.png label_A_white.png compose_under.png

Размер фона сохраняется, в то время как положение наложения относительно фона может быть изменено и обрезается фоном.


• Src, обрежет изображение до размеров фонового изображения.

Метод полностью заменяет фоновое изображение наложенным. Цвета и прозрачность фона теряются, остается «пустое» изображение с размером фонового.

bash$ composite -compose Src -size 100x100 plasma:tomato-dodgerblue \
rose: compose_crop.gif
Подобное применение эквивалентно операции "-crop". Сохраняются метаданные исходного изображения.

bash$ composite -compose Src -gravity South \
hand_point.gif rose: -alpha set compose_expand.gif

• Copy, скопировать или заменить изображение.

Метод не входит в число 12 методов компоновки Дафф-Портера. Метод подобен методу «Src», но не затрагивает фоновое изображение за пределами наложенной области. Что позволяет обрезать небольшую часть большого изображения, затем манипулировать небольшим изображением, а затем «скопировать» результаты на большое изображение. Это оптимизирует скорость работы с очень большими изображениями.

bash$ composite -compose Copy -gravity South \
hand_point.gif rose: -alpha set compose_copy.gif
Вы можете контролировать, как будет влиять метод на области за пределами наложения с помощью настройки "compose:outside-overlay". По умолчанию опция включена, ее можно выключить, установив значение «false»: "-define compose:outside-overlay=false"


• Dst, безоперационная композиция.

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

bash$ convert rose: -alpha set -mattecolor Gold -bordercolor none \
-compose Dst -frame 7x7+3+2 compose_frame_dst.gif

• In и Dst_In, маскируется фоновое изображение.

Операторы (Src-)In и Dst-In похожи на операторы маскирования: они позволяют создавать сложные пересечения.

Метод «Dst_In» позволяет использовать исходное изображения как маску для фонового. Удалит форму наложенного изображения из фонового.

bash$ composite -compose Dst_In -gravity center \
label_A_white.png rose: -alpha Set compose_mask.png

• Out и Dst_Out, методы удаления.

Операторы «Src_Out» и «Dst_Out» подходят для «вырезания» отверстий в «source» или «destination», соответственно или по форме Dst, или по форме Src.

Метод можно описать метафорически как «тесто для печенья», так как «Dst_Out» это тесто, оставшееся после вырезания печенья формочкой.

bash$ composite -compose Dst_Out -gravity center \
label_A_white.png rose: -alpha Set compose_erase.png
bash$ composite -compose Plus compose_mask.png compose_erase.png \
compose_rejoin.png

• ATop, обрезка до фонового изображения.

Операторы (Src-)Atop и Dst-Atop позволяют накладывать новое содержимое на уже существующее, одновременно маскируя его по контуру. Ограничивает результирующее изображение исходной формой фонового. Другими словами, альфа-канал в месте назначения не изменяется, но цвета изображения перекрываются любыми непрозрачными частями исходного изображения.


• Clear, очистка фонового, накладываемое изображение игнорируется.

Необычный метод компоновки, он игнорирует наложенное изображение и «очищает» фоновое. Что делает его идеальным методом создания прозрачного или черного холста размером с фоновое.

bash$ composite -compose Clear null: rose: -alpha Set compose_clear.png

• Xor, очищает общую область.

Оператор исключающего ИЛИ (xor): сохраняет или исходное («source»), или целевое («destination») изображения, совпадающие области "исчезают". Малоиспользуемый метод композиции. Накладывает два изображения, затем очищает перекрывающуюся область до прозрачности.

bash$ convert -size 60x60 \
\( xc:none -fill blue -draw 'circle 21,39 24,57' \) \
\( xc:none -fill red -draw 'circle 39,39 36,57' \) \
-compose Xor -composite compose_xor_2.png

Специальные методы композиции.


• Mathematics

Оопределяемый пользователем метод математической композиции.

Составной метод принимает 4 числовых значения, что позволяет пользователю определять множество различных математических методов компоновки.


* Четыре аргумента «A», «B», «C» и «D» определяют формулу A*Sc*Dc+B*Sc+C*Dc+D. Здесь «Sc» - исходное изображение, а «Dc» - фоновое изображение. Необходимо указать все четыре значения.


Например, можно создать эквивалент «Multiply», используя значения "1,0,0,0".

bash$ convert gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='1,0,0,0' -composite \
mathematics_multiply.png
Или создать аналог метода «Screen».

bash$ convert gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='-1,1,1,0' -composite \
mathematics_screen.png
Метод «LinearLight» напрямую определяется с помощью аргументов "0,2,1,-1".

bash$ convert gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='0,2,1,-1' -composite \
mathematics_linearlight.png
Список некоторых аргументов дается ниже.

~ Multiply: 1,0,0,0
~ Screen: -1,1,1,0
~ Exclusion: 0,1,1,-1
~ Linear_Dodge: 0,1,1,0
~ Linear_Burn: 0,1,1,-1
~ Linear_Light: 0,2,1,-1
Другие методы компоновки потребуют сложных вычислений, но вы можете создать собственные алгоритмы.

Например, создать расширенную альтернативу «LinearLight»

bash$ convert gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='0,1,1,-0.5' \
-composite mathematics_linearlight_2.png
bash$ convert gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='0,1,.5,-.25' \
-composite mathematics_linearlight_3.png

• Change_Mask

Сделает "похожие" пиксели прозрачными.

Необычный метод, который делает полностью прозрачными только определенные пиксели в конечном изображении. То есть обрабатывает пиксели в конечном изображении, которые соответствуют заданному исходному изображению, но в соответствии с текущим значением параметра «fuzz».

bash$ convert overlay_figure.gif overlay_bgnd.gif \
-compose ChangeMask -composite overlay_removed.png

* Обратите внимание, поскольку цвета изображения JPEG часто имеют незначительные изменения цвета из-за потерей, потребуется настройка «fuzz».


Также, если измененная часть изображения совпадает с цветом фона или узором, вы получите «дыры» в результирующем изображении или маске.

bash$ convert overlay_bgnd.gif overlay_figure.gif \
-compose ChangeMask -composite overlay_changed.png
Вы можете инвертировать альфа-канал, чтобы получить неизменные цвета.

bash$ convert overlay_figure.gif overlay_bgnd.gif -compose ChangeMask -composite \
-channel A -negate overlay_unchanged.png

Методы эффекта картирования изображений.

Метод «Blur» предоставляет метод размытия изображений.

«Displace» обеспечивает как абсолютный, так и относительный метод смещения поиска пикселей, что позволяет создавать искажения, а также эффекты стекла, линзы и ряби на воде.

Математические методы компоновки.

Математические методы композиции: Multiply, Screen, Bumpmap, Divide, Plus, Minus, ModulusAdd, ModulusSubtract, Difference, Exclusion, Lighten, Darken, LightenIntensity, DarkenIntensity.

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

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

bash$ convert -size 64x64 gradient: gradient_src.png
bash$ convert -size 64x64 gradient: -rotate 90 gradient_dst.png
bash$ composite gradient_src.png -compose Multiply gradient_dst.png \
gradient_result.png
В приведенном выше примере «Multiply» затемняет изображения.

«Multiply» (умножение): наложения пикселей напоминает наложение позитивной фотопленки на позитивную. При наложении черного цвета результатом будет черный цвет, при наложении белого изображение не изменится.

«Screen» (осветление): эффект смешивания двух проецируемых на один экран слайдов. Наложение белого пикселя дает белый цвет, наложение черного не изменяет пиксели.

bash$ convert -background black -fill white label:Rose label_black.gif
bash$ composite -compose Screen -gravity center \
label_black.gif rose: compose_screen.gif
«Bumpmap» (умножение оттенков серого).

Метод «Bumpmap» преобразует исходное изображение в оттенки серого перед наложением. Другими словами, метод затемнит изображение в любом месте темного исходного изображения.

bash$ composite -compose Bumpmap -gravity SouthEast -geometry +3+3 \
hand_point.gif cyclops.gif -alpha Set compose_bumpmap.gif
«Divide», «Divide_Dst», «Divide_Src»: удаление эффектов затенения.

Два изображения отделены друг от друга. Как разделяются изображения, зависит от настроек «Divide_Src» или «Divide_Dst».


* Обратите внимание, что порядок изображений очень важен.


Эти методы композиции чаще всего применяются при удалении виньеток с фотографий.

Поскольку используются нормализованные значения цвета в диапазоне от 0,0 (черный) до 1,0 (белый) деление сделает изображение ярче на количество «черного».

bash$ convert text_scan.png -normalize text_scan_norm.png
bash$ convert text_scan.png \( +clone -blur 0x20 \) \
-compose Divide_Src -composite text_scan_divide.png
В результирующем изображении цвет фона становится светлым, а тонкие линии текста остаются четкими.

«Plus», сложение цвета. Если добавленные цвета выходят за цветовые пределы, они будут обрезаны.

bash$ convert -size 60x60 xc:none -fill red \
-draw 'circle 30,21 30,3' compose_R.png
bash$ convert -size 60x60 xc:none -fill lime \
-draw 'circle 39,39 36,57' compose_G.png
bash$ convert -size 60x60 xc:none -fill blue \
-draw 'circle 21,39 24,57' compose_B.png
bash$ composite -compose plus compose_R.png compose_G.png compose_plus_RG.png
bash$ composite -compose plus compose_R.png compose_B.png compose_plus_RB.png
bash$ composite -compose plus compose_G.png compose_B.png compose_plus_GB.png
bash$ composite -compose plus compose_R.png compose_plus_GB.png \
compose_plus_RGB.png
«Plus» иногда используется для добавления белого текста к изображению. Это неправильное применение может привести к некоторым неожиданным эффектам сглаживания.

«Linear Dodge». Метод компоновки «Linear Dodge» эквивалентен «Plus», но использует композитинг «Over».

Метод «Plus» единственный математический оператор, который реализует функцию смешивания, отличную от «Over». Метод не только «добавляет» цвета, но также меняет значения альфа-канала.

«Minus», «Minus_Dst», «Minus_Src». Одно изображение вычитается из другого. Какое изображение будет вычитаться, зависит от «Minus_Src» или «Minus_Dst».

bash$ composite compose_plus_RGB.png -compose minus_dst compose_R.png \
compose_minus.png

* Обратите внимание на способ обработки альфа-канала.


«ModulusAdd» похож на метод «Plus», за исключением случаев, когда результат превышает белый цвет и поэтому оборачивается (по модулю) в черный цвет.

Например, если мы добавим два градиента в градациях серого, самые яркие пиксели будут объединены, чтобы сформировать второй градиент.

bash$ convert -size 60x60 gradient: gradient.png
bash$ composite gradient.png gradient.png -compose ModulusAdd compose_add.png
«ModulusSubtract» аналогичен методу «Minus», но это вычитание по модулю. Вычитание «белого» из «серого» приведет к исходному «серому», а не черному, поскольку значения будут обращены.

Как побочный эффект, некоторые области могут поменять цвет на белый (вместо черного).

bash$ composite -compose subtract compose_plus_RGB.png compose_R.png \
compose_subtract.png
«Difference»: сравнение изображений и выборочное отрицание. Разница черного и белого даст максимальный результат белого, в то время как любые одинаковые цвета будут черными.

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

Например, можно убрать половину изображения розы.

bash$ convert -size 2x1 pattern:gray50 -scale 70x50\! black_n_white.gif
bash$ composite black_n_white.gif rose: \
-gravity center -compose difference compose_negate.gif
«Exclusion»: разница в изображении без учета оттенков серого. Усредненная разница. Белое на белом даст черный, черное на черном дает черное.

«Lighten»: создает размытые версии исходного изображения так, чтобы светлые участки исходного изображения приобрели мягкое свечение.

bash$ convert flower_sm.jpg \( +clone -blur 0x3 \) \
-compose Lighten -composite flower_softglow.jpg
«Lighten-Intensity» и «Darken-Intensity»: выбор цвета по интенсивности.

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

bash$ convert red_gradient.png blue_gradient.png \
-compose Lighten_Intensity -composite lighten_intensity.png
Ряд вышеперечисленных математических методов также используется для поддержки множеств или логических операций с фигурами.

Метод «Lighten» можно использовать для поиска «объединения» (логического ИЛИ) двух или более пикселей.

bash$ convert -size 64x64 xc: -draw 'circle 22,32 5,32' -negate circle_left.gif
bash$ convert -size 64x64 xc: -draw 'circle 41,32 58,32' -negate circle_right.gif
bash$ convert circle_left.gif circle_right.gif \
-compose Lighten -composite circle_union.gif
Метод «Darken» создает «пересечение» (логическое И) пикселей.

bash$ convert circle_left.gif circle_right.gif \
-compose Darken -composite circle_intersection.gif
Метод «Difference»: исключающее ИЛИ (логическое XOR) двух групп.

bash$ convert circle_left.gif circle_right.gif \
-compose Difference -composite circle_disjunction.gif
Наконец, «Minus» можно использовать для создания «относительного дополнения» двух групп пикселей.

bash$ convert circle_left.gif circle_right.gif \
-compose Minus_Src -composite circle_complement.gif

Методы композиции освещения.

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

«Overlay»: добавление цвета к полутоновому объекту. Этот метод компоновки был разработан как объединение эффектов «Multiply» (затемнение) и «Screen» (осветление). Какой метод применяется к конкретному пикселю, выбирается значением целевого изображения, последнее можно рассматривать как «маску освещения».

bash$ convert -size 64x64 gradient:yellow-blue gradient_yell-blue.jpg
bash$ convert -size 64x64 gradient: -rotate 90 gradient_grey.jpg
bash$ convert gradient_grey.jpg gradient_yell-blue.jpg \
-compose Overlay -composite compose_overlay_gradients.jpg
«Hard_Light». Эффект подобен «Overlay», но исходное и конечное изображения меняются местами.

bash$ convert rose: -fill gray50 -colorize 100% \
-raise 4 -normalize -blur 0x4 lighting_effect.png
bash$ convert rose: lighting_effect.png \
-compose hardlight -composite compose_hardlight.png
Этот метод упрощает добавление как бликов (например, отраженного света), так и теней к существующему изображению.

bash$ convert rose: \( granite: -blur 0x.5 -normalize \) \
-compose hardlight -composite compose_texture.png
Метод «Soft_Light» добавит блики и тени к существующему цветному изображению. Однако цвета конечного изображения изменяются для получения более мягкого контраста и более плавного градиента световых эффектов.

bash$ convert rose: \( granite: -blur 0x.5 -normalize \) \
-compose softlight -composite compose_softlight.jpg
Метод «Pegtop_Light» похож на «Soft_Light», но использует сглаживающий алгоритм.

«Linear_Light»: метод затенения изображения, чувствителен к наложенному изображению.

Метод «Vivid_Light» дает эффект аналогичного метода Photoshop, и в основном это незначительно доработанный метод «Linear_Light».

Метода «Pin_Light» предназначен для лучшего сохранения средних тонов.

«Linear_Dodge»: метод эквивалентен одноименному методу Photoshop; «Linear_Burn» метод вычитания; «Color_Dodge» метод разделения.

«ColorBurn»: инвертирование «Color_Dodge».

bash$ convert N -negate D -compose ColorBurn -composite -negate R
С помощью «ColorBurn» можно очистить серый градиентный фон до чистого черного.

Копирование каналов.

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

bash$ convert -size 70x70 xc:black -fill white -draw 'circle 35,35 35,5' \
-fill black -draw 'circle 28,30 35,5' \
moon_mask.gif
bash$ convert -size 70x70 plasma:white-dodgerblue moon_mask.gif \
-alpha Off -compose CopyOpacity -composite moon_gradient.png
«Copy_Red», «Copy_Green», «Copy_Blue»: скопируют заданный цветовой канал исходного изображения в целевое изображение.

«Copy_Cyan», «Copy_Magenta», «Copy_Yellow» - синонимы предыдущих методов.


* Наименования каналов рассматриваются в параграфе "Цветовые пространства".


«Copy_Black» копирует канал Black из источника в пункт назначения, если он существует. Однако этот канал применяется только в пространствах CMYK.

«Hye». Оператор копирует оттенок исходного изображения, чтобы заменить оттенок целевого изображения, оставляя насыщенность фона «S» и яркость «L» неизменными. Предполагается, что изображения в цветовом пространстве RGB.

«Saturate» копирует насыщенность из источника в место назначения, при условии, что изображение является изображением с цветовым пространством RGB, оставляя без изменений цветовой оттенок «H» и яркость «L».

«Luminize». Копирует яркость «L» из источника в место назначения, оставляя цветовой оттенок и насыщенность неизменными.

Предполагается, что оба изображения хранятся в цветовом пространстве RGB.

«Colorise». Копирует оттенок и насыщенность из источника в место назначения, оставляя яркость цвета «L» неизменной.

Размытие, сглаживание.


• -adaptive-blur radius[x sigma]

Адаптивное размытие с уменьшением эффекта по краям. Применяется гауссовский оператор заданного радиуса и стандартного отклонения (sigma). Если «sigma» не задана, она устанавливается по умолчанию как 1.

bash$ convert -size 320x100 xc:black -font Candice -pointsize 72 \
-fill white -annotate +25+65 'Anthony' \
-gamma 2 +level 0,1000 -white-threshold 999 \
-morphology Distance Euclidean:4,1000 -auto-level \
-shade 135x30 -auto-level +level 10,90% \
-adaptive-blur 0x2 font_conic_smoothed.jpg

• -bilateral-blur width{x height}{+intensity-sigma}{+spatial-sigma}

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

«Spatial-sigma» зависит от обрабатываемого пространства матрицы. Большое значение означает, что удаленные пиксели влияют друг на друга, если их цвета близки (см. «intensity-sigma»). Когда диаметр окрестности больше нуля, он определяет размер окрестности независимо от «spatial-sigma». В противном случае диаметр пропорционален «spatial-sigma».

Значение по умолчанию для «intensity-sigma» и «spatial-sigma» составляет "0,75*диаметр" и "0,25*диаметр".

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


* Adobe Photoshop называет этот фильтр «размытием поверхности», GIMP предлагает название «селективное размытие по Гауссу».



• -blur radius; -blur radius{x sigma}

Уменьшает шум и снижает уровень детализации. Свернет изображение с гауссовым или нормальным распределением, используя заданное значение «sigma». Значение «sigma» определяет фактическую величину размытия. «Radius» применяется только для определения размера массива, который будет содержать вычисленное гауссово распределение. Это должно быть целое число. Если «radius» не задан или установлен на ноль, ImageMagick вычислит максимально возможный радиус распределения Гаусса.

Чем больше «radius», тем медленнее выполняется операция. Однако слишком маленький «radius» может привести к серьезным эффектам сглаживания. Скорее всего, «radius» должен быть как минимум в два раза больше значения «sigma», хотя увеличение в три раза даст более точный результат.

Думайте о «sigma» как о размере кисти для размытия изображения. Параметры это числа с плавающей запятой, поэтому вы можете указывать очень маленькое значение, например, 0.5.


* Обратите внимание, что при небольших значениях «radius», но больших для «sigma» видны артефакты в размытом изображении. Это особенно заметно, если оператор определен как "-blur 5x8".


Никогда не указывайте значения «radius» меньше, чем значения «sigma».

Наименьший «radius», который будет использовать IM, равен 3, и обычно он составляет "3*sigma" для версии ImageMagick Q16 (для ImageMagick Q8 радиус будет меньше из-за невысокой точности вычислений).

На размытие влияет настройка канала. Если мы хотим размыть все четыре канала изображения, следует воспользоваться настройкой "-channel" для всех каналов (например, «RGBA»). Допустимо размывать каналы по отдельности.

Алгоритм отличается от "-gaussian-blur" - здесь используются свойства разделимости распределения, когда применяется одномерная гауссова матрица в горизонтальном направлении, а затем процесс повторяется в вертикальном направлении.

Параметр "-virtual-pixel" определяет, как размываются пиксели, находящиеся за пределами изображения.

Попробуйте установить для «radius» значение 0. В этом случае оператор попытается автоматически определить лучший «radius» для «sigma». Ненулевой «radius» применяется редко, например, для очень маленькой сигмы или для специализированных размытий. Маленькие значения «sigma» обычно используются только для размытия линий и сглаживания краев на изображениях для которых ранее не использовалось сглаживание. В этой ситуации можно установить размытие 1x0.3 для удаления большинства «неровностей» с изображений. Всегда определяйте "-channel RGBA" при размытии изображений с альфа-каналом.

bash$ convert yellow_on_red.png -channel A -blur 0x8 \
-channel RGB -blur 0x8 yellow_on_red_GS.png

* Обратите внимание, что на опции "-blur" и "-radial- blur" влияет параметр "-channel".



• -gaussian-blur radius

• -gaussian-blur radius{x sigma}

Размытие изображения с помощью гауссовского оператора. Значение «sigma» является важным аргументом и определяет фактическую величину размытия.

«Radius» используется только для определения размера массива, содержащего вычисленное гауссово распределение. Поэтому значение «radius» должно быть целым числом. Если «radius» не задан или установлен на ноль, ImageMagick вычислит максимально возможный радиус для распределения Гаусса.

Чем больше значение «radius», тем медленнее выполняется операция. Однако слишком маленькое значение «radius» может привести к серьезным эффектам сглаживания. Ориентировочно «radius» должен быть как минимум в два раза больше значения «sigma», хотя трехкратное увеличение даст более точный результат.

bash$ convert face.png -gaussian-blur 0x2 face_gaussian-blur.png
Оператор отличается от более быстрого оператора "-blur" тем, что для генерации средневзвешенного значения соседних пикселей используется полная двумерная свертка.

Иногда трудно решить, какая функция лучше подходит для размытия изображений. Алгоритм "-blur" быстрый, но работает в два этапа: сначала по одной оси, потом по другой. Однако "-gaussian-blur" более точен с математической точки зрения, поскольку размывает во всех направлениях одновременно. Разница скорости между алгоритмами может быть огромной, в 10 или более раз, в зависимости от степени размытия.

Параметр "-virtual-pixel" определяет, как размываются пиксели, находящиеся за пределами искомого центрального пикселя.


• -motion-blur radius

• -motion-blur radius {x sigma}+ angle

Имитация размытия в движении.

Размытие с заданным радиусом (radius), стандартным отклонением (sigma) и углом (angle). Указывается угол, по направлению к которому изображение размывается.

bash$ convert -size 70x70 xc:none -channel RGBA \
-fill yellow -stroke red -strokewidth 3 \
-draw 'circle 45,45 35,35' -motion-blur 0x12+45 motion_blur.png
bash$ convert -size 70x70 xc:none -virtual-pixel edge \
-fill yellow -stroke red -strokewidth 3 -draw 'circle 45,55 35,45' \
-channel RGBA -motion-blur 0x12+65 vp_motion.png

* Обратите внимание, что размытие неравномерное, поэтому возникает эффект направления движения.


Параметр "-virtual-pixel" определяет, как размываются пиксели, находящиеся за пределами изображения.


• -radial-blur angle

Размытие вокруг центра изображения.


* Обратите внимание, что это фактически вращательное размытие, а не радиальное, и поэтому название может ввести в заблуждение.


Параметр "-virtual-pixel" определяет, как размываются пиксели, находящиеся за пределами изображения.

bash$ convert -size 70x70 xc:none \
-stroke red -strokewidth 15 -draw 'line 35,5 35,65' \
-stroke yellow -strokewidth 9 -draw 'line 35,5 35,65' \
-channel RGBA -radial-blur 30 radial_blur.png
bash$ convert -size 70x70 xc:none \
-stroke red -strokewidth 15 -draw 'line 5,50 65,50' \
-stroke yellow -strokewidth 9 -draw 'line 5,50 65,50' \
-channel RGBA -radial-blur 90 radial_blur_90.png
bash$ convert -size 70x70 xc:none \
-stroke red -strokewidth 15 -draw 'line 5,50 65,50' \
-stroke yellow -strokewidth 9 -draw 'line 5,50 65,50' \
-channel RGBA -radial-blur 180 radial_blur_180.png
bash$ convert -size 70x70 xc:none \
-stroke red -strokewidth 15 -draw 'line 5,50 65,50' \
-stroke yellow -strokewidth 9 -draw 'line 5,50 65,50' \
-channel RGBA -radial-blur 360 radial_blur_360.png

• -selective-blur radius

• -selective-blur radius{xsigma}{+threshold}

Выборочное размытие группы пикселей. Размывает группы пикселей, значения которых меньше или равны пороговому значению. Порог может быть определен в виде доли от «QuantumRange» или в процентах.

Резкость, усиление резкости.


• -adaptive-sharpen radius [x sigma]

Адаптивное повышение резкости пикселей с усилением эффекта по краям. Применяется гауссовский оператор заданного радиуса и стандартного отклонения (sigma). Если «sigma» не задана, настройка по умолчанию 1.

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

Для получения оптимальной резкости лучше воспользоваться следующими приемами.

~ Учитывайте, что при регулировке резкости визуально усиливается контрастность изображения.
~ Следует уменьшить шум изображения, прежде чем увеличивать резкость, чтобы не усиливать шум.
~ Резкость увеличивают постепенно. Первоначальным увеличением резкости исправляется размытие, возникшее во время сканирования или при съемке фотоаппаратом. После исправления цвета и размера, возможно, следует повторно изменить резкость изображения.
~ Резкость следует оценивать по изображению на конечном устройстве вывода.

* Прим. Радиус - количество пикселей, затрагиваемых фильтром вокруг искомых пикселей по краям. Чем больше значение радиуса, тем шире эффект контуров и очевиднее эффект резкости.



• -sharpen radius

• -sharpen radius{x sigma}

Увеличивает резкость изображения. Использует гауссовский оператор заданного радиуса и стандартного отклонения (sigma).

«Sigma» может быть представлена как любое значение с плавающей запятой от 0.1 (практически без повышения резкости) до 3 и более для сильного увеличения резкости. От 0,5 до 1,0 можно считать неплохими значениями.

«Radius» это предел эффекта. «Radius» указывается только в целых единицах, так как алгоритм работает с целыми числами. Чем больше «radius», тем медленнее алгоритм.

Для «sigma» лучше указать значение 1 или даже 2. Сначала не вводите первое число (или введите 0), что позволит автоматически рассчитать коэффициент. Чем больше «sigma», тем резче изображение.

Например, при установке "-sharpen 0x.4" резкость увеличивается незначительно; настройка "-sharpen 0x1.0" увеличивает резкость примерно на один пиксель; если указать "-sharpen 0x3.0", вероятно, резкость станет слишком сильной.

Оператор "-sharpen" своего рода «перевернутое размытие». Алгоритм оператора очень похож на алгоритм размытия, но только с обратным эффектом.


• -unsharp radius

• -unsharp radius{x sigma}{+gain}{+threshold}

Увеличивает резкость изображения с помощью маски нерезкости.

Оператор "-unsharp" увеличивает резкость изображения. Изображение свернуто с помощью гауссовского оператора заданного радиуса и стандартного отклонения (sigma). Для получение качественного эффета, значение «radius» должен быть больше значения «sigma». Используйте "radius 0", чтобы алгоритм установил подходящий радиус автоматически.

Параметры:

~ «radius», радиус Гаусса в пикселях, не считая центрального (по умолчанию 0);
~ «sigma», стандартное отклонение Гаусса в пикселях (по умолчанию 1.0);
~ «gain», разница между оригиналом и размытым изображением, последнее суммируется с оригиналом (по умолчанию 1.0);
~ «threshold», порог в виде доли от «QuantumRange», необходимый для применения величины разницы (по умолчанию 0,05).
Примеры.

Опция "unsharp 0x3+1+0" в основном дает эффект, подобный "-sharpen 0x3"

bash$ convert A_original_blur3.jpg -unsharp 0x3+1+0 \
A_original_blur3_unsharp3_1_0.jpg
Разница между эффектами зависит от того, используется ли гауссовское размытие.

Уменьшить резкость.

bash$ convert A_original_blur3.jpg -unsharp 0x3+0.5+0 \
A_original_blur3_unsharp3_0p5_0.jpg
Усилить резкость.

bash$ convert A_original_blur3.jpg -unsharp 0x3+2+0 \
A_original_blur3_unsharp3_2_0.jpg
Если увеличить порог, то резкость станет меньше.

bash$ convert A_original_blur3.jpg -unsharp 0x3 + 2 + 0.2 A_original_blur3_unsharp3_2_0p2.jpg
Нерезкое маскирование возникает во времена пленочных фотоаппаратов. Для мнимого повышения резкости увеличивали контраст между соседними областями изображения. Так, в фотоувеличитель вставляли негатив с наложенной размытой копией. Светлые стороны краев получались еще более светлыми, а темные – темными, на контрастных границах возникал ореол.

Фильтр усиливает контраст только на участках с резким перепадом яркости. Изображение визуально кажется более резким. Шумы и подчеркивание текстуры - неприятные эффекты фильтра.

Параметр «radius» влияет на ореол. При больших значениях «radius» можно немного повысить «threshold». Ненужного выделения текстуры в этом случае не происходит, а границы объектов остаются резкими.

Небольшое значение «radius» используется для усиления резкости очень четких мелких деталей (большое значение может их размыть).

Болшьшой «radius» и небольшое значение «gain» повышает контраст и производит эффект, известный как «hiraloam» – High Radius low Amount (высокий радиус, низкий эффект). Этот метод подходит для объектов, не имеющих четких краев.


* Прим. «Threshold», порог/изогелия, устанавливает минимальную разницу тона, по которой вычисляется граница. Увеличивая значение «threshold», можно сглаживать небольшую разницу между пикселями в неконтрастных областях и в то же время создавать необходимые ореолы вокруг областей с контрастными границами. «Threshold» может снизить акцентирование шумов в тенях.


Чтобы уменьшить шумы, можно применить фильтр "-unsharp" только к красному и зеленому каналам RGB-изображения. Синий канал часто бывает сильно зашумлен (особенно, если изображение формата JPG) и увеличение резкости в нем может привести к сильным артефактам. Для синего канала лучше применить устраняющие шумы фильтры. Увеличивая резкость в двух каналах, задайте одинаковое значение радиуса.

Удаление шумов, шумоподавление.


• -despeckle

• despeckle="-despeckle"

Удаляет пятнышки на изображении.

bash$ convert piglet.gif -background white -flatten \
-colorspace Gray -negate -edge 1 -negate -normalize \
-threshold 50% -despeckle \
-blur 0x.5 -contrast-stretch 0x50% \
color-in_cartoon.gif

• -enhance

Цифровой фильтр для улучшения зашумленного изображения.


• -kuwahara radius

• -kuwahara radius {x sigma}

Фильтр шумоподавления Кувахары, сохраняющий края. Фильтр Кувахары выполняет нелинейную фильтрацию изображений с сохранением резких краев. Однако после серьезной фильтрации изображение может быть похоже на грубо нарисованную картину. «Radius» более важен, чем «sigma». Если параметр «sigma» не указан, он будет вычисляться автоматически из «radius». «Sigma» обеспечивает дополнительный контроль сглаживания.


* Прим. Сглаживание с сохранением краев или фильтрация с сохранением краев: метод обработки изображений, при котором сглаживается шум или текстуры, но сохраняются резкие края. Примерами являются медианный, двусторонний, направленный, анизотропный диффузионный фильтры и фильтры Кувахары.



• -mean-shift widthxheight{+distance{%}

Удаление шума на изображении, сегментация цвета (например, - "-mean-shift 7x7+10%").

Опции «width» и «height» - это размер ячейки, а «distance» - цветовое расстояние, измеренное в диапазоне от 0 до 1 или от 0% до 100%.

Алгоритм сдвига является итеративным и, следовательно, тем медленнее, чем больше размер ячейки. Для расчета значения каждого пикселя получает все пиксели в ячейке с центром в данном пикселе и исключает те, которые находятся за пределами "radius sqrt((width-1)(height-1)/4)"окружающего пиксель. По этим пикселям определяется, какие из них находятся в пределах указанного квадрата цветового расстояния от текущего среднего. Затем алгоритм вычисляет новый центр "x,y" по этим координатам и новому среднему значению. Результаты будут лучше при использовании цветовых пространств, отличных от RGB. Рекомендуются YIQ, YUV или YCbCr, дающие эквивалентные результаты.


* Прим. Формула цветового отличия (англ. Color difference), также формула цветового различия, цветоразность, или цветовое расстояние (расстояние между цветами) — математическое представление, позволяющее численно выразить различие между двумя цветами в колориметрии. Распространенные определения цветового различия обычно используют формулу вычисления расстояния в евклидовом пространстве, однако при этом не каждое цветовое пространство является евклидовым с математической точки зрения.



• -median geometry

Применит к изображению медианный фильтр.

bash$ convert speckle_problem.gif -median 1 speckle_median.gif
Это устаревшая опция от одноименного метода.


• -wavelet-denoise threshold

• -wavelet-denoise threshold x softness

Удаляет шум из изображения с помощью вейвлет-преобразований. «Threshold» это значение, ниже которого все считается шумом; «threshold» устанавливается от 0,0 (нижнее значение) до «QuantumRange», или же указывается в процентах, например, 5%. «Softness» снижает порог и обычно имеет значение от 0,0 до 1,0. Чем выше значение, тем больше шума остается на изображении.

Популярный метод шумоподавления.


* Вейвлет-преобразование (англ. Wavelet transform) — интегральное преобразование, которое представляет собой свертку вейвлет-функции с сигналом. Вейвлет-преобразование переводит сигнал из временного представления в частотно-временное. Вейвлет-преобразование позволяет сосредоточить полезную информацию о деталях изображения в относительно малом числе вейвлет-коэффициентов. Поэтому можно обнулить (или подавить по амплитуде) большую часть остальных коэффициентов, которые относятся к шуму, провести обратное преобразование для восстановления обработанного изображения. Вейвлет-преобразование позволяет подавлять шум в различных масштабах, включая низкочастотные, «крупные» шумы.


Добавление шума.


• -attenuate value

Уменьшает (или увеличивает) добавление шума к изображению. Если не заданы параметры, значение эквивалентно 1.0, максимальному добавлению шума. Если добавить шум, можно немного улучшить изображение, пострадавшее от слишком сильного расширения тонового диапазона, а также если изображение уже содержит дефекты, например, плохо сканированные изображения.


• -noise geometry

• +noise type

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

Используйте «radius», чтобы указать ширину ячейки. Это эквивалентно операции "-statistic NonPeak", которую и следует применять в большинстве случаев.

Используйте "+noise", а затем укажите тип шума, чтобы добавить шум к изображению.

Возможны следующие значения для типа шума: Gaussian, Impulse, Laplacian, Multiplicative, Poisson, Random, Uniform.

Количество добавляемого шума можно контролировать с помощью параметра "-attenuate". Если параметр не задан, значение эквивалентно 1,0, что равно максимальному добавлению шума.

Тип «Random» заменит изображение шумом, а не добавит шум к изображению. Используйте «Uniform», если вы хотите добавить к изображению случайный шум.

Полный список шумов можно посмотреть с помощью опции "-list noise".

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

Оператор filter.


• -filter type

Используйте этот параметр, чтобы повлиять на изменения размера и на операторы "-resize" и "-distort".

Вы можете применять простые фильтры изменения размера: Point, Hermite, Cubic, Box, Gaussian, Catrom, Triangle, Quadratic, Mitchell, CubicSpline.

Также предустановлены фильтры «Bessel» и «Sinc» (или более быстрая эквивалентная форма «SincFast»). Однако эти фильтры, как правило, бесполезны, поскольку это бесконечные фильтры, ограниченные размером поддержки. Их прямое использование не рекомендуется, за исключением экспертных настроек (см. ниже).

Специальные функции фильтрации обычно обрабатываются оконной функцией, задаваемой параметрами "-filter". Настройка функций определит оконный фильтр, соответствующий задействованному оператору.

Оконные фильтры включают: Lanczos, Hamming, Parzen, Blackman, Kaiser, Welsh, Hanning, Bartlett, Bohman.

Предоставляется специальный фильтр «Lagrange», который автоматически изменяет функции в зависимости от текущих экспертных настроек «поддержки» или «лепестков».


* Если фильтр не выбран, по умолчанию устанавливается фильтр «Mitchell» для изображений с цветовой картой, изображений с матовым каналом или если изображение увеличивается. В противном случае фильтр по умолчанию «Lanczos».


Можно посмотреть полный список фильтров изменения размера с помощью опции "-list filter".

Вы можете изменить поведение фильтра при масштабировании изображения с помощью экспертных настроек (см. также "-define" и "-set"):

:: define filter:blur=factor
Используйте значение больше 1.0 для размытия, а значение меньше 1.0 для увеличения резкости. Настройки следует применять только с обычными гауссовскими и гауссовскими простыми фильтрами, иначе результаты могут быть непредсказуемыми.

:: define filter:support=radius
Установите радиус опоры фильтра, чтобы определить, насколько большой должна быть поддержка и насколько медленным будет процесс передискретизации. Все фильтры имеют «предпочтительный» размер поддержки по умолчанию. Некоторые фильтры, такие как «Lagrange» и оконные фильтры, настраиваются в зависимости от этого значения. С простыми фильтрами такая настройка либо не производит эффекта, но замедляет повторную выборку, либо приводит к неправильным работе фильтра.

:: define filter:lobes=count
Установите количество лепестков, которые будут использоваться для фильтра «Bessel/Sinc». Это альтернативный способ определения поддерживаемого диапазона фильтра, подходящий для оконных фильтров и для искажений изображения.

:: define filter:sigma=value
Значение «sigma» для определения фильтра Гаусса по умолчанию "0,5". Влияет только на фильтр «Gaussian», не сжимает (но может увеличивать) опору фильтра. Его можно применять для небольшого размытия, но без фильтра «недостающих» пикселей из-за маленькой настройки поддержки. Еще одним распространенным параметром является значение "0.707" (значение 1/sqrt(2)).

:: define filter:b=b-spline_factor
:: define filter:c=keys_alpha_factor
Переопределите значения для кубических фильтров, таких как «Cubic», «Catrom», «Mitchell» и «Hermite», а также «Parzen». Если определено только одно из значений, другое устанавливается так, чтобы генерировать фильтр «Cubic keys».

:: define filter:kaiser-beta=value
Значение «альфа» оконной функции «Kaiser» по умолчанию 6.5. Влияет только на оконную функцию «Kaiser».

:: define filter:kaiser-alpha=value
Значение при умножении на pi эквивалентно «Kaiser-beta» и переопределит настройку. Влияет только на оконную функцию «Kaiser».

:: define filter:filter=filter_function
Используйте функцию непосредственно как фильтр взвешивания. Это позволит вам напрямую применить, например, «Blackman» в качестве фильтра передискретизации. Если оконная функция не определена, устанавливается «Box».

:: define filter:window=filter_function
Фильтры БИХ (бесконечный импульсный отклик) «Sinc» и «Jinc» обрабатываются окнами (сбрасываются до нуля в заданном диапазоне поддержки) с заданным фильтром. Это позволяет вам указать функцию фильтра в качестве оконной функции для этих IIR-фильтров. Многие из определенных фильтров фактически являются оконными функциями для БИХ-фильтров. Типичный выбор - фильтр «Box», что эффективно отключает оконную функцию.

:: define filter:win-support=radius
Масштабируйте оконную функцию до указанного размера. Это приводит к тому, что окно (или оконный фильтр Лагранжа) срабатывает, если окно поддержки больше, чем фактически предоставлено вызывающему оператору. Однако фильтр по-прежнему ограничен реальным размером опоры. Если значение не задано, устанавливает нормальный размер поддержки фильтра.

:: define filter:verbose=1
Опция выводит информацию о выборе внутреннего фильтра. Сюда входит комментированный заголовок настройки фильтра. Однако обратите внимание, что некоторые фильтры определены через другие фильтры. Например, фильтр «Lanczos» определяется в терминах оконного фильтра «SincFast», а «Mitchell» определяется как общий фильтр семейства «Cubic» с настройками «B» и «C».

Используйте "-define filter:lobes {2,3,4}", чтобы указать размер поддержки фильтрации для фильтра «CubicSpline».

Например, чтобы получить 8-лепестковый фильтр «Sinc» с окнами «Jinc».

bash$ convert image.png \
-filter sinc \
-set filter:window=jinc \
-set filter:lobes=8 \
-resize 150% image.jpg'
Или необработанный фильтр «Sinc» с 4 лепестками.

bash$ convert image.png \
-set filter:filter=sinc \
-set filter:lobes=4 \
-resize 150% image.jpg'
Чтобы извлечь данные для необработанной оконной функции, объедините их с фильтром «Box».

Например, чтобы создать параболическую оконную функцию «Welch».

bash$ convert null: -define filter:filter=Box \
-define filter:window=Welch \
-define filter:support=1.0 \
-define filter:verbose=1 \
-resize 2 null: > window_welch.dat gnuplot set grid plot \
'window_welch.dat\' with lines

* Обратите внимание, что экспертные опции требуют глубокого понимания работы фильтров.


Особенности фильтров масштабирования.

Фильтры интенсивно изучались в конце 1980-х, и тогда же Пол Хекберт, крупный исследователь в этой области, создал программу для изменения размера изображения. По традиции, фильтрам даются названия по именам экспертов обработки изображений и математиков прошлого века. Что, впрочем, иногда затрудняет выбор фильтра. Лучше ли фильтр «Lagrange», названный в честь Джозефа-Луи Лагранжа, чем фильтр «Catrom», названный в честь Эдвина Катмулла и Рафаэля Рома?

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

Тот или иной алгоритм пытается применить какой-либо тип средневзвешенного значения исходных пикселей, чтобы определить подходящее значение для нового пикселя. Реальные пиксели, окружающие местоположение создаваемого пикселя, образуют «окрестность» вносящих вклад значений. Чем больше «окрестность» (ячейка, матрица, окно), тем медленнее изменяется размер. Это метод называют сверткой.

Величина, которую каждый реальный соседний пиксель вносит в создаваемый пиксель, определяется функцией взвешивания. Это и есть фильтр, который вы выбираете с помощью оператора "-filter". Фильтр обычно имеет указанный размер окрестности, «окно».

Интерполированные фильтры.

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

Используется только фиксированное и минимальное количество пикселей, но этот тип фильтров очень быстрый. Однако фильтрам данного семейства свойственны недостатки, поскольку не объединяется большое количество пикселей, чтобы сформировать изображение. Что может привести к сильным эффектам наложения и муара.

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

Если вы указываете оператор "-filter point", то применяется немасштабированный интерполяционный фильтр.

bash$ convert checks_10.gif -filter point -resize 9x9 checks_point-1.gif

* Фильтр «Point» не рекомендуется для обычного изменения размера изображения.


Фильтр «Box» похож на «Point», но алгоритм изменен. При сжатии изображений фильтр будет усреднять и объединять пиксели вместе. Чем меньше полученное изображение, тем больше пикселей будет усреднено.

bash$ convert checks_10.gif -filter box -resize 9x9 checks_box-1.gif
Рекомендуется применять «Box» для «биннинга» изображений. Также рекомендуется использовать оператор "-scale" вместо «Box». Оператор включает специальные алгоритмы смешивания пикселей: при увеличении изображения фильтры «Point» и «Box» будут осуществлять одинаковую «пиксельную репликацию» строк и столбцов, поскольку они используют простой выбор «ближайшего соседа». Оператор "-scale" работает очень похоже, но с некоторым смещением цветов, если увеличивать на коэффициент масштабирования целое число.

Фильтр интерполяции «Triangle» (или «Bilinear») продвигает интерполяцию ближайшего окружения на один шаг. Вместо усреднения соседних пикселей, как это делает «Box», фильтр взвешивает их в соответствии с тем, насколько близки позиции новых пикселей к исходным пикселям в пределах окрестности. Чем ближе новый пиксель к пикселю исходного изображения, тем больший цвет вносит исходный пиксель в результирующий. Что обеспечивает усреднение цветов при уменьшении размера изображений.

bash$ convert checks_10.gif -filter triangle -resize 9x9 checks_tri-1.gif
Поэтому может возникнуть тенденция к постепенному появлению или исчезновению усредненного серого цвета. И при увеличении кажется, будто добавлен цветовой градиент.


* Все фильтры интерполяции создают одинаковые градиентные узоры между соседними пикселями, что позволяет применить в последующем фильтрацию.


Фильтр «Hermite» похож на «Triangle», но дает более плавное округление при увеличении, сглаживает переходы градиента.

Фильтр «Lagrange» можно считать универсальным интерполяционным фильтром. Изменяя размеры «поддержки», фильтр может генерировать все ранее рассмотренные фильтры интерполяции (кроме «Hermite»). Настраивается по умолчанию как фильтр 3-го порядка Лагранжа, поддержка 2.0. Настройка обеспечивает вполне уместный результат, хотя изменение градиента может привести к заметным эффектам при увеличении.

Фильтр «Catrom» (Catmull-Rom) - хорошо известный стандартный кубический фильтр, часто используемый для интерполяции. Фильтр обеспечивает резкие края, но без заметного изменения градиента при крупномасштабном увеличении изображения, что иногда присуще фильтру «Lagrange».

Фильтры размытия по Гауссу.

Фильтр Гаусса (Gaussian filter) обычно используется в цифровом фотографии для обработки изображений с целью снижения уровня шума. При ресемплинге он дает сильное размытие изображения. Однако гауссовский фильтр очень полезен как легко управляемый фильтр устранения высокочастотного шума.

bash$ convert logo: -filter Gaussian -resize 150x logo_gaussian.png
Размытие изображения - компромисс, необходимый для удаления эффектов сглаживания при уменьшении изображения, а также некоторых эффектов при увеличении. Кроме того, фильтр никогда не будет производить никаких эффектов звона при правильном применении.

При увеличениях фильтр будет создавать круглые, а не квадратные точки.

bash$ convert xc:red -bordercolor yellow -border 1 \
-filter Gaussian -resize 99x99 -normalize dot_gaussian.jpg
Вы можете управлять фильтром Гаусса напрямую с помощью специальной экспертной опции, чтобы указать фактическое значение «sigma» кривой Гаусса.

:: -define filter:sigma={value}
По умолчанию это значение равно 0.5.

Экспертная опция была добавлена для создания очень маленьких размытий.

Однако увеличение значений «sigma» способно привести к проблемам. При увеличении «sigma» значение «поддержки» (2.0 по умолчанию) также увеличивается.

Другие фильтры типа Гаусса.

Фильтры «Quadratic» и «Spline» используют полиномиальными функциями, поэтому они быстро вычисляются. «Quadratic» дает более размытый эффект, чем фильтр Гаусса, а фильтр «Spline» еще более размывает изображение.

В отличие от фильтров интерполяции, эти фильтры имеют ненулевое значение на расстоянии 1,0 от точки выборки, что заставляет соседние пиксели изменять цвета и приводит к размытию.

Дополнительная «размытость» устраняет любой блочный эффект, последние часто возникают при крупномасштабных увеличениях. Фильтры применяются как техника повышения резкости изображений при увеличении, без серьезных эффектов «лестницы».

Профиль изображения.

Вы можете думать о «поддержке» как о скользящем по пикселям «окне», когда пиксели усредняются вместе для увеличения изображения. Поскольку размер поддержки 1,25, общая поддерживаемая область фильтра составляет 2,5 пикселя (не масштабируется во время увеличения изображения). Можно использовать 2 или 3 пикселя во время изменения размера по горизонтали.

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

Использование размера поддержки, установленного на целое или полуцелое число (например, установка по умолчанию 2.0 для фильтра Гаусса) гарантирует, что если в диапазон поддержки входит один пиксель, другой уходит. Это устранит некоторые нежелательные эффекты.

Резкие изменения наклона (неоднородности) в фильтрах, подобных фильтрам «Triangle» или «Lagrange», могут создавать видимые артефакты в результирующем изображении.

Если вы применяете очень большую настройку поддержки, придется усреднить много пикселей, что замедлит операцию изменения размера без улучшения результатов. Только оконные фильтры «Sinc()» и «Jinc()» (а также «Lagrange») могут дать лучший результат при настройке окна поддержки больше 2,0.


* Помните, что это «экспертные» варианты, и вы, вероятно, сделаете ситуацию хуже, чем лучше, пытаясь изменить настройки.


Фильтр размытия: экспертный контроль.

Специальная экспертная опция применяется для регулировки степени размытия.

:: -define filter:blur={value} 1.0
Настройка линейно увеличивает или сжимает кривую фильтра по оси X (расстояние пикселя от точки выборки) и, как правило, в целом делает фильтр более или менее размывающим.

Применение меньшего значения приводит к уменьшению окна поддержки. Для фильтров Гаусса эффект получается, будто вы умножили значение «sigma» фильтров (по умолчанию = 0,5) на коэффициент размытия. (Параметр также увеличит или сузит окно поддержки фильтров.)

bash$ for blur in 0.5 1.0 1.5; do \
bash$ convert logo: -define filter:blur=$blur -filter Spline \
:: -resize 150x logo_blur_$blur.png; \
:: done
(Здесь показаны три варианта «размытия»: 0.5, 1.0, 1.5.)

Поскольку размер «окна поддержки» также масштабируется настройкой размытия, очень малые значения масштабирования могут привести к тому, что повторная выборка «пропустит» все пиксели или создаст только пиксели с нулевым взвешиванием. В результате будут создаваться регулярные «черные» линии или блоки.

bash$ convert rose: -define filter:blur=0.1 -filter Gaussian \
-resize 100x100 rose_black_bars.png
Увеличение размера окна поддержки помогает предотвратить эти эффекты, но не для всех фильтров. Фильтры, способные работать с полезными ненулевыми значениями во всем диапазоне поддержки: «Box» и «Sinc» «Jinc».

Усиленный фильтр Гаусса.

Значение управления размытием «0.75» на фильтрах типа Гаусса или использование "sigma 0.375" создаст особый фильтр.

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

bash$ convert logo: -filter Gaussian -resize 150x logo_gaussian.png
bash$ convert logo: -define filter:blur=0.75 -filter Gaussian \
-resize 150x logo_gaussian_interpolate.png
Уменьшение размытости фильтра усилит эффекты наложения спектров, что с большей вероятностью приведет к созданию крупномасштабных эффектов муара.

bash$ convert rings_crop.png -filter gaussian -resize 100x100 rings_gaussian.png
bash$ convert rings_crop.png -filter gaussian -define filter:blur=0.75 \
-resize 100x100 rings_gaussian_interpolate.png

Оконные фильтры Sinc и Jinc.

"Sinc()" это математически совершенный фильтр. Фильтр не размывает изображение больше, чем необходимо (в отличие от фильтров Гаусса). И если изображение подвергается повторной дискретизации без изменения размера, то фильтр не влияет на изображение. Это сложный интерполяционный фильтр.

Функция "Jinc()" тесно связана с "Sinc()", но имеет полезные свойства для двумерной фильтрации, например, используемой оператором общего искажения.

Различие между фильтрами на основе "Sinc()" и "Jinc()" в том, как будут вычитаться соседние цветные пиксели из окончательного цвета. (Что приводит к обострению краев объектов или к четким цветным границам, артефактам звона.)

Рекомендуются «оконные» формы функции «Sinc», которые были разработаны экспертами по обработке изображений. Они включают такие фильтры, как: Blackman, Bohman, Hann, Hamming, Lanczos, Kaiser, Welch, Bartlett, Parzen.

Различные оконные фильтры.

Фильтр Ланцоша («Lanczos»), наверное, один из лучших оконных фильтров. Иные оконные фильтры, в том числе «Welch» (параболический), «Parzen» (кубический сплайн), «Kaiser» (Бессель) и, вероятно, «Bartlett» (треугольный или линейный) создавались из-за их простоты и быстроты расчета, хотя обычно считается, что они имеют плохую «частотную характеристику». Многие из этих оконных функций используются как фильтры передискретизации. Все фильтры (кроме «Bartlett») образуют две основные категории оконных функций.

Можно применять практически любую оконную функцию, но лучше придерживаться самого популярного фильтра «Lanczos». Он имеет хороший частотный спектр и, как правило, будет наилучшим выбором в качестве фильтра передискретизации.

Фильтры Ланцоша, Катмулла-Рома, Лагранжа.

«Lanczos» - самый известный из оконных фильтров, по умолчанию ImageMagick определяет «Lanczos» как трехлепестковый. Однако 2-лепестковый «Lanczos2» также популярен, поскольку позволяет избежать артефактов звона.

Фильтр «Catrom», или фильтр Катмулла-Рома, почти точная копия фильтра «Lanczos2» (двухлепесткового фильтра), но это кубический фильтр, что упрощает расчет.

Чтобы упростить настройку фильтра по количеству «лепестков», был создан специальный параметр: "-define filter:lobes={integer}"

Гауссовские фильтры математически медленные, оконные фильтры «Sinc» и «Jinc» еще медленнее и сложнее из-за необходимости вычислять тригонометрические параметры.

Однако фильтр «Lagrange» генерирует полиномиальную функцию для аппроксимации оконного фильтра. Фильтр настраивается в соответствии с настройками ячеек поддержки.

Значение поддержки по умолчанию 2.0 создает фильтр «Lagrange» третьего порядка. Фильтр подходит как для увеличения, так и для сжатия изображений с минимальными звоном и блочными эффектами, без размытия.

Чтобы получить фильтр Лагранжа четвертого порядка, вы должны использовать опцию "-define filter:support=2.5". Чем больше параметр окна поддержки, тем сильнее фильтр имитирует функцию "Sinc()", но медленнее вычисление.

Меньшие параметры поддержки позволяют имитировать большинство различных интерполированных фильтров. Размер поддержки 0.5 будет создавать эффект фильтра «Box», 1.0 приведет к эффектам, подобных использованию «Triangle».

Кубические фильтры.

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

Фильтр «Spline» (также псевдоним и настройка по умолчанию для кубических фильтров) имитирует фильтр размытия Гаусса. Его кривая известна как интерполяционная кривая «B-сплайн», она обычно используется для рисования плавных линий через набор точек. Фильтр часто применяют в анимации.

Фильтр «Catrom», или фильтр Катмулла-Рома, дает гладкую, не размывающуюся форму фильтра интерполяцию, что сказывается на общей резкости.

Кубический фильтр «Hermite» является типом сглаженного треугольного интерполяционного фильтра. Фильтр скругляет края, сохраняя при этом ровные «цветовые уровни» исходного изображения.

Семейство фильтров «B-Spline» дает различной степени эффекты размытия.

Семейство кубических фильтров «Keys» связано с фильтром Катмулла-Рома (α=0,5) и фильтром «B-сплайна» (α=0,0).

Семейство фильтров «Keys» сохраняет любой линейный (аффинный) градиент на изображении.

Фильтр Митчелла-Нетравали.

Когда-то Дон П. Митчелл и Арун Н. Нетравали выступили с докладом «Реконструкция фильтров в компьютерной графике», где были определены две переменные, известные как «B» (для кривых «B-сплайн») и «C». С двумя переменными вы можете определить любой кусочно-кубический фильтр с плавной подгонкой.

Что еще более важно, Митчел и Нетравали опросили группу из девяти экспертов по обработке изображений, чтобы классифицировать артефакты увеличения и уменьшения. Из исследования Митчелла и Нетравали следовало, что лучшим фильтром считался фильтр семейства «Keys». Этот фильтр теперь известен как «фильтр Митчелла-Нетравали». Это также фильтр по умолчанию для увеличения изображений IM.

Все встроенные кубические фильтры «Mitchell», «Robidoux», «Catrom», «Spline» и «Hermite» также отмечены экспертами, как и семейства фильтров «B-Spline», «Cardinal».

Экспертные настройки.

Вы можете использовать специальные экспертные настройки, чтобы установить настройки «B» и «C» для кубических фильтров.

Для этого вам нужно указать общую функцию «Cubic» (или любой из кубических фильтров), а также желаемые значения «B» и «C».

:: -filter Cubic
:: -define filter:b=value
:: -define filter:c=value
Экспертные настройки отменяют внутренние настройки по умолчанию для данного фильтра.

Если «B» или «C» не определены, значение будет рассчитано исходя из предположения, что нужен фильтр семейства «Keys». Значение «C» эквивалентно настройке «Keys», а «B» можно рассматривать как настройку «размытия» кубического сплайна. Поэтому воспринимайте «B» как «размытость». Значение «B=0» делает изображение очень резким (фильтр Катмулла-Рома), могут возникать гало- и звон, муар. Значение «B=1» приводит к размытию (сплайновому или гауссовскому).

«Hermite» - единственный встроенный кубический фильтр, не входящий в семейство фильтров «Keys». Также имеет наименьшую опору (1.0) среди всех кубических фильтров.

Фильтры «Robidoux» и «RobidouxSharp» очень похожи на «Mitchell», но они математически определены как цилиндрические фильтры.

Фильтр «Robidoux» это фильтр по умолчанию для оператора "-distort" (оператор искажения IM). Оператор искажения использует настройку фильтра для повторной выборки несколько иначе, чем оператор изменения размера.

В частности, "-distort" применяет фильтр, используя «радиальное» расстояние между «точкой выборки» и фактическими пикселями в пределах области выборки исходного изображения, чтобы определить веса каждого пикселя и окончательный цвет в точке выборки.

«Distort» применяет фильтры для создания «цилиндрических» форм (вместо «прямоугольных»), чтобы допускать произвольные искажения изображений, включая повороты и переменное масштабирование (растяжение и сжатие) в любом направлении, а не только вдоль оси X или Y.

Из-за этого сами фильтры часто нуждаются в настройке.

Здесь используется фильтр «Box», чтобы увеличить изображение в один пиксель в 30 раз, а ниже показан пример работы оператора искажения.

bash$ convert xc: -bordercolor black -border 1 \
-filter Box -resize 3000% dot_resize_box_black.png
bash$ convert xc: -bordercolor black -border 1 \
-filter Box +distort SRT 30,0 dot_distort_box_black.png
Когда фильтр «Box» используется в качестве цилиндрического фильтра, вы получаете круг или цилиндр в 3-х измерениях. Однако из-за способа обработки, применяемого фильтром, появляются области, где два пикселя отбираются для получения идеального серого среднего тона.

bash$ convert \( xc:red xc:white xc:black +append \) \
\( xc:blue xc:lime xc:white +append \) \
\( xc:black xc:red xc:blue +append \) -append \
-filter Box +distort SRT 30,0 color_box_distort.gif
Cпециальный фильтр Гаусса - единственный фильтр, который не дает разницы в результатах между ортогональной формой «изменения размера» и цилиндрической формой «distort».

bash$ convert xc:red -bordercolor yellow -border 1 \
-filter Gaussian +distort SRT 33,0 -normalize dot_distort.jpg
Поэтому многие реализации цилиндрической передискретизации применяют этот фильтр по умолчанию.

Фильтр «Gaussian» не создаст никаких артефактов наложения в результирующем изображении. Однако результат будет несколько нечетким.

Для оператора "-distort" по умолчанию используется фильтр «Robidoux», специально разработанный для получения резкого результата.

Цилиндрические фильтры Jinc.

Фильтр «Jinc» (иногда неточно называемая фильтром «Bessel») является эквивалентом "Sinc()", но для использования с цилиндрической фильтрацией. Хотя он очень похож и тесно связан с "Sinc()", его применяют для фильтрации не только в ортогональных (выровненных по оси) направлениях.

Функция "Jinc()" работает следующим образом: если точка выборки равна фактическому значению пикселя, функция "Jinc()" присваивает положительное значение близким ортогональным соседним пикселям, но затем присваивает аналогичное отрицательное значение удаленным пикселям. В результате, когда масштабирование (искажение) не выполняется, вклад соседей теоретически компенсирует друг друга.

Вот почему фильтр «Jinc» математически предпочтительное решение для цилиндрической передискретизации квадратного массива.

Но известна проблема с использованием фильтра «Jinc», особенно когда исходное изображение содержит хэш-шаблон на уровне пикселей (например, предоставленный "pattern:gray50"). В этой ситуации все ортогональные соседи отличаются от диагональных соседей, и в результате изображение становится сильно размытым.

Однако практически любой узор (линии, края, углы) остается резким и четким при использовании фильтра «Jinc».

Замыкание фильтров и операторов искажения.

В идеале безоперационное искажение должно возвращать точно такое же изображение.

Этим свойством обладают фильтры изменения размера (двухпроходные одномерные): «Lanczos» (Sinc-Sinc), «Lanczos2», «Catrom», «Hermite», «Triangle» и многие другие фильтры изменения размера. Но сохраняется пиксельный узор, если изображение не масштабируется.

С другой стороны, сглаживающие или размывающие фильтры, такие как «Gaussian», «Cubic» и «Quadratic», будут размывать изображение.


* Обратите внимание, что даже фильтр изменения размера по умолчанию, «Mitchell-Netravali», приводит к размытию, поскольку дает эффекты, подобные фильтру «Catmull-Rom».


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

Цилиндрический фильтр Ланцоша.

«Lancoz» обычно определяется как использующий функцию "Sinc()" для взвешивания и управления окнами фильтра. Но в качестве цилиндрического фильтра EWA, весовые функции будут заменены функцией "Jinc()". Впервые этот метод был предложен Андреасом Густафссоном в диссертации об интерактивном локальном искажении изображения. Он специально применил 2-лепестковый цилиндрический фильтр Ланцоша («Jinc Windowed Jinc»), и назвал его «Lanczos2D». Отсюда одноименное название. На самом деле это цилиндрический фильтр «Lanczos»(Jinc-Jinc) с экспертной опцией "filter:lobes=2".

«LanczosSharp» - вариант фильтра Ланцоша, дающий резкое изображение. Оконная функция "Jinc()" приводит к более размытым результатам, чем аналогичная оконная функция "Sinc()", что особенно характерно для небольших искажений.

Произведя некоторые вычисления, Николя Робиду, профессор математики в Лаврентийском университете, смог разработать резкую версию трехлепестковой цилиндрической модели Ланцоша, известную как «LanczosSharp», что в некоторой степени устранило проблему искажения изображений. Однако фильтр все еще имеет сильное размытие.

Та же проблема присутствовала в фильтре «Lanzcos2», поэтому Николас создал резкий «Lanczos2Sharp». В результате получился фильтр с минимальным размытием вертикальных или горизонтальных линий в случае отсутствия искажений.

Этот фильтр с повышенной резкостью приводит к небольшому смещению нулевой точки, так что теперь она находится приблизительно в точке 1.1684. Значение кажется не очень большим, но важно для размытия, которое создает фильтр для изображений с небольшими искажениями или без них.

«Lanczos Radius» - фильтр Ланцоша EWA, количество используемых лепестков по умолчанию 3, что соответствует целочисленному радиусу поддержки.

Как ни странно, эксперименты показали, что использование фильтра Митчелла-Нетравали как цилиндрического дает почти эквивалентные «резкие» результаты для случая «без искажений». Фильтр «Mitchell» особенно хорош при сохранении низкого уровня пиксельного хеша модели.

Кубический фильтр «Robidoux» является фильтром по умолчанию для "-distort", в частности из-за его свойства минимального размытия для изображений с маленькими искажениями.

Нельзя сказать, что это лучший фильтр, но это очень хороший компромисс, подобно тому, как фильтр «Mitchell» - хороший выбор для ортогонального (тензорного) изменения размера.

Цилиндрический фильтр «Robidoux Sharp» немного более резкая версия фильтра этой группы, хотя некоторые считают, что результаты избыточно резкие. Фильтр разработан специально для сохранения изображений, содержащих только черные и белые пиксели, с минимальной ошибкой в случае отсутствия искажений.

Фильтр «Mitchell» "размещается" почти точно между фильтрами «Robidoux» и «RobidouxSharp», все они принадлежат семейству фильтров «Cubic Keys». Если «Robidoux» слишком мягкий, а «RobidouxSharp» слишком резкий, имеет смысл попробовать фильтр «Mitchell».

Если изображение в формате JPEG, фильтры, основанные на преобразованиях Фурье («Lanczoses» и подобные), обычно работают лучше, чем фильтры, основанные на «приближениях гладких функций» («Robidoux», «Mitchell», «RobidouxSharp», «CatRom»). Это преимущество оказывается меньше, если используется формат PNG.

Экспертные элементы управления фильтрами.

Параметр "-filter" фактически используется только для поиска и установки соответствующих элементов управления. Настройки будут иметь приоритет перед значениями по умолчанию.

Настройка "-filter Point" полностью игнорирует настройки по умолчанию и приводит к немасштабированному прямому поиску (изменение размера) или интерполированному поиску (искажение). Таким образом, настройка отключает поисковый фильтр масштабированного изображения.

Опция "filter:verbose", возможно, будет необходимой, если приходится уточнить, как настроен фильтр.

Например, вы можете проверить, как определен фильтр Ланцоша.

bash$ convert null: -filter Lanczos -define filter:verbose=1 \
-resize 2 null: | grep '^#'

* Обратите внимание, что внутри фильтр Ланцоша определяется в терминах быстрой полиномиальной функции «SincFast» (4 лепестка), а не полной функции «Sinc», которая описывается в терминах намного более ресурсоемких функций тригонометрической библиотеки.


Опция "filter:verbose" - единственный способ проверить, как определен фильтр.

bash$ convert null: -filter Welch -define filter:verbose=1 \
-resize 2 null: > filter_welch.dat
Можно создать фильтр «Raw 8 lobed Sinc» с помощью следующих экспертных настроек.

:: -define filter:filter=Sinc
:: -define filter:lobes=8
Или используйте оконную функцию Блэкмана непосредственно в качестве фильтра.

:: -define filter:filter=Blackman
:: -define filter:support=4.0
Для оконной функции по умолчанию будет установлено значение «Box».

Принудительно использовать необработанную функцию "Jinc()", явно устанавливая «Box», можно с помощью следующих настроек.

:: -define filter:filter=Jinc
:: -define filter:window=Box
:: -define filter:lobes=3
12-лепестковый оконный фильтр Ланцоша, ограниченный только первыми 8-ю лепестками результирующего оконного фильтра.

:: -filter Lanczos
:: -define filter:win-support=12
:: -define filter:support=8
Настройка делает фильтр примерно в четыре раза быстрее за счет игнорирования «хвоста» результирующего фильтра «Sinc». Однако это может привести к некоторым незначительным артефактам из-за отсечения опоры.

Ниже используется фильтр Гаусса для «размытия» изображения. Что эквивалентно установке "-Gaussian 5x2", но с безоперационным искажением.

:: -filter Gaussian
:: -define filter:sigma=2
:: -define filter:support=5
:: -distort SRT 0
В этом случае оператор "-resize" не будет замыкаться.

Создайте фильтр по типу «Митчелл-Нетравали».

:: -filter Cubic
:: -define filter:b=0.5
:: -define filter:c=0.5
Создайте свой собственный фильтр «Keys Cubic» со значением C 0,4.

:: -filter Cubic
:: -define filter:c=0.4
Фильтры интерполяции, подобные «Hermite», идеально подходят для сильного увеличения изображений, обеспечивая минимальное размытие, хотя иногда приходится повышать резкость.

Фильтры размытия Гаусса лучше всего подходят для штриховых изображений.

Оконные фильтры «Sinc» и «Jinc», эквивалентные им фильтры Лагранжа считаются лучшими фильтрами для работы с реальными изображениями, особенно для сжатия.

Фильтр «Mitchell» установлен программами ImageMagick как фильтр по умолчанию для увеличения.

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

bash$ convert rings_crop.png -filter {filter_type} -resize 100x {result}
Как вы можете видеть, интерполированные фильтры дают очень сильно искаженный эффект муара, он возникает как побочный эффект создаваемых блочных артефактов.

С другой стороны, артефакты размытия по Гауссу удалили все блокирующие эффекты муара, хотя и с общим размытием (нечеткими линиями) в результирующем изображении. Фильтр «Gaussian» показывает еле заметный эффект сглаживания, вызванный его бесконечной характеристикой (IIR).

Оконные фильтры «Sinc» создают очень резкое изображение, но с эффектами звона.

Кубические фильтры также показывают некоторые очень легкие эффекты из-за звона. Фильтр «Mitchell» дает наименьший звенящий эффект.


* Обратите внимание, что «Mitchell» действительно создает очень незначительные эффекты при изменении размера.


bash$ convert rings_sm_orig.gif -filter {filter_type} -resize 100x {result}
Как вы можете видеть, интерполированные фильтры создают множество артефактов наложения спектров, в то время как фильтры размытия по Гауссу имеют тенденцию размывать линии. Но все остальные фильтры, как правило, работают хорошо.

Для увеличения изображений «Mitchell», вероятно, лучший фильтр. Но любой из оконных фильтров подходит для уменьшения (по умолчанию установлен «Lanczos»).

Фильтр «Lagrange» эффективен с большими значениями настройки поддержки для сжатия изображений.

Фильтр «Mitchell» выбран фильтром по умолчанию для увеличения, а также для сжатия, если нужен альфа/матовый канал, или для изображений с цветовой картой. Фильтр «Lanczos» будет использоваться во всех других случаях, то есть при сжатии обычных изображений.

Для оператора "-distort" по умолчанию установлен фильтр «Robidoux», он был специально разработан для минимизации размытия изображения.

Пиксельная карта.


• -map components

Пиксельная карта:

~ r, красный компонент;
~ g, зеленый компонент;
~ b, синий компонент;
~ a, альфа-пиксель (0 - прозрачный);
~ o, непрозрачность (0 - непрозрачно);
~ i, интенсивность оттенков серого;
~ c, голубой компонент;
~ m, пурпурной компонент;
~ y, желтый компонент;
~ k,черный;
~ p, всегда 0.
Можно указать любое количество компонентов в любом порядке (например, "bgr"). Компоненты также могут повторяться (например, "rgbr").

bash$ convert speed.gif \
\( -clone 0--1 -background none +append \
-quantize transparent -colors 63 -unique-colors \
-write mpr:cmap +delete \) \
-map mpr:cmap speed_cmap.gif

Виртуальный холст.


• -page geometry

• -page media [offset][ {^!<>} ]

• +page

Установит размер и расположение изображения на виртуальном холсте.

Для удобства вы можете указать размер страницы с помощью опции «media». Затем можно добавить смещения, как с другими аргументами «geometry» (например, "-page Letter+43+43").

bash$ convert rose: -page +2+2 heart_gold.png \
\( +clone -repage +7+29 \) \
\( +clone -repage +52+14 \) \
-flatten rose_with_love.gif
bash$ convert -page +0-15 -size 1x30 gradient: \
-sigmoidal-contrast 5,50% -contrast-stretch 0 \
-set option:distort:viewport 180x90-90-45 \
+distort SRT 115 +repage \
holocaust_tn.gif -extent 180x90 +swap \
spiral_stairs_tn.gif +swap \
-gravity East -composite overlap_angled.jpg
Определите «media», чтобы указать размеры («width» x «height») страницы «PostScript» в точках на дюйм или страницы TEXT в пикселях.

Возможен следующий выбор для бумажный форматов: 4x6, 5x7, 7x9, 8x10, 9x11, 9x12, 10x13, 10x14, 11x17, 4A0, 2A0, a0, a1, a2, a3, a4, a4small, a5, a6, a7, a8, a9, a10, archa, archb, archC, archd, arche, b0, b1, b10, b2, b3, b4, b5, b6, b7, b8, b9, c0, c1, c2, c3, c4, c5, c6, c7, csheet, dsheet,esheet,executive, flsa, flse, folio, halfletter, isob0, isob1, isob10, isob2, isob3, isob4, isob5, isob6, isob7, isob8, isob9, jisb0, jisb1, jisb2, jisb3, jisb4, jisb5, jisb6, ledger, legal, letter, lettersmall, monarch, quarto, Q statement, lotabZtab

Чтобы определить размер в пикселях при 72DPI (a4), используйте команду.

bash$ convert xc: -format "%[papersize:a4]" info:
Оператор также применяется для размещения фрагментов изображений при записи в файл формата, поддерживающего смещение и несколько изображений, например, GIF89 и MNG. Смещение всегда измеряется от верхнего левого угла холста и не зависит от параметра "-gravity".

Чтобы определить изображение в формате GIF или MNG, используйте например, настройку "-page+100+200". Опция применяется совместно с "-density". Укажите "+page", чтобы удалить настройки страницы.


• -repage geometry

Настроит холст и информацию о смещении изображения.

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

При заданном нулевом размере (0x0) заставляет оператор пересчитать размер холста, чтобы изображение (с его текущим смещением) полностью отображалось на этом холсте, если оно не имеет отрицательного смещения.

bash$ convert rose: -repage +11+0\
\( +clone -background navy -shadow 80x3-5+5 \) +swap \
-background none -mosaic shadow_left.png
bash$ convert rose: -repage 120x80+25+17 -crop 30x20 +repage rose_30x20_%02d.gif
bash$ convert rose: -repage 60x40-5-3 -crop 30x20 +repage rose_ctiles_%d.gif
bash$ convert rose: -repage +10+10 \
\( +clone -background black -shadow 60x3+5+5 \) \
\( granite: -crop 100x80+0+0 +repage \) \
-background none -compose DstOver -layers merge layer_dstover.gif
Используйте "+repage", чтобы удалить или сбросить метаданные виртуального холста из изображений.

Повороты, смещения изображения.


• -flip

Изображение зеркально отражено в перевернутом виде.

bash$ convert koala.gif -flip flip.gif

• -flop

Отражено зеркально в горизонтальном направлении.

bash$ convert koala.gif -flop flop.gif

• -rotate degrees {} {}

Применит поворот изображения по алгоритму Паэта (Paeth), с помощью операций сдвига к изображению.

Поворачивает изображение, если его ширина меньше высоты. Например, если вы укажете "-rotate -90" и размер "480x640", то изображение не поворачивается. Однако, если изображение имеет размер "640x480", оно поворачивается на -90 градусов.

bash$ convert koala.gif -rotate 0 rotate_0.gif
bash$ convert koala.gif -rotate 90 rotate_90.gif
bash$ convert koala.gif -rotate 180 rotate_180.gif
bash$ convert koala.gif -rotate -90 rotate-90.gif
bash$ convert koala.gif -rotate 360 rotate_360.gif

* Обратите внимание, что "-rotate" является простым искажением, только если вы указывается угол поворота, кратный 90 градусам. Любой другой угол внесет в изображение сложные искажения на пиксельном уровне.


Вы можете заметить, что положительный угол поворота осуществляется по часовой стрелке, это кажется логически необоснованным. Однако внутренне это математически правильно и вызвано инвертированием оси Y.

Вращение и обрезка.

Оператор "-rotate" может выполнять простые искажения с сохранением пикселей изображения, когда вы поворачиваете изображение на 90 градусов.

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

bash$ convert koala.gif -rotate 30 rotate.jpg
Оператор "-rotate" понимает два флага. Если к аргументу поворота добавлен флаг ">", то поворот произойдет только в случае, когда ширина больше высоты. Это «портретный флаг».

Флаг "<" делает противоположное, он поворачивает изображения, высота которых превышает ширину. Это «альбомный флаг».

Другой вариант использования флага - поворот «портретного» и «ландшафтного» изображений на разную величину. Вы можете выполнить две разные операции "-rotate".

Поваренная книга преобразования фотографий.

Небольшая коррекция поворота, выравнивание фотографий.

bash$ convert beijing_tn.png -rotate -1.95 beijing_rotate.png
Еще лучшее решение - не только повернуть изображение, но немного его масштабировать, чтобы полученное повернутое изображение сохранило размер оригинала.

angle=-1.95

bash$ convert beijing_tn.png -distort SRT \
"%[fx:aa=$angle*pi/180;(w*abs(sin(aa))+h*abs(cos(aa)))/min(w,h)], $angle" \
beijing_rot_correction.png
Несколько слов о тилт-шифт.

bash$ convert beijing_contrast.jpg \
-sparse-color Barycentric '0,0 black 0,%h white' \
-function polynomial 4,-4,1 beijing_blurmap.jpg
См. также оператор "-distort".


• -transform

Преобразует изображение.

Эта опция применяет матрицу преобразования "-affine".

bash$ convert -affine 2,2,-2,2,0,0 -transform bird.ppm bird.jpg
Оператор был заменен методом "-distort".


• -transpose

Отразит изображение по диагонали от верхнего левого угла к нижнему правому. Опция математически перемещает массив пикселей, что эквивалентно последовательности операторов "-flip -rotate 90".

bash$ convert -size 50x50 xc: +noise Random \( +clone -transpose \) \
\( +clone -sparse-color voronoi '%w,0 white 0,%h black' \) \
-composite \
\( +clone -rotate -90 \) +append \
\( +clone -rotate 180 \) -append \
\
-virtual-pixel Tile -blur 0x5 -auto-level \
-separate -background white \
-compose ModulusAdd -flatten -channel R -combine +channel \
-set colorspace HSB -colorspace RGB tile_p4g.jpg

• -transverse

Зеркально отразит изображение по диагонали. Эквивалентно двум операторам "-flop -rotate 90".

Операторы "-transpose" и "-transverse" создают диагональные зеркала изображения.

Оператор "-transpose" отражает изображение по диагонали от верхнего левого угла к нижнему правому.

bash$ convert koala.gif -transpose transpose.gif
Оператор "-transverse" отражает изображение по диагонали от нижнего левого угла до верхнего правого угла.

bash$ convert koala.gif -transverse transverse.gif

Размер изображения.


• -adaptive-resize geometry

Изменит размер изображения с помощью настраиваемой триангуляции.

Параметр "-adaptive-resize" по умолчанию применяет триангуляцию, зависящую от данных. Опция "-filter" позволяет выбрать алгоритм передискретизации. Смещения игнорируются, опция "-gravity" не действует.

Оператор "-adaptive-resize" использует специальный метод интерполяции сетки для изменения размера изображений.

bash$ convert -size 50x50 xc: -draw 'line 0,49 49,0' line_orig2.gif
Алгоритм избегает чрезмерного размытия, присущего "-resize". Но данный алгоритм хорошо работает для небольших корректировок размера изображения, особенно для увеличения с резкими изменениями цвета.

(Вы также можете получить эквивалентный результат, используя операцию изменения размера искажения, но с параметрами "-filter point -interpolate mesh".)

bash$ convert line_orig2.gif -resize 80x80 line_resize.gif
bash$ convert line_orig2.gif -adaptive-resize 80x80 line_adaptive.gif
Вы можете видеть, что изображение с адаптивным изменением размера выглядит намного чище и менее размыто, чем изображение, полученное с помощью оператора "-resize".


• -extent geometry

Установит размер и смещение изображения.

Если изображение увеличено, незакрашенным областям задается цвет фона. Чтобы расположить изображение, оператор использует смещения в спецификации «geometry» или перед настройкой "-gravity". Применяет "-compose" для компоновки фона и изображения.

bash$ convert input.jpg -resize 800x600 -background black -compose Copy \
-gravity center -extent 800x600 -quality 92 output.jpg
Следующая команда обрезает изображение формата JPEG до соотношения сторон 4:3.

bash$ convert input.jpg -extent 4:3 -quality 92 output.jpg
Если размер изображения увеличивается, дополнительное пространство будет добавлено к правому или нижнему краю изображения. Если размер уменьшается, данные изображения просто отбрасываются или обрезаются, чтобы соответствовать новому размеру. В обоих случаях верхняя левая область изображения, вероятно, не изменится.

bash$ convert rose: -background skyblue -extent 100x60 extent_enlarge.gif
bash$ convert rose: -background skyblue -extent 40x40 extent_shrink.gif
bash$ convert rose: -background skyblue -extent 100x40 extent_wider.gif
bash$ convert rose: -background skyblue -extent 40x60 extent_taller.gif
Оператор "-extent" использует "-gravity" для определения расположения добавленных или удаленных областей.

bash$ convert rose: -gravity north -extent 100x80 extent_north.gif
bash$ convert rose: -gravity south -extent 100x80 extent_south.gif
bash$ convert rose: -gravity east -extent 100x80 extent_east.gif
bash$ convert rose: -gravity west -extent 100x80 extent_west.gif
bash$ convert rose: -gravity center -extent 100x80 extent_center.gif
bash$ convert rose: -gravity center -extent 40x80 extent_center2.gif
Последний пример показывает, что оператор также может выполнять обрезку по центру (без "-repage"), но сглаживает изображение с текущим цветом "-background".

Обрезка с фоновой заливкой, независимо от позиции.

bash$ convert rose: -background skyblue -extent 100x100-15-25 extent.png

* Обратите внимание, что "-extent" применяет технику наложения, подобную "-border" и "-frame".



• -interpolative-resize geometry

Изменит размер с применением интерполяции. См. "-interpolate".

Оператор "-interpolative-resize" практически идентичен оператору адаптивного изменения размера. Однако этот оператор будет использовать текущую настройку "-interpolate".


• -liquid-rescale geometry

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

bash$ convert logo: -resize 50% -trim +repage logo_trimmed.jpg
bash$ convert logo_trimmed.jpg -liquid-rescale 75x100%\! logo_lqr.jpg
bash$ convert logo_trimmed.jpg -sample 75x100%\! logo_sample.jpg
В основном "-liquid-rescale" дает красивое «сжатое» изображение без дополнительных «смешанных цветов» или размытия изображения. Однако вы можете получить некоторые небольшие локализованные эффекты сглаживания.

bash$ convert logo_trimmed.jpg -liquid-rescale 130x100%\! logo_lqr_expand.jpg

• -magnify

Удвоит или утроит размер изображения посредством масштабирования пиксельной графики.

Укажите альтернативный метод масштабирования с помощью "-define magnify:method=".

Выберите один из следующих методов: eagle2X, eagle3X, eagle3XB, epb2X, fish2X, hq2X, scale2X, scale3X.


* По умолчанию установлен «scale2X».


Оператор "-magnify" увеличивает размер изображения вдвое, но делает это с помощью масштабирования пикселей методом Scale2X. Алгоритм пытается сгладить углы увеличиваемых пикселей без добавления дополнительных цветов.

bash$ convert -size 8x8 pattern:CrossHatch30 -virtual-pixel tile \
-magnify -magnify -magnify magnify_crosshatch.gif

• -resample horizontal x vertical

Изменит разрешение изображения по горизонтали и вертикали. При этом размер соответствуют оригинальному при указанном целевом разрешении. Например, если изображение с разрешением 300 точек на дюйм (300 DPI) отображается с разрешением 3 дюйма на 2 дюйма на устройстве с разрешением 300 DPI, после преобразования изображения до 72 DPI оно будет отображаться с разрешением 3 дюйма на 2 дюйма на устройстве с разрешением 72 DPI.


* Обратите внимание, что лишь некоторые форматы изображений (например, JPEG, PNG и TIFF) могут сохранять разрешение изображения в метаданных. Для форматов, которые не поддерживают сохранение разрешения, исходное должно быть указано опцией "-density".


«Photoshop» сохраняет и получает разрешение из проприетарного встроенного профиля. Если этот профиль существует в изображении, «Photoshop» продолжит обрабатывать изображение, используя его прежнее разрешение, но игнорируя разрешение изображения, указанное в стандартном заголовке файла.

Оператор "-resample" является простой оболочкой оператора "-resize". Однако его цель - настроить количество пикселей в изображении так, чтобы при отображении с заданным разрешением или плотностью изображение сохранило размер.

Это важно для настройки изображения в соответствии с конкретным устройством вывода, будь то дисплей, принтер, или файлы формата PostScript, PDF. Реальный размер изображения не меняется, но изменяется разрешение и количество пикселей.


• -resize geometry

Изменяет размер изображения. Если фильтр "-filter:option=value" предшествует опции "-resize", размер изображения изменяется с помощью указанного фильтра.

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

bash$ convert portrait.jpg -gamma.45455 -resize 25% -gamma 2.2 \
-quality 92 output.jpg

* Обратите внимание, что некоторые функции передискретизации задействуют "Sinc()". Поэтому вы можете получить отрицательные доли, если версии ImageMagick поддерживает HDRI. Чтобы их устранить, добавьте в командную строку оператор "-clamp".


Методы изменения размера.

Изменение размера с коррекцией цветового пространства.

bash$ convert earth_lights_4800.tif -resize 500 earth_lights_direct.png
bash$ convert earth_lights_4800.tif -colorspace RGB -resize 500 \
-colorspace sRGB earth_lights_colorspace.png
Как вы можете видеть, «огни» на втором изображении намного ярче, чем на первом, поскольку на них не так сильно влияет нелинейное цветовое пространство исходного изображения.

Результирующее изображение sRGB темнее, чем изображение, обработанное в линейном цветовом пространстве, таком как RGB (или LAB, LUV).

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

bash$ convert earth_lights_4800.tif -colorspace sRGB \
-resize 500 -colorspace RGB earth_lights_colorspace.png

* Обратите внимание, что операция "-colorspace RGB" не нужна, так как она выполняется автоматически при сохранении в формат файла изображения PNG.


Изменение размера с гамма-коррекцией.

bash$ convert earth_lights_4800.tif -gamma 0.454545 \
-resize 500 -gamma 2.2 earth_lights_gamma.png
Альтернативой инверсии "-gamma 0.454545" можно считать использование оператора "-evaluate POW 2.2".

Вы также можете посмотреть на оператор "-auto-gamma", он пытается настроить изображение, чтобы получить равное количество светлых и темных областей (при условии, что изображение находится в линейном цветовом пространстве).

Изменение размера в цветовом пространстве LAB.

Для изменения размера, включающего популярные «повышающие» фильтры передискретизации, использование цветового пространства Lab будет сдерживать экстремальные изменения интенсивности, возникающие из-за артефактов звона в основных цветах RGB.

bash$ convert rose: -colorspace RGB -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_rgb.png
bash$ convert rose: -colorspace LAB -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_lab.png
Результаты изменения размеров LAB и LUV практически идентичны.

bash$ convert rose: -colorspace LUV -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_luv.png
Как правило, линейные цветовые пространства (линейные RGB и XYZ) создают преувеличенные темные ореолы, а перцепционные цветовые пространства (sRGB, LAB, LUV) создают преувеличенные светлые ореолы.

Но "-sigmoidal-contrast" одинаково обрабатывает тени и света, хотя снижает крайние значения.

Например, вот последовательность «улучшающих» методов изменения размера.

bash$ convert rose: -colorspace RGB -filter Lanczos -resize 200x \
-colorspace sRGB rose_resize_RGB.png
bash$ convert rose: -colorspace RGB -filter Lanczos -distort resize 200x \
-colorspace sRGB rose_distort_RGB.png
bash$ convert rose: -colorspace RGB +sigmoidal-contrast 6.5,50% \
-filter Lanczos -distort resize 200x \
-sigmoidal-contrast 6.5,50% -colorspace sRGB rose_sigmoidal_RGB.png
Последний пример показывает уменьшение контрастности изображения, сжатие полутоновых оттенков серого в более узкий линейный диапазон с уменьшением резких эффектов цвета.

Можно «сделать нерезкими» результаты очень размытого изображения, отфильтрованного «сплайном».

bash$ convert logo: -filter spline -resize 150x logo_spline.png
bash$ convert logo: -filter spline -resize 150x \
-unsharp 0x1 logo_spline_unsharp.png
Увеличение резкости изображения после изменения размера улучшает результаты.

Общие рекомендации при работе с уменьшением или увеличением размера следующие.

~ Измените размер, а затем отрегулируйте контраст, чтобы линии стали более заметными.
~ Примените размытие, чтобы сделать однопиксельные линии примерно на 300% толще. После уменьшения на 1/3, линии останутся четкими.
~ Сделайте линии толще, используя методы «морфологии». Можно изменять размер последовательно, увеличивая толщину и размер изображения на 50% каждый раз.

Другие операторы масштабирования.


• -sample geometry

Уменьшает или увеличивает изображение с субдискретизацией и репликацией пикселей.

Изменит размер, выбрав исходные пиксели из изображения. При увеличении пиксели копируются блоками. При уменьшении пиксели подвергаются субдискретизации (некоторые строки и столбцы пропускаются).

Результаты эквивалентны использованию "-resize" с настройкой "-filter point" ("ближайший сосед"), хотя оператор "-sample" в этом случае намного быстрее, поскольку позволяет избежать обработки изображения фильтрами.

Оператор "-sample" является самым быстрым оператором изменения размера, особенно при крупномасштабном уменьшении. Он быстрее, чем "-scale".

При увеличении оператор выполняет только репликацию пикселей. Однако при сжатии изображения "-sample" удаляет строки и столбцы пикселей.

Поскольку целые строки и столбцы пикселей добавляются или удаляются, "-sample" не создает новые или дополнительные цвета. Что важно для некоторых методов обработки изображений, таких как изменение размера анимации GIF.

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

bash$ convert -size 150x60 xc: -draw 'line 0,59 149,0' line_orig.gif
bash$ convert line_orig.gif -sample 50x20 line_sample.gif

• -scale geometry

Уменьшает или увеличивает изображение с усреднением блоков пикселей и репликацией.

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

Результаты эквивалентны использованию оператора "-resize" с настройкой "-filter box".

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

Оператор "-scale" - упрощенная и быстрая форма изменения размера. При увеличении изображения пиксели изображения дублируются, образуя большие прямоугольные цветные блоки.

bash$ convert -size 8x8 pattern:CrossHatch30 -scale 800% scale_crosshatch.gif
Обычно для увеличения изображения используется значение, кратное 100%, поэтому все пиксели увеличиваются на одинаковую величину; в противном случае может возникнуть муар.

bash$ convert pattern:gray50 scale_gray_norm.gif
bash$ convert pattern:gray50 -scale 36 scale_gray_mag.gif
Изображение с уменьшенным масштабом также может создавать муар, если только не конвертируется с точным целочисленным уменьшением («биннинг»).

Кроме того, изображение, сильно уменьшенное с помощью оператора - "-scale", может страдать от эффекта «лестницы» на краях.


• -size width[x height][+offset]

Установит ширину и высоту изображения. Используйте этот параметр, чтобы указать ширину и высоту необработанных изображений, размеры которых неизвестны (например, в пространствах GRAY, RGB или CMYK). В дополнение к ширине и высоте, используйте "-size" со смещением, чтобы отказаться от заголовка в изображении или указать количество цветов (например, - "-resize 640x512+256").


• -thumbnail geometry

Создает миниатюру изображения. Опция действует как "-resize", но алгоритм оптимизирован, также удаляется любой профиль изображения, кроме цветового. (Чтобы удалить цветовые профили, добавьте "-strip".)

Оператор "-thumbnail" является разновидностью "-resize", но применяется для сжатия очень больших изображений в маленькие «эскизы».

bash$ convert -define jpeg:size=500x180 hatching_orig.jpg -auto-orient \
-thumbnail 250x90 -unsharp 0x.5 thumbnail.gif
bash$ convert -define jpeg:size=200x200 hatching_orig.jpg \
-thumbnail '100x100' rectangle.gif
Сначала оператор использует "-strip", чтобы удалить профиль. Затем с помощью "-sample" изображение уменьшается в пять раз по высоте. Наконец, с помощью "-resize" изображение уменьшается до окончательного размера.

Однако для файлов в формате JPEG вы можете ограничить размер изображения, считываемого с диска, с помощью специальной настройки "-define jpeg:size={size}".


Биннинг - уменьшение цифрового шума.

Многие фотографы недовольны побочными эффектами «гонки мегапикселей» производителей цифровых фотоаппаратов. Однако можно применить особую технику снижения шумов, биннинг, для обработки многопиксельного изображения.

Алгоритмически метод можно описать следующим образом.

1. Возьмите сетку пикселей NxN и усредните пиксели, чтобы получить один «суперпиксель».

2. Шум будет случайным, пропорциональным квадратному корню из объединенной области пикселей с коэффициентом N. В итоге будет улучшено отношение сигнал/шум в N раз.

Когда цифровая фотография с разрешением 1600x1200 уменьшается до 800x600 (т.е. сетка 2x2), отношение сигнал/шум удваивается. Точно так же изображение 2560x1920, уменьшенное сеткой 3x3 до 853x640 пикселей, будет иметь трехкратное улучшение отношения сигнал/шум.

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


* Прим. Оператор "-filter box" будет усреднять группы пикселей до одного пикселя, когда вы используете оператор "-resize".



Масштабирование изображения.

Масштабирование изображения — изменение размера цифрового изображения с сохранением пропорций. Под масштабированием подразумевается увеличение (- «апскейлинг» от англ. upscaling) и уменьшение («даунскейлинг», англ. downscaling) разрешения изображения.

Масштабирование затрагивает цветовые пространства: если в изображении присутствуют мелкие контрастные детали, приходится переводить его в линейное цветовое пространство, в противном случае (если исходник в sRGB) на уменьшенном изображении объединение светлых и тёмных областей будет темнее, чем необходимо. Также многим алгоритмам требуются виртуальные пиксели за границей кадрового буфера (окна, ячейки).

bash$ convert storm.gif -scale 300% storm_scaled.gif
bash$ convert storm.gif -resize 300% storm_resized.gif
Основными причинами возникновения артефактов можно считать плохое или недостаточное сглаживание (смешение, размытие цветов).

Если вы увеличиваете изображение, дублируя пиксели, то создаете прямоугольные блоки пикселей большего, чем исходные, размера. Увеличение изображений с помощью операторов "-scale" или "-sample" приводит именно к таким артефактам. При этом возникают сложные артефакты сжатия, квантования, блочные искажения, волны, кольца, шумы вокруг края и прочее.

Звон.

Цифровой звон - эффект, который вы часто видите на изображениях JPEG очень низкого качества. Звон возникает на резких краях. Часто это вызвано чрезмерной компенсацией краевых областей алгоритмом изменения размера, или сжатием изображения, или использованием неподходящего фильтра.

bash$ convert -size 1x1 xc: -bordercolor '#444' -border 4x4 \
-define filter:lobes=5 -filter Sinc \
-resize 100x100\! dot_sinc.gif
На этом изображении отчетливо видны вторичные эффекты, возникающие при применении одномерного фильтра. Эффект звона наиболее сильно проявился в горизонтальном и вертикальном (ортогональном) направлении и под углом 45 градусов.

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

bash$ convert rings_sm_orig.gif -sample 100x100 rings_sample.png
bash$ convert rings_sm_orig.gif -scale 100x100 rings_scale.png
bash$ convert rings_sm_orig.gif -resize 100x100 rings_resize.png
Размытие.

Почти все фотографы знакомы с размытием из-за масштабирования. При изменении размера вы работаете с растровым изображением, поэтому присутствует «сетка» или массив пикселей («растр»). Ресамплинг приводит к изменениям «сетки», но растры не будут совпадать, за исключением особых случаев. Поэтому невозможно безупречно напрямую изменить размер, хотя разумный результат может быть достигнут.

Некоторые фильтры изменения размера, особенно разработанные специально для увеличения, часто добавляют намного больше размытия, чем необходимо. Это сделано для борьбы с артефактами «блокирования».


* Размытие применяется, чтобы избежать артефактов «звона» на острых краях, убрать возможные эффекты сглаживания. Лучший способ исправить эффект размытия - повторно отфильтровать изображение, применив оператор повышения резкости.



Выравнивание, искажение.


• -deskew threshold {%}

Выровняет изображение. Порог в 40% подходит для большинства изображений.

Используйте настройку "-set option:deskew:auto-cropping true|false" для автоматической обрезки.


• -distort arguments method

Исказит изображение, используя данный метод и обязательные аргументы.

Оператор "-distort" принимает два значения: метод искажения и строковый аргумент, состоящий из списка значений с плавающей запятой, разделенных запятыми или пробелами для управления конкретным методом искажения.

bash$ convert ... -distort {method} "{list_of_floating_point_values}" ...
Однако указанные числовые значения с плавающей запятой зависят от метода искажения, а также от количества контрольных точек или атрибутов метода. (Это особенно верно для искажения «Scale-Rotate-Translate», SRT.)

Многие методы "-distort" принимают список контрольных точек, они задаются в виде пар координат, управляющих искажением.

По умолчанию "-distort" обычно сохраняет размер исходного изображения (кроме формы «Arc»).

Но оператор "+distort" будет пытаться изменить размер искаженного изображения так, чтобы оно содержало все входное изображение. Также "+distort" пытается учитывать существующее смещение виртуального холста.

Поэтому используйте "-distort", чтобы сохранить размеры изображения, но применяйте "+distort", чтобы попытаться автоматически установить новый размер выходного изображения.

Универсальным методом искажения является «SRT» или «Scale-Rotate- Translate».

bash$ convert koala.gif -distort SRT 0 koala_noop.gif

* Обратите внимание, что изображение немного размыто в результате повторной выборки области. Однако фильтры передискретизации ImageMagick были специально разработаны, чтобы минимизировать размытие. Если вам нужно идеальное «безоперационное» искажение для специальных целей, отключите передискретизацию EWA с помощью настройки "-filter Point" перед оператором.


С помощью формы "+distort" и очистки результирующих смещений виртуального холста мы можем создать обычный оператор поворота.

bash$ convert koala.gif -background skyblue -virtual-pixel background \
+distort ScaleRotateTranslate -110 +repage koala_srt_rotate2.png
Или уменьшить изображение на 30%.

bash$ convert koala.gif -matte -virtual-pixel transparent \
+distort ScaleRotateTranslate '.7,-110' +repage koala_srt_scale.png

Искажения с использованием контрольных точек.

Большинство искажений определяется перемещением искомых «точек» в новое положение в результирующем изображении. Эти точки называются контрольными и определяются путем присвоения четырех значений с плавающей запятой для каждой точки.

Искажениями с использованием контрольных точек являются аффинные.

bash$ convert koala.gif -virtual-pixel white \
-distort Affine '28,24 45,40' koala_one_point.png
В простых случаях строки и столбцы пикселей меняются местами для переворота, поворота, транспонирования. Цвета, количество пикселей не изменяются. Также применяется сдвиг столбцов и строк пикселей по горизонтали или вертикали.

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

Чтобы искажать изображения сложным способом, необходимо применить метод, известный как «Reverse Pixel Mapping». В этом случае вы можете сопоставить координату каждого пикселя в конечном изображении с соответствующим местоположением в исходном, а из исходного изображения найти цвет.

Здесь имитируется поворот на 17 градусов с помощью оператора "-fx" , чтобы найти ближайший пиксель в исходном изображении.

# Rotate by 17 degrees -- get the Sine and Cosine of this angle

:: sin=‘convert xc: -format "%[fx:sin( 17*pi/180)]" info:‘
:: cos=‘convert xc: -format "%[fx:cos( 17*pi/180)]" info:‘
:: cx=37; cy=37; # center of rotation
bash$ convert -size 75x75 xc: koala.gif \
-virtual-pixel Black -interpolate NearestNeighbor \
-fx "ii=i-$cx; jj=j-$cy; xx=$cos*ii+$sin*jj+$cx; yy=-$sin*ii+$cos*jj+$cy; v.p{xx,yy}" \
koala_rotated_fx.gif
В данном примере нет «пустых» областей в изображении, так как цвет каждого пикселя определяется местом назначения. «Reverse Pixel Mapping» не создает ни «дыр», ни перекрывающихся пикселей. Каждый пиксель содержит правильно определенный цвет.

Поиск цвета ограничен только цветом ближайшего пикселя к отображаемой позиции с использованием «точечной» интерполяции. Это означает, что к изображению не добавляются новые цвета, но возникают неприятные эффекты сглаживания.

bash$ convert koala.gif -virtual-pixel Black -interpolate NearestNeighbor \
-filter point -distort SRT 17 koala_rotated_srt.gif
Параметр "-interpolate" также учитывает случай, когда часть искаженного изображения «растягивается» так, что единственный исходный пиксель «размазывается» по большой области целевого изображения.

Здесь картинка поворачивается, но указана настройка "-interpolate Mesh" (смешиваются четыре соседних пикселя, чтобы получить «правильный» цвет). Что значительно улучшает внешний вид искаженного изображения.

bash$ convert koala.gif -virtual-pixel Black -interpolate Mesh \
-filter point -distort SRT 17 koala_rotated_mesh.gif

Cуперсэмплинг или передискретизация.

Интерполяция хорошо подходит для простых искажений изображения. Но если часть исходного изображения сжимается, для каждого целевого пикселя может потребоваться слияние большей области исходного изображения.

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

bash$ convert -size 94x94 xc:red -bordercolor white -border 3 \
-virtual-pixel tile -implode 4 \
implode_tiled_box.gif
bash$ convert -size 94x94 xc:red -bordercolor white -border 3 \
-virtual-pixel tile -resize 400% -implode 4 -resize 25% \
implode_tiled_ss.gif
Ниже показаны три метода выборки, которые в настоящее время предоставляет IM.

# input image: special checkerboard with a gold outline.

bash$ convert -size 90x90 pattern:checkerboard -normalize -fill none \
-stroke gold -strokewidth 3 -draw 'rectangle 0,0 89,89' \
-fill red -draw 'color 20,20 floodfill' \
-fill lime -draw 'color 40,70 floodfill' \
-fill dodgerblue -draw 'color 70,40 floodfill' \
checks.png
# Using Interpolated Lookup

bash$ convert checks.png -filter point \
-virtual-pixel tile -mattecolor DodgerBlue \
-distort Perspective '0,0 20,60 90,0 70,63 0,90 5,83 90,90 85,88' \
horizon_tile_point.png
# Using Grid Super Sampling

bash$ convert checks.png -filter point -set option:distort:scale 10 \
-virtual-pixel tile -mattecolor DodgerBlue \
-distort Perspective '0,0 20,60 90,0 70,63 0,90 5,83 90,90 85,88' \
-scale 10% horizon_tile_super.png
# Using Area Resampling (default)

bash$ convert checks.png -virtual-pixel tile -mattecolor DodgerBlue \
-distort Perspective '0,0 20,60 90,0 70,63 0,90 5,83 90,90 85,88' \
horizon_tile.png

Изменение размера изображений с помощью искажения.

Оператор "-resize" - упрощенный оптимизированный вариант искажения. Он выровнен ортогонально, то есть сначала рассчитывается размер в одном измерении, затем в другом, используя промежуточное временное изображение.

Оператор "-distort" также может изменять размер изображений, но делает это за один проход, когда исходное изображение напрямую преобразуется в новое. При этом не нужно выравнивать края по целочисленным позициям пикселей, оператор может вращать и масштабировать каждую позицию пикселя.

bash$ convert logo: -distort Resize 150x logo_resized.png
bash$ convert logo: -alpha set -virtual-pixel transparent \
+distort Affine '0,0 0,0 %w,0 150,0 0,%h 0,113' \
-alpha off -crop 150x113+0+0 +repage distort_resize.png

Методы искажения.

«ScaleRotateTranslate». «SRT» искажает изображение, сначала масштабируя и вращая вокруг заданного «центра», а затем переводя этот «центр» в новое место в указанном порядке. Это альтернативный метод определения «аффинного» типа искажения, но без эффектов сдвига. Он также обеспечивает хороший способ поворота и смещения меньшего изображения для наложения тайлов на более крупный фон. Количество аргументов определяет конкретное значение каждого аргумента для операций масштабирования, поворота и перевода.

«AffineProjection» и «SRT». Пары контрольных точек (12 чисел) подобраны методом наименьших квадратов для соответствия линейному аффинному искажению. Если заданы только 2 пары контрольных точек (8 чисел), выполняется двухточечное перемещение изображения и масштабирование без каких-либо возможных сдвигов, переворачивания или изменения соотношения сторон итогового изображения. Если предоставляется одна пара контрольных точек, изображение только поворачивается. Искажение не включает искажение перспективы.

«RigidAffine». Жесткое аффинное преобразование (также известное как евклидово преобразование) похоже на аффинное, но ограничивает искажение до 4 аргументов (S, R, Tx, Ty), где "Sy=Sx" и "Ry=-Rx", так что искажение меняет только масштаб, вращение и перевод. Нет перекоса. Требуются как минимум две пары контрольных точек.

«AffineProjection». Линейно искажает изображение, используя заданную аффинную матрицу из 6 предварительно рассчитанных коэффициентов, образующих набор аффинных уравнений для сопоставления исходного изображения с целевым.

Искажения «Affine» и «SRT» предоставляют альтернативные методы определения искажения, при этом ImageMagick выполняет вычисления, необходимые для генерации требуемых коэффициентов. Вы можете увидеть внутренние порожденные коэффициенты с помощью "-verbose".

«BilinearForward» и «BilinearReverse». Билинейное искажение при наличии минимум 4 наборов пар координат или 16 значений.

Форма «BilinearForward» используется для сопоставления прямоугольников с любым четырехугольником, в то время как форма «BilinearReverse» трансформирует любой четырехугольник в прямоугольник с сохранением краев прямых линий в каждом случае.


* Обратите внимание, что «BilinearForward» может генерировать недопустимые пиксели, которые будут окрашены в цвета "-mattecolor".


«Perspective» искажает изображения, используя список из 4 или более наборов контрольных точек. Более 4 наборов (16 чисел) контрольных точек обеспечивают подгонку по методу наименьших квадратов для точных искажений, например, для совмещения изображений и создания панорамных эффектов. Менее 4 чисел возвращают к «аффинному» линейному искажению. «Perspective» гарантируют, что прямые линии останутся прямыми, но масштаб изображения изменится. Горизонт будет сглажен, цвет неба можно установить с помощью параметра "-mattecolor".

«PerspectiveProjection». Это «перспективное» искажение, основанное на наборе из 8 предварительно рассчитанных коэффициентов. Вы можете получить эти коэффициенты, посмотрев на результат "-verbose Perspective", или вычислить их самостоятельно. Если два последних коэффициента масштабирования равны нулю, оставшиеся 6 представляют собой транспонированную «аффинную матрицу».

«Polynomial». Выполнит двухмерное «полиномиальное» искажение N-го порядка, используя набор соответствующих контрольных точек. Порядок полинома определяет минимальное количество необходимых контрольных точек. Первый порядок такой же, как "-distort Affine". Порядок 1.5 такой же, как "-distort BilinearReverse". Типичное использование - искажение 2-го порядка.

«Arc». Будет изгибать изображение (вариант полярного картирования) над углом, заданным вокруг круга. Аргументы: arc_angle, rotate_angle, top_radius, bottom_radius.

«Polar». Выполняет полное декартово-полярное сопоставление изображения. То есть высота входного изображения сопоставляется с пределами радиуса, а ширина оборачивается между пределами угла. Аргументы: Rmax, Rmin CenterX, CenterY, start, end_angle. Все аргументы необязательны.

«DePolar». Использует те же аргументы и значения, что и «полярное» искажение, но преобразует полярное искажение в декартово. Однако специальная установка Rmax, равная 0, может обрезать углы входного изображения.

«Barrel». Учитывая четыре коэффициента (A, B, C, D) выполнит бочкообразное или подушкообразное искажение, подходящее для исправления радиальных искажений линзы. («Выпрямит» ранее искаженные прямые линии на изображениях.)

«BarrelInverse». Метод очень похож на «Barrel» с тем же набором и обработкой аргументов. Однако он использует инверсию радиального многочлена.


* Обратите внимание, что это не обратное «бочкообразному» искажение, но другой метод бочкообразного радиального искажения.


«Shepards». Искажает заданные контрольные точки списка (любое число), используя метод интерполяции обратных квадратов расстояний ("Shepards Method"). Фактически контрольные точки осуществляют «локализованное» смещение изображения вокруг заданной контрольной точки с сохранением внешнего вида и поворота области возле контрольных точек. Для достижения наилучших результатов необходимо добавить дополнительные контрольные точки, чтобы «зафиксировать» положение, углы, края и другие неизменные части изображения.

Посмотреть полный список методов искажения можно с помощью опции "-list distort".

Обрезка изображений.


• -chop geometry

Удалит пиксели из изображения.

Опции «width» и «height», указанные в аргументе «geometry», задают количество столбцов и строк для удаления. На смещение влияет параметр "-gravity", если он присутствует.

Оператор "-chop" удаляет целые строки и столбцы и перемещает оставшиеся угловые блоки влево и вверх, чтобы закрыть пустоты.

Оператор "-chop" - обратный оператор "-splice", но с теми же аргументами и настройкой.

bash$ convert splice.gif -chop 20x10+40+30 splice_chop.gif
bash$ convert splice_chop.gif -chop 20x10+30+20 chop.gif
bash$ convert chop.gif -background grey \
-splice 20x10+30+20 chop_splice.gif

• -crop geometry {@} {!}

Вырезает одну или несколько прямоугольных областей изображения.

Аргументы «width» и «height» для «geometry» задают размер изображения, которое остается после кадрирование; также «x» и «y» смещения (если есть) указывают расположение верхнего левого угла кадрированного изображения относительно исходного.

Если присутствуют смещения «x» и «y», создается изображение, состоящее из пикселей области обрезки. Если указана настройка "-gravity" со значениями «NorthEast», «East» или «SouthEast», она определяет расстояние влево от правого края изображения до правого края области обрезки. Если присутствует опция "-gravity" (со значениями «SouthWest», «South» или «SouthEast»), расстояние измеряется вверх между нижними краями.

Если смещения «x» и «y» не указаны, создается набор фигур определенной геометрии, покрывающих все входное изображение. Крайние правыетайлы и нижние тайлы меньше, если указанная геометрия выходит за пределы размеров входного изображения.

Вы можете добавить "@" к аргументу геометрии, чтобы поровну разделить изображение на порожденные тайлы.

При добавлении флага "!" к аргументу «geometry» размер и смещение виртуального холста обрезанных изображений устанавливаются, как если бы область «geometry» была окном просмотра. То есть для размера холста задан точно такой же размер, который вы указали, а смещение изображения устанавливается относительно левого верхнего угла обрезанной области.

Оператор "-crop" вырежет часть из всех изображений в текущей последовательности с указанными размером и положением.

bash$ convert rose: -crop 40x30+10+10 crop.gif
bash$ convert rose: -crop 40x30+40+30 crop_br.gif

* Обратите внимание, что на размер отображаемого изображения (виртуального холста) операция "-crop" не повлияла.


IM сохраняет информацию о «виртуальном холсте», «странице» или «наслоении» изображения для дальнейшего использования. Но формат PNG не может хранить информацию о странице или холсте, однако сохраняет информацию о смещении страницы (даже если смещения отрицательные).

Нужно помнить, что "-crop" и другие аналогичные операторы могут создавать специальное «пропущенное» изображение. Поэтому лучше включить оповещения ImageMagick о подобных ошибочных ситуациях (см. настройки "-quiet").

Если изображение уже имеет виртуальный холст (например, кадр анимации GIF), то "-crop" применяется относительно виртуального холста, а не к фактическому изображению.

Если информация виртуального холста не нужна, вы можете включить оператор "+repage" для сброса настроек холста.

bash$ convert rose: -crop 40x30+10+10 +repage repage.gif
Вы можете добавить специальный флаг "!" к "-crop". Флаг заставляет настроить информацию виртуального холста возвращаемого изображения так, чтобы оно относилось к обрезанной области.

bash$ convert rose: -crop 40x30+10+10\! crop_vp.gif
bash$ convert rose: -quiet -crop 40x30+90+60\! crop_vp_miss.gif
bash$ identify rose.gif crop_vp.gif crop_vp_br.gif crop_vp_tl.gif \
crop_vp_all.gif crop_vp_miss.gif
Символ "!" имеет особое значение для некоторых оболочек UNIX, поэтому его необходимо экранировать обратной косой чертой.

Положение смещения "-crop" по умолчанию устанавливается относительно верхнего левого угла изображения. С помощью параметра "-gravity" вы можете заставить "-crop" обрезать изображение относительно центра, угла или края изображения.

bash$ convert rose: -gravity Center -crop 32x32+0+0 +repage crop_center.gif
Параметр "-gravity" влияет не только на начальное «нулевое» положение, но также на направление смещения обрезки.

bash$ convert rose: -gravity South -crop 20x20+0+5 crop_south.gif
Оператор "-crop" также понимает, как обрезать изображение до процента от его исходного размера.

bash$ convert rose: -crop 50%x+0+0 crop_half.gif
Если указан только один параметр, это значение используется для указания процентов ширины и высоты, окончательный размер обрезаемой области будет округлен до ближайшего целого числа. Смещение не является обязательным.

bash$ convert rose: -crop 50%x+30+20 crop_percent.gif
Чаще всего кадрирование выполняется от центра изображения.

bash$ convert rose: -gravity Center -crop 50x80%+0+0 crop_percent_center.gif
Применяя операторы наложения изображений "-mosaic" или "-flatten", вы можете накладывать изображения друг на друга.

bash$ convert tiles_[0-3].gif -background white -mosaic tiles_mosaic.gif
Альтернативой является использование "-layers merge", что объединит несколько слоев в новый слой, достаточно большой, чтобы вместить все данные.

bash$ convert tiles_[0-3].gif -background none -layers merge tiles_layered.gif identify tiles_layered.gif
Оператор "-crop" предполагает, что если один из аргументов размера отсутствует или установлен как 0, то в качестве аргумента отсутствующего размера устанавливается размер холста или страницы изображения.

Например, здесь мы извлекаем строку и столбец.

bash$ convert rose: -shave 12x0 -repage 64x64+9+9 paged.gif
bash$ convert paged.gif -crop 20x0+30+0 strip_column.gif
bash$ convert paged.gif -crop 0x20+0+30 strip_row.gif identify paged.gif strip_column.gif strip_row.gif
Здесь мы обрезаем изображение как квадрант вокруг точки 30,40.

bash$ convert rose: -shave 12x0 -repage 64x64+9+9 paged.gif
bash$ convert paged.gif -crop 30x40+0+0 quadrant_tl.gif

• -extract geometry

Извлекает указанную область из изображения.

bash$ convert -size 16000x16000 -depth 8 -extract 640x480 \
image.rgb image.png

• -region geometry

Задает область, к которой применяются последующие операции.

Смещения «x» и «y» обрабатываются, как в операторе "-crop".

bash$ convert koala.gif -region 40x33+15+5 -fill red -colorize 50% \
koala_region_red.gif
bash$ convert koala.gif -alpha off -region 30x30+10+10 \
-alpha on -background None -rotate 30 koala_region_rotate_1.gif

• -shave geometry

Удалит пиксели по краям изображения.

Часть аргумента «geometry» указывает ширину области, которая должна быть удалена с обеих сторон изображения, и высоту областей, которые необходимо удалить сверху и снизу. Смещения игнорируются.

bash$ convert border.gif -shave 10x10 shave.gif
bash$ convert border.gif -shave 10x0 shave_sides.gif
bash$ convert border.gif -shave 0x20 shave_topbot.gif
Но если вы хотите удалить только один край изображения, следует использовать "-chop"


• -trim

Обрезает изображение.

Этот оператор удаляет все края, имеющие цвет угловых пикселей. Используйте "-fuzz", чтобы "-trim" удалял края, близкие по цвету к угловым.

Информация о странице или виртуальном холсте изображения сохраняется, что позволяет извлечь результат операции "-trim" из изображения. (Добавьте "+repage", чтобы удалить информацию о странице виртуального холста, если она нежелательна.)

Если обрезанное изображение «исчезает», выводится предупреждение и возвращается специальное однопиксельное «пропущенное» изображение.

Команда "-define trim:percent-background=0%" удалит фон изображения.

Команда "-define trim:edge={north, east, south, west}" обрежет только указанные края изображения.

Оператор "-trim" похож на универсальный оператор "-crop" . Однако этот оператор пытается удалить любые границы или края изображения, которые не изменяются. Другими словами, оператор удаляет «ненужные» биты, окружающие изображение.

Например, здесь мы берем логотип IM, и «обрезаем» или «автоматически обрезаем» все окружающее дополнительное пространство в логотипе.

bash$ convert logo: -resize 30% -trim trim.gif
Также "-trim" сохранит размер холста изображения. Числовые аргументы обрезки могут быть извлечены для дальнейшей обработки или корректировки изображения.

bash$ convert logo: -resize 30% -trim info:-
bash$ convert logo: -resize 30% -trim +repage trim_repage.jpg
Если изображение одноцветное, то "-trim" обрежет изображение до минимального прозрачного пропущенного изображения в один пиксель.

Математические функции.


• -affine s x, r x, r y, s y [, t x, t y]

Создает матрицу преобразования для комбинированного поворота и масштабирования.

Устанавливает матрицу преобразования для операторов "-draw" или "-transform".

Параметры матрицы вводятся как числовые значения, разделенные запятыми, в кавычках или без пробелов.

Матрица преобразования состоит из 3х3 элементов, но три из них опускаются, поскольку они постоянны. Новые (преобразованные) координаты x, y пикселя в позиции в исходном изображении вычисляются в матричном уравнении.

Размер результирующего изображения равен наименьшему прямоугольнику, содержащему преобразованное исходное изображение. Параметры «t x» и «t y» последовательно сдвигают пиксели изображения.

Матрица преобразования соответствует левой пиксельной системе координат: положительные направления «x» и «y» - вправо и вниз, вращение по часовой стрелке.

Параметры «t x» и «t y» по умолчанию равны 0,0. Четырех параметров достаточно для вращения и масштабирования.

~ -affine s x,0,0, s y
~ -affine 1,0,0,1, t x, t y
~ -affine c, s,- s, c
Совокупный эффект последовательности преобразований "-affine" может быть достигнут с помощью одной операции "-affine" с использованием матрицы, равной произведению матриц отдельных преобразований.


• -complex operator

Выполнит сложные математические операции над последовательностью изображений.

Выберите из следующих методов: «add», «conjugate», «divide», «magnitude-phase», «multiply», «real-imaginary», «subtract».

Можно указать SNR оператора «divide» с помощью "-define complex:snr=float".


• -evaluate operator value

Изменит пиксели канала, вычисляя арифметическое, относительное или логическое выражения.


* См. оператор "-function" для некоторых многопараметрических функций. См. оператор "-fx", если требуются более сложные вычисления.


Поведение каждого оператора суммировано в следующем списке. Для краткости числовое значение «пикселя», о котором идет речь ниже, является значением соответствующего канала этого пикселя, а «нормализованный пиксель» - это число, деленное на максимальное (зависящее от установки) значение «QuantumRange». Если используются нормализованные пиксели, они восстанавливаются после других вычислений до полного диапазона путем умножения на «QuantumRange».

Операторы:

~ Abs, добавит значение к пикселям и вернет абсолютное значение.
~ Add, добавит «value» к пикселям.
~ AddModulus, добавит значение к пикселям по модулю «QuantumRange».
~ And, двоичное И.
~ Cos, Cosine, применит косинус к пикселям с частотой «value» с добавленным смещением 50%.
~ Divide, разделит пиксели на значение.
~ Exp, экспоненциальная функция с основанием e.
~ Exponential, экспоненциальная функция с основанием e.
~ InverseLog, применит обратный масштабированный логарифм к нормализованным пикселям.
~ LeftShift, сдвинет значения пикселей влево на биты «value» (т.е. умножит пиксели на 2 «value» ).
~ Log, применит логарифм к нормализованным пикселям.
~ Max, установит пиксели на максимальное значение «value» и текущее значение пикселя «value» (т.е. установит любые пиксели, в настоящее время меньше, чем «value», на «value»).
~ Mean, добавит значение и разделит на 2.
~ Median, выберет среднее значение из последовательности изображений.
~ Min, установит пиксели на минимум «value» и текущий пиксель «value» (т.е. установит любые пиксели, которые в настоящее время больше, чем «value», на «value»).
~ Multiply, умножит пиксели на значение.
~ Or, двоичное ИЛИ.
~ Pow, увеличит нормализованные пиксели до указанной степени.
~ RightShift, сдвинет значения пикселей вправо на «value» бит (т.е. разделит пиксели на 2 value ).
~ RMS, выровняет пиксели и добавит значение «value».
~ RootMeanSquare, выровняет пиксели и добавит значение «value».
~ Set, установит пиксели равными «value».
~ Sin, Sine, применит синус к пикселям с частотой «value» с добавленным смещением 50%.
~ Subtract, вычтет «value» из пикселей.
~ Xor, двоичный XOR.
~ Gaussian-noise, Impulse-noise, Laplacian-noise, Multiplicative-noise, PoissonNoise, Uniform-noise - эквиваленты соответствующих операторов "-noise".
~ Threshold, пороговые пиксели больше, чем «value».
~ ThresholdBlack, пороговое значение пикселей для нулевых значений, равных или меньших «value».
~ ThresholdWhite, пороговое значение пикселей для максимальных значений выше «value».
Указанные функции применяются только к каждому ранее установленному каналу (см. оператор "-channel") в изображении. При необходимости результаты вычислений обрезаются (отсекаются), чтобы вписываться в интервал от 0 до «QuantumRange». Канал прозрачности изображения представлен в виде значений «альфа» (0 - полностью прозрачный), поэтому, например, если применить метод «Divide» на 2 альфа-канала, это сделает изображение полупрозрачным. Добавьте символ процента, чтобы указать значение в процентах от «QuantumRange».

Посмотреть полный список операторов "-evaluate" можно с помощью опции "-list Assessment".

Результаты методов «Add», «Subtract» и «Multiply» также могут быть достигнуты посредством "-level", либо "+level" с соответствующим аргументом для линейного изменения общего диапазона значений цвета. Однако обратите внимание, что "-level" обрабатывает прозрачность как «матовые» значения (0 - непрозрачность).

«AddModulus» обеспечивает добавление по модулю «QuantumRange». Следовательно, это эквивалентно «Add», если результирующее значение пикселя не выходит за пределы интервала [0, QuantumRange].

«Exp» или «Exponential» работают с нормализованными значениями пикселей. Значение «value», используемое с «Exp», должно быть отрицательным, чтобы получить убывающую экспоненциальную функцию. Неотрицательные значения всегда будут давать результат больше единицы и, следовательно, вне интервала [0, QuantumRange].

«Log» работает с нормализованными значениями пикселей. Это масштабируемая функция. «Value», используемый с «Log», обеспечивает масштабный коэффициент, который регулирует кривизну.

«Pow» работает с нормализованными значениями пикселей. Обратите внимание, что «Pow» связан с оператором "-gamma". Например, "-gamma 2" это эквивалент "-evaluate pow 0.5" (квадратный корень). Значение, используемое с "-gamma", это обратная величина значения «Pow».

«Cosine» и «Sine» преобразуют значения изображения в значение в соответствии с синусоидальной волновой функцией. Также могут применяться функции-синонимы «Cos» и «Sin». Вывод смещен на 50% и нормализован на 50%, чтобы соответствовать диапазону значений цвета. Масштаб «value» периода функции (ее частоты) определяет количество «волн», которые будут сгенерированы во входном цветовом диапазоне. Например, если значение равно 1, эффективным периодом будет «QuantumRange»; но если значение равно 2, эффективный период равен половине «QuantumRange».

Используйте "-set 'option:valued:clamp true" для настройки.


* Обратите внимание, в отличие от "-fx", значения не нормализуются до диапазона от 0 до 1, а остаются реальными значениями цвета изображения. Оператор зависит от того, как скомпилирована программа (IM Q8 или ImageMagick Q16). Чтобы избежать эффектов квантования, следует работать с процентными значениями аргументов («%»).


Например, чтобы заменить все значения цвета в изображении на 50% серое с помощью "-set".

bash$ convert rose: -evaluate set 50% rose_set_gray.gif
Чтобы уменьшить контраст изображения вдвое.

bash$ convert rose: -evaluate divide 2 -evaluate add 25% rose_de-constrast.gif
К сожалению, так как "-evaluate" обрезает результаты от 0 до «QuantumRange», приходится отказаться от некоторых сложных алгоритмов.

Если вы попытаетесь применить функцию повышения контрастности (эквивалентную "-fx '2*u-.25'") непосредственно, вы не сможете получить правильные результаты, так как удвоенное значение будет обрезано.

bash$ convert rose: -evaluate multiply 2 -evaluate subtract 25% \
rose_contrast.gif
Будьте осторожны с оператором "-evaluate".

См. Также оператор "-function", который является многозначной версией метода «Assessment».


• -evaluate-sequence operator

• evaluate-sequence="-evaluate-sequence operator"

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

Алгоритм "-evaluate-sequence" разработан для слияния нескольких изображений одного размера очень специфическими способами.

Оператор использует те же методы, что и "-evaluate", поэтому вы можете получить полный список командой "-list Evaluate".

Например, в этом случае слияние позволяет усреднить все изображения.

bash$ convert rose: -flip rose: \( -clone 0--1 -flop \) \
-evaluate-sequence mean average.png
Альтернативой можно считать метод "composite -blend 50%" для двух изображений.

Методы «Max» и «Min» получат максимальные (яркие, светлые) значения и минимальные (более темные) значения из последовательности изображений.

bash$ convert rose: -flip rose: \( -clone 0--1 -flop \) \
-evaluate-sequence max max.png
bash$ convert rose: -flip rose: \( -clone 0--1 -flop \) \
-evaluate-sequence min min.png
Так как оператор работает с пикселями, результирующее изображение может иметь проблемы с цветами.

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

:: -evaluate-sequence Median
В этом случае алгоритм, после анализа интенсивности, эффективно усреднит изображение. (Поэтому вы можете использовать настройку, чтобы обрезать интенсивность исходного изображения.)

Для четного числа изображений будет выбираться метод усреднения на более яркой, светлой стороне середины. С двумя изображениями оператор будет эквивалентен пиксельному «осветлению по интенсивности».

bash$ convert rose: -flip rose: \( -clone 0--1 -flop \) \
-evaluate-sequence median median.png
Метод «Add» сложит все изображения вместе.

bash$ convert ... -evaluate-sequence add ...
Что аналогично следующему действию.

bash$ convert ... -background black -compose plus -layers flatten ...
Сложение изображений таким способом может привести к выходу за пределы квантового диапазона, итоговое изображение может быть обрезано, если вы не используете HDRI версию IM.

В подобных случаях рекомендуется применить метод «Median», чтобы усреднить интенсивность изображений и гарантировать, что результирующее изображение не будет обрезано.

Альтернативой может быть оператор "-poly", способной индивидуально взвешивать каждое изображение.

Метод «Subtract» вычитает каждое изображение из первого.

bash$ convert ... \
-negate \( -clone 0 -negate \) -swap 0 +delete \
-compose LinearBurn -background white -flatten \
...
«Multiply» и «Divide» также являются методами "-evaluate-sequence" , но они часто дают неожиданные результаты, поскольку используют фактическое значение цвета изображений, а не нормализованное (аналогично "-evaluate"). В результате масштабы умножения и деления слишком велики.

Существует эквивалентный метод сглаживания для «Multiply», работающий должным образом.

bash$ convert ... -background white -compose multiply -layers flatten ...
Получить полный список значений "-evaluate-sequence" можно с помощью опции "-list Assessment".


• -fft

Реализует прямое дискретное преобразование Фурье (DFT, ДПФ).

Преобразует изображение из нормальной (пространственной) области в частотную. В частотной области изображение представляется как суперпозиция сложных синусоидальных волн различной амплитуды. Координаты «x» и «y» изображения - возможные частоты в направлениях «x» и «y»; значения интенсивности пикселей - комплексные числа, соответствующие амплитудам синусоидальной волны.

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

Изображения амплитуды и фазы должны быть указаны для форматов изображений, которые не ограничивают цвет и не сжимают изображение. MIFF, TIF, PFM, EXR и PNG являются рекомендуемыми форматами. (Данные форматы, кроме PNG, поддерживают многокадровые изображения.)

Здесь создается «fft_image.miff[0]» и фазовое изображение «fft_image.miff[1]».

bash$ convert image.png -fft fft_image.miff
Создается файл «fft_image-0.png» и фазовое изображение «fft_image-1.png».

bash$ convert image.png -fft fft_image.png
Входное изображение дополняется до четного, дополнение будет внизу справа. Вид дополнения зависит от параметра "-virtual-pixel".

Оба выходных компонента будут иметь динамические диапазоны [0, QuantumRange]. Номинальные значения фазы находятся в диапазоне от 0 до 2*€, но масштабируются для охвата всего динамического диапазона. Изображение величины не масштабируется и, как правило, будет содержать очень маленькие значения. Поэтому изображение выглядит почти или полностью черным. Для просмотра любых деталей это изображение следует изменить с помощью логарифмической функции до спектрального.

bash$ convert fft_image.miff[0] -contrast-stretch 0 \
-evaluate log 1000 fft_image_spectrum.png"
Здесь "-contrast-stretch 0" или "-auto-level" применены для масштабирования до полного динамического диапазона. Аргумент - "-rating" обычно задается от 100 до 10000, в зависимости от количества деталей, которые нужно выделить в спектре. Большие значения дают заметные детали. Однако слишком большое количество деталей может скрыть или изменить важные особенности изображения.


* Требуется библиотека «FFTW» для использования "-fft".


Используйте "+fft" для создания двух выходных изображений с действительной и мнимой составляющими комплексного преобразования Фурье.

Поскольку реальная и мнимая составляющие могут содержать отрицательные значения, требуется, чтобы ImageMagick был настроен с поддержкой HDRI. Вы должны указать форматы MIFF, TIF, PFM или MPC для сохранения результатов, чтобы не отсекать отрицательные и дробные значения. Для MIFF или TIF форматов следует добавить настройку "-define Quant:format=32".

По умолчанию DFT нормализовано (IFT не нормализовано). Укажите "-define fourier:normalize=forward", чтобы явно нормализовать БПФ без нормализации IFT.


• -function parameters

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

Здесь «parameters» - это список числовых значений, разделенных запятыми.

Возможны следующие варианты.

«Polynomial». Функция принимает произвольное количество параметров, являющихся коэффициентами многочлена, в порядке убывания степени. Дает большую универсальность, поскольку полиномы можно использовать для подбора любой непрерывной кривой с любой желаемой степенью точности.

«Sinusoid». Функция может использоваться для синусоидального изменения значений канала путем установки частоты, фазового сдвига, амплитуды и смещения. Функция принимает от одного до четырех параметров.

«ArcSin». Функция генерирует обратную кривую синусоиды и может использоваться для создания карт цилиндрических искажений и смещений. Кривая может быть скорректирована как относительно входных значений, так и выходного диапазона значений.

«ArcTan». Функция генерирует кривую, сглаживающую переходы от предельных значений на бесконечности, через центр, используя заданное значение наклона. Все значения можно настроить с помощью аргументов.

Оператор "-function" - форма "-evaluate" с несколькими аргументами. Однако, в отличие от оператора «Evaluate», все вышеперечисленные функции работают только с нормализованными значениями каналов (диапазон от 0,0 до 1,0), что в большинстве случаев упрощает их использование.

Полиномиальная функция.

Метод «polynomial» принимает любое количество значений и изменяет значения цвета в изображении в соответствии с заданным точным выражением намного быстрее, чем это может сделать оператор «FX».

:: -function polynomial a, b, c, ...
Например, аргумент "4,-4,1" будет генерировать полиномиальное выражение, эквивалентное "-fx 4*u^2-4*u+1".

Если вы знакомы с математикой, вы должны знать, что здесь полиномиальная функция создает параболическую кривую, идущую от 1,0 до 0,0, а затем обратно до 1,0, во входном (u) цветовом диапазоне от 0,0 до 1,0. (Функция сделает черный и белый цвета «белыми», а идеальные серые «черными».)

bash$ convert gradient.png -function Polynomial 4,-4,1 func_parabola.png
Например, извлекая квадратный корень из полинома, можно создать истинную дугу окружности над линейным градиентом, как эквивалент очень медленного выражения "-fx sqrt(-4*u^2+4*u+0)".

bash$ convert gradient.png -function Polynomial -4,4,0 -evaluate Pow 0.5 \
func_circle_arc.png
«Sinusoid». Метод функции намного более продвинут, чем версия "-evaluate".

Требуется только первое значение («частота») для создания синусоидальной кривой.

bash$ convert gradient.png -function Sinusoid 1 func_sine.png
«Arctan» похож на «Arcsin», с небольшими полезными особенностями.

bash$ convert gradient.png -function Arctan 1 func_arctan.png
По мере того как наклон кривой становится больше, градиент в центре становится сильнее (сжимается в середине).

bash$ convert gradient.png -function Arctan 10 func_arctan_10.png
Результат похож на работу оператора "-sigmoidal-contrast". Однако «Arctan» никогда не достигнет пределов выходного диапазона чистого черного и белого.

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

bash$ convert gradient.png -function Arctan 10,.7 func_arctan_center.png
Последние два аргумента позволят вам настроить выходной диапазон значений. Например, немного расширив это значение, вы можете гарантировать, что оно полностью покроет весь диапазон возможных значений.

bash$ convert gradient.png -function Arctan 5,0.7,1.2 func_arctan_range.png

Выражения FX.


• -fx expression

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

Оператор «FX» можно использовать, чтобы создавать холсты, градиенты, математические палитры, перемещать значения цвета между изображениями и каналами, переворачивать, зеркально отражать, вращать, масштабировать, сдвигать, искажать, объединять и т.д.

Выражение может быть простым.

Здесь мы преобразуем черное изображение в темно-синее.

bash$ convert -size 64x64 canvas:black -channel blue -fx "1/2" fx_navy.png
Или выражение может быть сложным.

bash$ convert rose: \
-fx "(1.0/(1.0+exp(10.0*(0.5-u)))-0.006693)*1.0092503" \
rose-sigmoidal.png
(Выражение приводит к высококонтрастной версии исходного изображения.)

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

Например, создать радиальный градиент.

bash$ convert -size 70x70 canvas: \
-fx "Xi=i-w/2; Yj=j-h/2; 1.2*(0.5-hypot(Xi,Yj)/70.0)+0.5" \
radial-gradient.png
Это выражение добавляет к изображению случайный шум.

bash$ convert photo.jpg -fx 'iso=32; rone=rand(); rtwo=rand(); \
myn=sqrt(-2*ln(rone))*cos(2*Pi*rtwo); myntwo=sqrt(-2*ln(rtwo))* \
cos(2*Pi*rone); pnoise=sqrt(p)*myn*sqrt(iso)* \
channel(4.28,3.86,6.68,0)/255; max(0,p+pnoise)' noisy.png
Скрипт печатает первые 10 простых чисел.

bash$ convert xc: -channel gray -fx " \
for (prime=2, prime < 30, composite=0; \
for (nn=2, nn < (prime/2+1), if ((prime % nn) == 0, composite++, ); nn++); \
if (composite <= 0, debug(prime), ); prime++)" null:

Язык выражений FX.


Числа: целое число, с плавающей запятой, экспоненциальное представление, постфиксы номеров международной системы (например, KB, Mib, GB и т.д.).

Константы: E (число Эйлера), Epsilon, Opaque, Phi (золотое сечение), Pi, QuantumRange, QuantumScale, Transparent.

Операторы FX, в порядке приоритета: ^(степень), унарный-, *, /, % (по модулю), +, -, <<, >>, <, <=,>,> =, + =, - =, * =, / =,% =, << =, >> =, & =, | =, ++, -, ==,! =, & (поразрядное И), | (побитовое ИЛИ), && (логическое И), || (логическое ИЛИ), ~ (логическое НЕ), ?: (тернарное условное выражение).

Выражение «FX» может включать любую комбинацию из следующего:

~ x ^ y, возведение в степень;
~ ( ... ), группировка;
~ x * y, умножение, звездочка необязательна, например, 2u или 2(х + у);
~ x / y, разделение;
~ x % y, по модулю;
~ x + y, добавление;
~ x - у, вычитание;
~ x << y, сдвиг влево;
~ x >> у, сдвиг вправо;
~ x < y, логическое отношение, возвращаемое значение 1.0, если x < y, иначе 0.0;
~ x <= y, логическое отношение, возвращаемое значение 1.0, если x <= y, иначе 0.0;
~ x > y, логическое отношение, возвращаемое значение 1.0, если x > y, иначе 0.0;
~ x > = y, логическое отношение, возвращаемое значение 1.0, если x > = y, иначе 0.0;
~ x == y, логическое отношение, возвращаемое значение 1.0, если x == y, иначе 0.0;
~ x != y, логическое отношение, возвращаемое значение 1.0, если x ! = y, иначе 0.0;
~ x & y, двоичное И;
~ x | y, двоичное ИЛИ;
~ x && y, логическая связка И, возвращает значение 1.0, если x > 0 и y > 0, иначе - 0.0;
~ x || y, логическая связка ИЛИ (включительно), возвращаемое значение 1.0, если x > 0 или y > 0 (или оба), иначе 0.0;
~ ~x, логический оператор НЕ, возвращается значение 1.0, если не x > 0, иначе 0.0;
~ +x, унарный плюс, возврат 1.0*значение;
~ -x, унарный минус, возврат -1,0*значение;
~ x ? y: z, тернарное условное выражение, возвращающее значение y, если x ! = 0, в противном случае z ; разрешено только одно тернарное условное выражение для каждого оператора;
~ x = y, назначение; односимвольные переменные зарезервированы, вместо этого используйте 2 или более символа, только буквенные комбинации; (например, Xi, а не X1);
~ x ; y, оператор разделителя;
~ phi, константа (1.618034 ... );
~ pi, константа (3,14159265359 ... );
~ e, постоянная (2,71828 ... );
~ «QuantumRange», постоянное максимальное значение пикселя (255 для Q8, 65535 для Q16);
~ «QuantumScale», постоянная 1.0/QuantumRange;
~ «intensity», интенсивность, значение соответствует параметру "-intensity";
~ «hue», оттенок;
~ «saturation», насыщенность;
~ «lightness», яркость; эквивалент 0,5*макс.(красный, зеленый, синий)+0,5*мин.(красный, зеленый, синий);
~ «luminance», яркость; эквивалент 0,212656*красный+0,715158*зеленый+0,072186*синий.
Множество: изображение как массив (например, p[-1,-1].r), ограниченное шириной и высотой. Последовательность изображений это несколько массивов (egup[0,0].r, vp[0,0].r). Значения ограничено Quantum, например [0..65535] для Q16 и числом с плавающей запятой для версий с поддержкой HDRI.

Математические функции: abs(), acos(), acosh(), airy(), alt(), asin(), asinh(), atan(), atanh(), atan2(), ceil(), clamp(), cos(), cosh(), debug(), drc(), erf(), exp(), floor(), gauss(), gcd(), hypot(), int(), isnan(), j0(), j1(), jinc(), ln(), log(), logtwo(), max(), min(), mod(), not(), pow(), rand(), round(), sign(), sin(), sinc(), sinh(), sqrt(), squish(), tan(), tanh(), trunc().

~ abs(x), функция абсолютного значения;
~ acos(x), функция арккосинуса;
~ acosh(x), функция обратного гиперболического косинуса, ареакосинус;
~ airy(x), Функция Эйри (max=1, min=0) airy(x)=[jinc(x)]2=[2*j1(pi*x)/(pi*x)]2;
~ alt(x), функция чередования знаков (возврат 1.0, если int(x) четное, -1.0, если int(x) нечетное);
~ asin(x), функция дугового синуса;
~ asinh(x), функция обратного гиперболического синуса;
~ atan(x), функция арктангенса;
~ atanh(x), функция обратного гиперболического тангенса;
~ atan2(y,x), арктангенс функция двух переменных;
~ ceil(x), наименьшее целое значение не меньше аргумента;
~ channel(r,g,b,a), числовой аргумент на основе текущего канала;
~ channel(c,m,y,k,a), числовой аргумент на основе текущего канала;
~ clamp(x), значение ограничения;
~ cos(x), функция косинуса;
~ cosh(x), функция гиперболического косинуса;
~ debug(x), отладка выражения;
~ do(expression, condition test), итерация, пока условие не равно 0;
~ drc(x,y), сжатие динамического диапазона: drc(x,y)=(x)/(y*(x-1)+1); -1<y<1;
~ erf(x), функция ошибки;
~ exp(x), естественная экспоненциальная функция (ex);
~ floor(x), наибольшее целое значение не больше аргумента;
~ for(initialization, condition test, expression), итерация, пока условие не равно 0;
~ gauss(x), гауссовская функция; gauss(x)=exp(-x*x/2)/sqrt(2*pi);
~ gcd(x,y), наибольший общий знаменатель;
~ hypot(x,y), квадратный корень из x2+y2;
~ if(condition test, nonzero-expression, zero-expression), интерпретировать выражение в зависимости от условия;
~ int(x), функция наибольшего целого числа (возврат наибольшего целого числа, меньшего или равного x);
~ isnan(x), вернет 1.0, если x - NAN, в противном случае - 0.0;
~ j0(x), функции Бесселя от x первого рода порядка 0;
~ j1(x), Функции Бесселя от x первого рода порядка 1;
~ jinc(x), функция jinc (max=1, min=-0.1323); jinc(x)=2*j1(pi*x)/(pi#x);
~ ln(x), функция натурального логарифма;
~ log(x), логарифм по основанию 10;
~ logtwo(x), логарифм по основанию 2;
~ ln(x), натуральный логарифм;
~ max(x, y), максимум x и y;
~ min(x, y), минимум x и y;
~ mod(x, y), функция остатка с плавающей запятой;
~ not(x), вернет 1.0, если x равен нулю, иначе 0.0;
~ pow(x,y), степенная функция (x y);
~ rand(), значение, равномерно распределенное в интервале [0,0, 1,0] с периодом от 2 до 128-1;
~ round(), округление до целого значения независимо от направления округления;
~ sign(x), вернет -1,0, если x меньше 0,0, иначе 1,0;
~ sin(x), функция синуса;
~ sinc(x), функция sinc (max=1, min=-0.21); sinc(x)=sin(pi*x)/(pi*x);
~ squish(x), функция squish(x)=1.0/(1.0+exp(-x));
~ sinh(x), функция гиперболического синуса;
~ sqrt(x), функция квадратного корня;
~ tan(x), касательная функция;
~ tanh(x), функция гиперболического тангенса;
~ trunc(x), округлить до целого числа в сторону нуля;
~ while(condition test, expression), итерация, пока условие не равно 0;
Функции канала: channel(r, g, b, a), channel (c, m, y, k, a).

Названия цветов: red, cyan, black, etc.

Цветовые функции: srgb(), srgba(), rgb(), rgba(), cmyk(), cmyka(), hsl(), hsla() и т.д.

Шестнадцатеричные значения цвета: #ccc, #cbfed0, #b9e1cc00 и т.д.

Символы: s, t, u, v, n, i, j, w, h, z, r, g, b, a, o, c, y, m, k

Символы:

~ u, первое изображение в списке;
~ v, второе изображение в списке;
~ s, текущее изображение в списке (для %[fx:] в противном случае равно u);
~ т, индекс текущего изображения в списке;
~ п, количество изображений в списке;
~ i, смещение столбца;
~ j, смещение строки;
~ p, используемый пиксель (абсолютный или относительно текущего пикселя);
~ w, ширина;
~ h, высота;
~ z, глубина канала;
~ r, значение красного (RGBA) определенного или текущего пикселя;
~ g, зеленый;
~ b, синий;
~ a, альфа;
~ о, непрозрачный;
~ c, значение голубого цвета CMYK пикселя;
~ y, желтый;
~ m, пурпурный;
~ k, черный;
~ intensity, интенсивность;
~ hue, оттенок;
~ saturation, насыщенность;
~ lightness, яркость;
~ luma, яркость пикселей;
~ page.width, ширина страницы;
~ page.height, высота страницы;
~ page.x, x смещение;
~ page.y, смещение по y;
~ printsize.x, x значение;
~ printsize.y, y значение;
~ resolution.x, разрешение x;
~ resolution.y, y разрешение;
~ depth, глубина;
~ extent, размер;
~ minima, минимум;
~ maxima, максимум;
~ mean, среднее;
~ median, медиана;
~ standard_deviation, стандартное отклонение;
~ kurtosis: эксцесс;
~ skewness: асимметрия (добавьте спецификатор канала для вычисления статистики канала, например, depth.r).
Итераторы: do(), for(), while().

Атрибуты изображения: image.depth, image.kurtosis, image.maxima, image.minima, image.resolution.x, image.resolution.y, image.skewness, image.standard_deviation.

Настройки изображения:.e.g. magick ... -set option:wd1 "%[fx:w/2]" -resize "%[fx:wd1-5]" ...

Семантика выражения включает следующие правила.

~ 1. Символы нечувствительны к регистру.
~ 2. Только одно тернарное условное выражение (например, x ? y: z) на оператор.
~ 3. Операторы - это присваивания или последнее выражение, которое нужно вернуть.
~ 4. Присвоение запускает оператор, но это не оператор.
~ 5. Односимвольные переменные зарезервированы, назначения зарезервированным встроенным модулям не вызывают исключения и не действуют; например "r=3,0;р" возвращает значение красного цвета пикселя, а не 3,0.
~ 6. Унарные операторы имеют более низкий приоритет, чем бинарные, то есть унарный минус (отрицание) имеет более низкий приоритет, чем возведение в степень, поэтому -3^2 интерпретируется как -(3^2)=-9. Используйте круглые скобки, чтобы пояснить намерение. Например, (-3)^2=9). Будьте осторожны при использовании символа косой черты ("/").
~ 7. Строка символов 1/2x интерпретируется как (1/2)x.
~ 8. Противоположная интерпретация должна быть явно записана как 1/(2x).
~ 9. Круглые скобки помогают прояснить смысл, их следует использовать всякий раз, когда есть вероятность неправильного толкования.
Исходные изображения. Символы «u» и «v» также относятся к первому и второму изображениям в текущей последовательности. Чтобы ссылаться на конкретное изображение в последовательности, добавьте его индекс к любой ссылке на изображение, с нулевым индексом для начала последовательности.

Отрицательный индекс отсчитывается с конца. Например, u[0] - первое изображение в последовательности, u[2] третье, u[-1] это последнее изображение, u[t] текущее изображение. На текущее изображение также можно ссылаться как на «s». Если порядковый номер превышает длину последовательности, счет переносится. Таким образом, в последовательности из 3 изображений u[-1], u[2], а также u[5] все относятся к одному и тому же (третьему) изображению.

В качестве примера мы формируем изображение путем усреднения первого и третьего изображений (второе изображение игнорируется и удаляется).

bash$ convert image1.jpg image2.jpg image3.jpg -fx "(u+u[2])/2.0" image.jpg
Важно отметить особую роль первого изображения. Это единственное изображение в последовательности, которое было изменено. В качестве иллюстративного примера рассмотрим следующее и обратите внимание, что установка "-channel red" указывает "-fx" внести изменение только для красного канала. Синий и зеленый каналы не изменяются.

bash$ convert -channel red logo: -flop logo: -resize "20%" -fx "(u+v)/2" image.jpg
Все значения цвета нормализованы в диапазоне от 0,0 до 1,0. Альфа-канал находится в диапазоне от 0,0 (полностью прозрачный) до 1,0 (полностью непрозрачный).

Пиксели обрабатываются по одному, но можно указать любой пиксель изображения, используя индекс, представленный как «p»:

~ p[-1].g зеленый, значение пикселя непосредственно слева от текущего пикселя;
~ p[-1,-1].r красный, значение пикселя по диагонали влево и вверх от текущего пикселя.
Чтобы указать абсолютную позицию, используйте фигурные скобки:

~ p {0,0}.r красное значение пикселя в верхнем левом углу изображения;
~ p {12,34}.b значение синего пикселя в столбце номер 12, строка 34 изображения.
Целочисленные значения позиции извлекают цвет пикселя, на который указывает ссылка, нецелочисленные значения позиции возвращают смешанный цвет в соответствии с установкой "-interpolate".

Позиция за границей получает значение, указанное параметром "-virtual-pixel".

Используйте "-channel", чтобы указать выходной канал. Если выходной канал не указан, алгоритм применяется ко всем каналам, кроме альфа-канала.

bash$ convert alpha.png beta.png -channel red -fx "(u.g+v.g)/2" gamma.png
bash$ convert canvas:'rgb(25%,50%,75%)' rose: -colorspace rgb \
-format 'Red channel of NW corner of image # %[fx:t] is %[fx:s]\n' info:
Здесь мы используем индексы изображений для поворота, применяем "-set" с индексом изображения, чтобы установить задержку паузы для первого изображения в анимации.

bash$ convert rose: -duplicate 29 -virtual-pixel Gray -distort SRT '%[fx:360.0*t/n]' \
-set delay '%[fx:t == 0 ? 240: 10]' -loop 0 rose.gif"
Здесь мы определяем черное изображение, но затем устанавливаем 50% синий канал.

bash$ convert -size 64x64 xc:black -channel blue -fx '1/2' fx_navy.gif
Здесь мы умножаем все значения пикселей на 50%.

bash$ convert rose: -fx 'u*1.5' fx_rose_brighten.gif
Вы можете создать свою собственную функцию «зеркальное отображение» (похожую на "-flop").

bash$ convert rose: -fx 'p {w-i-1,j} ' fx_rose_mirror.gif
Или изменить размер изображения.

bash$ convert rose: -size 120x80 xc: +swap \
-fx 'v.p {(i+.5)*v.w/w-.5, (j+.5)*v.h/h-.5} ' \
fx_scaled.png
Поменять местами красный и синий каналы изображения розы.

bash$ convert rose: \( +clone -channel R -fx B \) \
+swap -channel B -fx v.R fx_rb_swap.gif
(Более быстрый и лучший способ сделать то же самое - использовать "-separate" и "-combine".)

Важные для работы "-fx" параметры это "-virtual-pixel" и "-interpolate".

Параметр-настройка «Virtual Pixel Setting» позволяет установить, какие цвета или результаты изображения должны возвращаться, когда поисковые координаты выходят за пределы области, охватываемой входным изображением. Это позволяет установить краевые эффекты размытия.

Параметр «Interpolate Setting» позволяет указать, как ImageMagick должен смешивать цвета соседних пикселей, когда поисковые координаты (значения с плавающей запятой) попадают между целочисленными координатами пикселей во входном изображении.

Выражения "-fx" можно применять к изображениям в разных цветовых пространствах.

bash$ convert xc:red xc:green xc:blue -colorspace HSL \
-format '%[fx: s.r ]\n' info:
Умножая изображение на определенный цвет, мы устанавливаем этот цвет для всех белых областей.

bash$ convert test.png -size 1x1 xc:Yellow \
-fx 'u*v.p{0,0}' fx_linear_white.png
Формула инвертирует цвета, умножает изображение желаемым инвертированным цветом и снова инвертирует изображение.

bash$ convert test.png -size 1x1 xc:'rgb(204,153,51)' \
-fx '1-(1-v.p{0,0})*(1-u)' fx_linear_black.png
С помощью чуть более сложной формулы вы можете линейно заменить «black» и «white» определенными цветами.

bash$ convert test.png -size 1x2 gradient:gold-firebrick \
-fx 'v.p{0,0}*u+v.p{0,1}*(1-u)' fx_linear_color.png
Настройка "-size 1x2 gradient:color1-color2" в приведенном выше примере используется только для создания двухцветного пиксельного изображения. Первый цвет заменяет белый, а второй черный, все остальные интерполируются между белым и черным. Что в точности эквивалентно оператору "+level- colors".

Можно использовать экспоненциальную функцию для тонирования.

bash$ convert test.png -channel B -fx '.3*exp(-u*4.9)+u' fx_expotential.png
Оператор "-fx" позволяет гибко применять кривые, например, редактировать кривую, перемещая четыре (или более) контрольные точки, и тем самым сдвигая гистограмму.

Контрольные точки указывают, что первый уровень градаций серого после настройки становится вторым уровнем градаций серого. Таким образом, точка "0,0,0,2" показывает, что уровень серого 0% (черный) после настройки должен быть уровнем серого 20%.

IM не позволяетнапрямую определять «контрольные точки» для корректировки кривой, необходима математическая формула порожденной кривой. Значения можно вычислить с помощью программ «Gnuplot», «Fudgit», «Mathematica» и «Matlab» или скриптов-калькуляторов.

Ниже приводится метод для генерации формулы из четырех контрольных точек с помощью программы «Gnuplot».

:: bash$ ( echo "0.0 0.2"; echo "1.0 0.9"; \
echo "0.2 0.8"; echo "0.7 0.5"; ) > fx_control.txt
:: bash$ ( echo 'f(x) = a*x

*3 + b*x



*2 + c*x + d'; \


echo 'fit f(x) "fx_control.txt" via a, b, c, d'; \

echo 'print a,"*u^3 + ",b,"*u^2 + ",c,"*u + ",d'; \

) | gnuplot 2>&1 | tail -1 > fx_funct.txt

Полученные результаты можно встраивать как аргументы "-fx".

bash$ convert test.png -fx "‘cat fx_funct.txt‘" fx_funct_curve.png
Чтобы упростить преобразование контрольных точек, был создан сценарий оболочки «im_fx_curves».

bash$ im_fx_curves 0,0.2 0.3,0.7 0.6,0.5 0.8,0.8 1,0.6 > fx_curve.txt
Вы можете создать список коэффициентов, разделенных запятыми для «im_fx_curves» со специальной опцией "-c".

bash$ im_fx_curves -c 0,0.2 0.3,0.7 0.6,0.5 0.8,0.8 1,0.6 > coefficients.txt
bash$ convert test.png -function Polynomial ‘cat coefficients.txt‘ test_curves.png

• -ift

Реализует обратное дискретное преобразование Фурье (IFT, ДПФ).

Преобразует пару изображений амплитуды и фазы из частотной области в одно изображение в нормальной или пространственной области.

В зависимости от формата изображения, используемого для хранения результата "-fft", можно применять несколькими способами.

bash$ convert fft_image.miff -ift fft_image_ift.png
bash$ convert fft_image-0.png fft_image-1.png -ift fft_image_ift.png
Полученное изображение может потребоваться обрезать из-за заполнения, введенного, когда исходное изображение до "-fft" или "+fft" не было квадратным.

Для оператора "-ift" требуется библиотека делегата «FFTW».

Форма оператора "+ift" (с включенным HDRI) нужна для преобразования пары реальных и мнимых изображений из частотной области в одно изображение в нормальной (пространственной) области.

По умолчанию IFT не нормализован. Используйте "-define fourier:normalize=inverse", чтобы явно нормализовать IFT без нормализации FFT.


• -poly "wt,exp ... "

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

Веса обычно дробные от -1 до 1. Сумма весов должна быть 1 или, по крайней мере, между 0 и 1, чтобы избежать обрезки, если нет поддержки HDRI.

Показатели могут быть положительными, отрицательными или нулевыми. Отрицательный показатель степени эквивалентен 1, деленному на изображение, возведенное в соответствующий положительный показатель степени. Нулевой показатель степени всегда дает 1, масштабированный квантовым диапазоном до белого.


* Обратите внимание, что можно добавить к выражению постоянный цвет, просто указывая настройку "xc: somecolor" для одного из изображений и указывая желаемый вес и показатель степени как равные 0. Точно так же можно добавить белый цвет к выражению, если использовать "null:" (или "xc: white") для одного из изображений с соответствующим весом и показателем, равным 0.


Оператор "poly" тесно связан с "-evaluate-sequence Median" (усреднение изображения).

bash$ convert rose: granite: null: -poly '1,1 2,1 -1.0,0' poly_rose.png
Оператор "-poly" дает возможность взвешивать каждое изображение индивидуально, но выполняет все вычисления за одну операцию без необходимости создания дополнительных промежуточных изображений. Это позволяет избежать квантового округления, отсечения или других эффектов даже в версии ImagMagick, не поддерживающей HDRI. Оператор можно использовать для получения средневзвешенного значения большого количества изображений, для усреднения небольших групп изображений.

Морфология.


• -bias value {%}

Настройка для сворачивания изображения.

Опция сдвигает вывод "-convolve" так, чтобы положительные и отрицательные результаты относились к заданному значению смещения. Это важно для компиляций ImageMagick без HDRI при работе со свертками, которые содержат как отрицательные, так и положительные значения. Что характерно для сверток с фильтрами верхних частот или обнаружения краев. Без "-bias" отрицательные значения обрезаются до нуля.

bash$ convert face.png -bias 50% -morphology Convolve LoG:0x2 face_log.png
При использовании ImageMagick HDRI "-bias" не требуется.


• -convolve kernel

Свернет изображение с помощью ядра свертки, предоставляемого пользователем.

Аргумент «kernel» - это матрица, заданная как список целых чисел, разделенных запятыми (без пробелов), упорядоченных слева направо, начиная с верхней строки. В настоящее время поддерживаются только ядра с нечетными размерами, поэтому количество записей в указанном «kernel» должно быть 3^2=9, 5^2=25 и т.д.


* Обратите внимание, что оператор "-convolve" поддерживает настройку "-bias".


Методы «Convolve» и «Correlate» - это одна и та же операция, за исключением очень незначительного отличия.

Метод «Convolve» в основном используется для обработки изображений, а метод «Correlate» предназначен для сопоставления с образцом - он выполняет «кросс-корреляцию» изображения с ядром, пытаясь найти совпадение данной формы в изображении.

«Correlate» - старый, но простой метод поиска фигурных объектов, которые примерно соответствуют форме, найденной в предоставленном ядре.

bash$ convert convolve_shape.gif -define convolve:scale='1!' \
-morphology Correlate '3: 1,0,0 1,0,0 1,1,0' correlate.gif
«Correlate» повышает яркость в точке, где «начало координат» ядра соответствует форме на изображении. И затемняет в том случае, если находит частичное совпадение формы.

Метод «Convolve» взвешивает каждый пиксель в локальной окрестности, использую числа с плавающей запятой. Взвешенные значения складываются, чтобы создать новый (замещающий) пиксель в результирующем изображении.

bash$ convert xc: -bordercolor black -border 5x5 pixel.gif
bash$ convert pixel.gif -define showkernel=1 \
-morphology Convolve '3x3: 0.0, 0.5, 0.0 0.5, 1.0, 0.5 0.0, 0.5, 0.0' pixel_spread.gif
Как вы можете видеть, один пиксель изображения увеличился и вокруг него появились серые пиксели.

«Convolve» похож на метод морфологии «Dilate», однако последний обрабатывает ядро как тип маски растрового изображения.

Метод «Convolve» это взвешенная сумма всех значений в окрестности, поэтому учитывается значение каждого элемента ядра. Однако "-convolve" отличается от метода морфологии «Convolve». Оператор "-convolve" реализован как корреляция, это не свертка. Ядро не накладывается на исходное изображение в отраженной форме. Оператор всегда будет нормализовать ядра.


* В настоящее время операторы, связанные со сверткой, такие как "-gaussian_blur", "-blur", "-sharpen", "-unsharp", используют оператор "-convolve".


По умолчанию "-convolve" выполняет свертку только по цветовым каналам, как определено настройкой "-channel". Если вы делаете свертку с настройкой "-channel RGBA", также взвешиваются значения ядра по альфа-каналу, чтобы обеспечить правильное размытие в отношении прозрачности.

Масштабирование ядра Convolve.

bash$ convert logo: -resize 50% -crop 80x80+150+60 +repage face.png
bash$ convert face.png \
-morphology Convolve '3x3: 0.0,0.5,0.0 0.5,1.0,0.5 0.0,0.5,0.0' \
face_spread.png
Полученное изображение очень яркое, потому что каждый пиксель используется 3 раза.

Для уменьшения яркости необходимо разделить все значения в ядре на 3. Процесс называется «нормализация ядра».

bash$ convert face.png -define showkernel=1 \
-morphology Convolve \
'3x3: 0.0,.1667,0.0.1667,.3333,.1667 0.0,.1667,0.0' \
face_spread_norm.png
Здесь вы получаете слегка размытое изображение, поскольку пиксели были распределены по ближайшим соседям. Но ядро теперь темное.

Специальная экспертная опция позволяет указать глобальный коэффициент масштабирования для ядра и настроить яркость общего результата.

:: -define convolve:scale={kernel_scale}
bash$ convert face.png -define convolve:scale=0.33333 \
-morphology Convolve '3x3: 0.0,0.5,0.0 0.5,1.0,0.5 0.0,0.5,0.0' \
face_spread_scale.png

Нормализация ядра (автоматическое масштабирование).

IM способен вычислить «нормализованный коэффициент масштабирования» с помощью специального флага нормализации "!".

bash$ convert face.png -define convolve:scale=\! \
-morphology Convolve '3x3: 0,1,0 1,2,1 0,1,0' \
face_spread_normalize.png
Большинство математически определенных ядер предварительно нормализованы. Сюда входят ядра «Unity», «Gaussian», «LoG», «DoG», «Blur», «Comet».

Однако ядра дискретных констант не нормализованы, их следует определять с помощью параметра нормализации ядра. Сюда входят ядра «Laplacian», «Sobel», «Roberts», «Prewitt», «Compass», «Kirsch», «FreiChen». (Ядро «FreiChen» не следует нормализовать.)

Полный синтаксис настройки масштабирования ядра.

:: -define convolve:scale='{kernel_scale}[!^] [,{origin_addition}] [%]'
:: -set option:convolve:scale '{kernel_scale}[!^] [,{origin_addition}] [%%]'

* Обратите внимание на удвоение символа процента при использовании "-set".


Размытие изображений (фильтрация нижних частот).

«Unity» особое ядро, для него указан только один элемент ядра, поэтому каждый пиксель заменяется самим собой.

bash$ convert face.png -morphology Convolve Unity face_unity.png
bash$ convert face.png -morphology Convolve Unity:0.5 face_dimmed.png
Это приводит к размытию и эффектам нерезкости.

Здесь используется ядро «Octagon», чтобы усреднить все значения пикселей, найденные в круговых областях, окружающих каждый пиксель.

bash$ convert face.png -define convolve:scale=! \
-morphology Convolve Octagon:2 face_mean.png
Значение каждого пикселя равномерно распределяется по всем 25 пикселям в определенной окрестности. Результат эквивалентен получение «среднего» или «усреднению» по заданной форме.

Ниже типичное размытие по Гауссу с использованием свертки.

bash$ convert face.png -morphology Convolve Gaussian:0x2 face_gaussian.png
Ядро используется для горизонтального размытия.

bash$ convert face.png -morphology Convolve Blur:0x4 face_blur.png
Можно повернуть ядро «Blur» на 90 градусов, размывая изображение по вертикали.

bash$ convert face.png -morphology Convolve Blur:0x4,90 face_blur_vert.png
Ядро «Comet» похоже на «Blur».

bash$ convert xc: -define showkernel=1 \
-morphology Convolve:0 Comet:0x1.0 null:
bash$ convert face.png -morphology Convolve Comet:0x5 face_comet.png
Ядра «Gaussian» и «Blur» дают почти одинаковые результаты в этом примере.

bash$ convert face.png -gaussian-blur 0x2 face_gaussian-blur.png
bash$ convert face.png -morphology Convolve Blur:0x2 \
-morphology Convolve Blur:0x2+90 face_blur_x2.png
Вы можете смягчить эффект размытия, смешивая размытое изображение с исходным.

bash$ convert face.png -morphology Convolve Gaussian:0x3 face_strong_blur.png
bash$ convert face.png face_strong_blur.png \
-compose Blend -define compose:args=60,40% -composite \
face_soft_blur.png
Здесь используется настройка «blend 40». Или же смешивая ядро с ядром идентификации с таким же соотношением.

bash$ convert face.png -define convolve:scale=60,40% \
-morphology Convolve 'Gaussian:0x3' face_soft_blur2.png
«Снизить резкость» можно с помощью размытия (вычитание из исходного изображения).

bash$ convert face.png -define convolve:scale=-100,200% \
-morphology Convolve 'Gaussian:0x2' face_unsharp.png

Свертки с обнаружением краев (фильтрация верхних частот).

Ядра обнаружения краев.

«LoG» одно из лучших ядер обнаружения границ. Ядро идеально подходит для повышения резкости изображений. На него похоже ядро «DoG».

bash$ convert face.png -bias 50% -morphology Convolve DoG:0,0,2 face_dog_unity.png
Плавное повышение резкости изображения с ядром «LoG».

bash$ convert face.png -define convolve:scale='100,100%' \
-morphology Convolve 'Log:0x2' face_sharpen.png
Менее резкий результат.

bash$ convert face.png -define convolve:scale='50,100%' \
-morphology Convolve 'Log:0x2' face_sharpen_50.png
Здесь резкость увеличивается.

bash$ convert face.png -define convolve:scale='150,100%' \
-morphology Convolve 'Log:0x2' face_sharpen_150.png

Методы морфологии.


• -morphology method kernel

Применит метод морфологии к изображению.

Базовые встроенные ядра морфологии: Unity, Diamond, Square, Octagon, Disk, Plus, Cross, Ring, Rectangle.

Основные методы морфологии: Erode, Dilate, Open, Close, Smooth.

Альтернативные базовые методы морфологии, методы разностной морфологии: EdgeIn, EdgeOut, Edge, Top-Hat, Bottom-Hat.

Морфология изменяет пиксели изображение в зависимости от соседства с другими пикселями. Что может обеспечить множество интересных и полезных эффектов. Даже метод техники «свертки», создающий размытие и повышение резкости, в некотором роде является методом морфологии.

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

Оператор "-morphology" сложен, так как предоставляет пользователю множество средств управления действиями.

-morphology {method} [: {iterations} ] {kernel} [:[k_args} ]


* Обратите внимание, что необходимо задать как минимум два элемента для настройки: «метод» морфологии, сообщающий оператору тип операции, и «ядро», определяющее, какие «соседние» пиксели должны повлиять на конечный результат.


Вы можете получить список доступных методов и ядер, используя команды "-list morphology" и "-list kernel".

Базовые встроенные ядра формы.

«Unity». Специальное ядро. Большинство морфологических методов, использующих это ядро, либо воспроизводят исходное изображение, либо генерируют пустой результат. У ядра нет аргументов.

«Diamond». Минимальное, но не самое простое встроенное ядро.

Ниже можно увидеть результат работы со встроенным ядром «Dilate Diamond».

bash$ convert xc: -bordercolor black -border 5x5 pixel.gif
bash$ convert pixel.gif -scale 800% pixel_mag.gif
bash$ convert pixel.gif -morphology Dilate Diamond \
-scale 800% k_diamond.gif
«Diamond» - хорошее ядро для морфологических операций, в основном определяющее минимальное соседство: исходный пиксель плюс четыре окружающих пикселя. Другое название этого типа ядра - структурный элемент «Z[4]».

Для всех ядер самым важным аргументом является радиус; это целое число, описывающее расстояние от центра «начала координат» до ближайшего края.

«Square» популярное ядро, его легко применять.

По умолчанию ядро «Square» использует окружение размером 3x3 пикселя вокруг «центра».

bash$ convert pixel.gif -morphology Dilate Square -scale 800% k_square.gif
Это хорошее ядро для усреднения пикселей или увеличения/уменьшения некоторой формы на один пиксель.

«Octagon» - ядро, специально разработанное для «Octagonal Distance Metric». Но не путайте эти два ядра, они разные.

Ядро «Disk» имеет круглую форму. Обычно используется, когда требуется очень большое ядро морфологии.

Аргумент радиус для данного ядра может быть числом с плавающей запятой, что позволяет создавать множество форм с использованием небольших радиусов. Ядро «Disk:4.3» устанавливается по умолчанию.

Ядро «Plus» немного отличается от других морфологических ядер, потому что предназначено для определения конкретной «формы», а не просто «соседства» вокруг пикселя.

Если использовать большой «радиус» для этого ядра, размер ядра не увеличивается.

Радиус ядра «Plus» по умолчанию равен 2, что дает 2-пиксельные «плечи» вокруг центрального «начала координат». Если установить «Plus:1», ядро будет похоже на «Diamond» со значением по умолчанию.


* Обратите внимание, что ядро «Plus» не следует использовать для обычных морфологических операций. Однако оно полезно, если вы хотите найти и выделить отдельные точки на изображении.


Ядро «Cross» похоже на «Plus», но повернуто на 45 градусов. Это также особая форма ядра, подходящая для увеличения пикселей.

Ядро «Ring» разработано как специальная «форма» ядра для маркировки пикселей и генерации шаблонов. Однако ядро принимает два радиуса и определяется так же, как ядро «Disk».

Ядро работает с пикселями, находящимися между двумя радиусами, независимо от порядка указанных радиусов. Если радиусы не указаны, по умолчанию используются радиусы 2.5 и 3.5, ("Ring:2.5,3.5"). Это похоже на полое кольцо восьмиугольной формы, идеально подходящее для обводки пикселя.

Ядро «Rectangle» тесно связано с ядром «Square», настройки по умолчанию определяют окно 3x3. Но вместо простого аргумента радиуса, вы можете указать «geometry», чтобы определить точный размер желаемого прямоугольного ядра. Ядро хорошо определяет длинные горизонтальные и вертикальные линии, позволяя вам искать такие объекты на изображениях.

Пользовательские ядра DIY.

Вы не ограничены встроенными ядрами, но можете описать собственное ядро.

"[{geometry}:] {value}, {value}, {value}, ... .."

Например, вот спецификация квадратного ядра шириной 3, его можно использовать для размытия свертки однопиксельного изображения.

bash$ convert pixel.gif -morphology Convolve \
"3: 0.3,0.6,0.3 0.6,1.0,0.6 0.3,0.6,0.3" \
-scale 800% k_user_3.gif
«Convolve» с одним пикселем работает почти так же, как «Dilate», однако «Convolve» использует значения ядра, расширяя и складывая соседние значения вместе.

Итерационные (повторяющиеся) морфологические операции.

bash$ convert pixel.gif -morphology Dilate Diamond:3 -scale 800% k_diamond_x3.gif
bash$ convert pixel.gif -morphology Dilate Diamond \
-morphology Dilate Diamond \
-morphology Dilate Diamond -scale 800% k_diamond_x3.gif

Основные методы морфологии.

Морфологические методы - это способы обработки изображений для поиска и анализа форм объектов на изображении: расширение, сжатие, размещение определенных форм и т.д.

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

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

Как следует из названия, метод «Erode» «съедает» белые пиксели. Вы также можете думать об этом, как о расширении черных областей изображения.

Например, вот простая монохромная человеческая фигура, которая была разрушена с помощью ядра «Octagon».

bash$ convert man.gif -morphology Erode Octagon erode_man.gif
Основные эффекты заключаются в том, чтобы сделать любые выступы или точки, которые могут быть на изображении, более тонкими, или полностью удалить их.

Метод «Dilate» - двойник «Erode». Но он расширяет белые формы, создавая фигуру в соответствии с заданным ядром и количеством итераций. Конечно, это также означает, что он «размывает» черные области изображения.

bash$ convert man.gif -morphology Dilate Octagon dilate_man.gif

* Обратите внимание, что форма не только утолщается, но очертания становятся сглаженными.


Метод «Open» сглаживает контур, скругляя острые точки, также удаляя части, размер которых меньше используемой формы.

Однако он не удаляет какие-либо «дыры» или пустоты, которые могут присутствовать на изображении.

bash$ convert man.gif -morphology Erode Disk open_erode.gif
bash$ convert open_erode.gif -morphology Dilate Disk open_man_2.gif
Основное назначение метода «Close» - уменьшить или удалить любые пустые промежутки.

bash$ convert man.gif -morphology Close Disk close_man.gif
Основным эффектом этого оператора является сглаживание контура формы путем заполнения (закрытия) любых отверстий и углублений. Он также создает соединяющие «мосты» с другими близко расположенными формами.

Метод «Smooth» применяет методы «Open» и «Close», что сначала удаляет все «маленькие объекты», а потом заполняет промежутки размером с элемент структуры ядра.

Здесь мы сглаживаем изображение, используя ядро среднего уровня "Octagon:3".

bash$ convert man.gif -morphology Smooth Octagon:3 smooth_man.gif
Как видите, все «отступы», «зазоры», «дыры» и «точки» были сглажены и закруглены в соответствии с размером и формой ядра.

Оператор «Smooth» также используется, чтобы постепенно удалять шум с изображений.

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

Например, здесь используются варианты «Dilate».

bash$ convert rose: -morphology Dilate Octagon:3 rose_dilate.gif
bash$ convert rose: -morphology DilateIntensity Octagon:3 rose_dilate_intensity.gif
Как видите, обычный метод «Dilate» способен порождать разные оттенки в изображении.

Методы разностной морфологии.

Метод «EdgeIn» находит пиксели, которые «Erode» удаляет из оригинала. В итоге возвращаются ближние к краю пиксели.

bash$ convert man.gif -morphology EdgeIn Octagon edgein_man.gif
Метод «EdgeOut» находит пиксели, добавленные к исходному изображению путем расширения. В результате возвращаются пиксели фона непосредственно рядом с фигурой.

bash$ convert man.gif -morphology EdgeOut Octagon edgeout_man.gif
Метод «TopHat» или «White Top Hat» возвращает пиксели, удаленные для скругления точек.

bash$ convert man.gif -morphology TopHat Disk tophat_man.gif
Методы «BottomHat» или «Black TopHat» заполняют пустые области.

bash$ convert man.gif -morphology BottomHat Disk bottomhat_man.gif
Метод морфологии «Hit-And-Miss» (HMT) - метод высокого уровня, специально разработанный для поиска и определения местоположения каких-то закономерностей на изображениях. Это делается путем поиска определенной конфигурации пикселей «переднего плана» и «фона» вокруг «начала координат».

bash$ convert man.gif -morphology Hit-and-Miss '2x1:1,0' hmt_right.gif
Базовая морфология и каналы.

Все вышеперечисленные базовые методы морфологии применяются к отдельным каналам изображения в соответствии с текущими настройками "-channel" .

Вы также можете применять эти методы к цветным изображениям, если не слишком беспокоитесь об «утечке цвета» из прозрачных областей.

Краевые эффекты.


• -canny radius

• -canny radius {x sigma} {+lower-percent} {+upper-percent}

Детектор «Canny Edge» использует многоступенчатый алгоритм для обнаружения широкого диапазона краев изображения.

Пороговые значения варьируются от 0 до 100% (например, "-canny 0x1+10%+30%"), где «lower-percent» < «upper-percent».

Если «upper-percent» увеличивается, но «lower-percent» остается прежним, будут обнаружены меньшие компоненты края, их длина не меняется. Если "+lower-percent" увеличивается, но "+upper-percent" остается таким же, будет обнаружено то же количество краевых компонентов, их длина будет короткой. Показаны пороги по умолчанию. Аргумент "radius{x sigma}" управляет размытием по Гауссу, применяемым к входному изображению для уменьшения шума и сглаживания краев.

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

bash$ convert mask.gif -canny 0x1+10%+30% mask_canny.gif
bash$ convert rose: -canny 0x1+10%+30% rose_canny.gif
Контуры краев из сглаженных фигур.

bash$ convert -size 80x80 -gravity center -font WebDings label:')' voice.gif
Изображение, обнаруженное по краю.

bash$ convert voice.gif -edge 1 -negate voice_edge.gif

• -edge radius

Обнаруживает края в изображении.

Оператор "-edge" выделяет области цветовых градиентов на изображении. Это оператор шкалы серого, он применяется к каждому из трех цветовых каналов отдельно.

bash$ convert mask.gif -edge 1 mask_edge_1.gif
bash$ convert mask.gif -edge 2 mask_edge_2.gif
bash$ convert mask.gif -edge 3 mask_edge_3.gif
bash$ convert mask.gif -edge 10 mask_edge_10.gif

Клонирование и дублирование изображений.


• -clone index (s)

Создает клон изображения (или изображений).

В круглых скобках оператор клонирует из последней последовательности изображений и добавляет их в конец текущей последовательности. За пределами круглых скобок (не рекомендуется) клонирует изображения из текущей последовательности.

bash$ convert rose: \( -clone 0 -colorspace LAB -separate +append \) \
\( -clone 0 -colorspace LUV -separate +append \) \
-delete 0 -append -set colorspace sRGB separate_lab_luv.png
bash$ convert rose: -flip rose: \( -clone 0--1 -flop \) \
-evaluate-sequence mean average.png
bash$ convert rose: \( +clone -flip \) -morph 5 -set delay 10 \
\( -clone 0 -set delay 240 \) -swap 0 +delete \
\( +clone -set delay 240 \) +swap +delete \
-duplicate 1,-2-1 rose_flip_pause.gif
bash$ convert rose: \( -clone 0 -flip -crop 3x0 \) \
\( -clone 0 -crop 3x0 \) \
-set delay 10 -loop 0 wipe.gif

* Форма оператора "+clone" создаст копию последнего (крайнего) изображения в последовательности.



• -duplicate count, indexes

Дублирует изображение.

Укажите изображение (по индексу), которое нужно дублировать в последовательности. Первое изображение считается имеющим индекс 0. Отрицательные индексы относятся к концу последовательности, например, -1 определяет последнее изображение в последовательности. Укажите диапазон изображений через дефис, например, 0-4. Разделите индексы запятой, например, 0,2. Примените форму оператора "+duplicate" для дублирования последнего (крайнего) изображения в текущей последовательности.

bash$ convert rose: \( +clone -flip \) -morph 5 -set delay 10 \
\( -clone 0 -set delay 240 \) -swap 0 +delete \
\( +clone -set delay 240 \) +swap +delete \
-duplicate 1,-2-1 rose_flip_pause.gif
bash$ convert rose: -duplicate 29 -virtual-pixel tile \
-distort SRT '0,0 1, 0, %[fx:w*t/n],%[fx:h*t/n]' \
-set delay 10 -loop 0 rose_diagonal_roll.gif
bash$ convert rose: -duplicate 29 -virtual-pixel Gray \
-distort SRT '%[fx:360*t/n]' \
-set delay '%[fx:t==0?240:10]' -loop 0 rose_rotate.gif

Объединение, работа с последовательностями и списками.


• -append

Присоединяет текущие изображения последовательности по вертикали или горизонтали.

Опция создает «длинное» изображение, объединяя все текущие изображения в последовательности сверху вниз. Используйте "+append" для наложения слева направо.

Например, здесь мы соединяем группу изображений букв вместе, чтобы сформировать причудливую надпись (как будто объединены «глифы» или буквы «шрифта»).

bash$ convert font_A.gif font_P.gif font_P.gif font_E.gif font_N.gif \
font_D.gif font_E.gif font_D.gif +append append_row.gif
Параметр "-gravity" можно применять для компоновки изображений. Например, настройка «Center» центрирует изображение относительно результирующего изображения.

bash$ convert rose: -background LawnGreen label:Rose \
-background white -gravity center -append \
append_center.jpg
Также допустимо использовать несколько операций в одной команде.

bash$ convert font_{0,0,6,1,2}.gif +append dragon_long.gif \
-background none -append append_multi.gif
С помощью круглых скобок разрешается добавлять числа после изображения.

bash$ convert dragon_long.gif '(' font_{0,0,6,2,9}.gif +append ')' \
-background none -append append_parenthesis.gif
Скобки в приведенном выше примере должны быть заключены в кавычки или экранированы обратной косой чертой ('\') в скриптах UNIX, иначе они будут ошибочно интерпретированы оболочкой.

Поскольку здесь только два изображения, допустимо применить операторы "+swap" или "-reverse" вместо скобок.

Добавить массив изображений и выровнять.

bash$ convert \( font_1.gif font_2.gif font_3.gif +append \) \
\( font_4.gif font_5.gif font_6.gif +append \) \
\( font_7.gif font_8.gif font_9.gif +append \) \
\( -size 32x32 xc:none font_0.gif +append \) \
-background none -append append_array.gif

* Оператор "-append" не использует размер виртуального холста (страницы изображения) или смещение.



• -smush offset

Объединяет последовательность изображений, игнорируя прозрачность.

«Smush» - настраиваемая и гибкая версия "-append", объединяющая изображения в последовательности сверху вниз ("-smush") или слева направо ("+smush") с промежутком между изображениями в соответствии с указанным смещением.

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

Оператор "-smush" зависит от настройки "-gravity". Также любое «пустое» пространство будет заполнено цветом, указанным "-background".

bash$ convert granite: rose: -background none -gravity Center \
+smush -20 smush_overlap.png

Индексы, позиция в списках.


• -adjoin

Объединяет изображения в один файл.

Опция включена по умолчанию. Делается попытка сохранить все изображения последовательности в выходной файл. Однако некоторые форматы, такие как JPEG и PNG, не поддерживают объединения более одного изображения в файле, в этом случае программа запишет каждое изображение в отдельный файл (опция "+adjoin" приведет к такому же эффекту).

bash$ convert logo: rose: -morph 15 my%02dmorph.jpg
Здесь создается последовательность из 17 изображений (два заданных, а также 15, созданных оператором "-morph") с именами my00morph.jpg, my01morph.jpg, my02morph.jpg, ... , my16morph.jpg.


• -delete indexes

Удалит указанные индексом изображения из последовательности.

Укажите изображение по индексу в последовательности. Первое изображение имеет индекс 0. Отрицательные индексы относятся к концу последовательности. Укажите диапазон изображений через дефис (например, 0–4). Разделите индексы запятой (0,2). Используйте "+delete", чтобы удалить последнее изображение в текущей последовательности. Опция "-delete 0--1" удалит всю последовательность изображений.

bash$ convert rose: \( -clone 0 -colorspace LAB -separate +append \) \
\( -clone 0 -colorspace LUV -separate +append \) \
-delete 0 -append -set colorspace sRGB separate_lab_luv.png
bash$ convert -size 16x8 xc:white -fill black \
-draw "line 0,0 15,0" -draw "line 0,0 0,7" \
-write mpr:tile +delete \
-size 128x128 tile:mpr:tile \
-write grid16x8.png -fft -delete 1 \
-auto-level -evaluate log 100000 grid16x8_spectrum.png

• -descend

Получит изображение по нисходящей иерархии окон.


• -geometry geometry

Установит предпочтительный размер и расположение последнего изображения в списке.

Оператор "-geometry" необычный и зависит от команд, где применяется. (Неодназначтность связана с устаревшим синтаксисом IM.)

Если оператор применяется вместе с "-display", то определяет размер и положение окна отображаемого изображения.

Но вместе с утилитой «montage» "-geometry" устанавливает размер тайлов (окон, ячеек).

Вместе с "composite" "-geometry" применяется для изменения размера и положения наложенного изображения (первое изображение) перед наложением на фоновое изображение (второе изображение).

С утилитой "convert" оператор "-geometry" используется как специальный оператор изменения размера изображения и как параметр позиционирования. Здесь он аналогичен оператору "-resize", только изменяет размер последнего (крайнего) изображение в текущей последовательности. Это единственный оператор обработки изображений, специально созданный для воздействия на последнее изображение.

Чтобы избежать недоразумений, следует ограничить использование "-geometry" в утилитах "convert" непосредственно перед операциями "-composite" или "-layers composite".


• -insert index

Вставит последнее (крайнее) изображение в последовательность.

Оператор берет последнее изображение в текущей последовательности и вставляет по указанному индексу. Если используется отрицательный индекс, позиция вставки вычисляется до того, как последнее изображение будет удалено из последовательности. Поэтому "-insert -1" не приведет к изменению последовательности.

bash$ convert rose: -size 20x10 xc:blue -background blue \
\( -clone 0 -crop 40x0 +repage +clone -insert 1 +append \) \
-swap 0,-1 +delete +repage \
\( -clone 0 -crop 0x30 +repage +clone -insert 1 -append \) \
-delete 0 -delete 0 +repage splice_rose_seq.gif

• -reverse

Изменит на противоположный порядок изображений в текущем списке изображений.

bash$ convert rose: -repage +10+10 \
\( +clone -background black -shadow 60x3+5+5 \) \
\( granite: -crop 100x80+0+0 +repage \) \
-reverse -layers merge layer_reverse.gif

• -scene value

Установит номер сцены.

Параметр определяет первое изображение в последовательности.

bash$ convert canvas_prev.gif -scene 1 +adjoin frame_%03d.gif
bash$ convert eye.gif news.gif storm.gif +adjoin -scene 101 image_%03d.gif

• -swap index, index

Поменяет местами два изображения в последовательности.

Например, "-swap 0,2" меняет местами первое и третье изображения в текущей последовательности. Используйте "+swap" для переключения последних двух изображений в последовательности.

bash$ convert rose: -separate -swap 0,2 -combine rose_rb_swap.gif
bash$ convert rose: -colorspace Lab -separate \
\( -clone 0 -negate \) -swap 0 +delete \
-combine -set colorspace Lab \
-colorspace sRGB rose_light_neg.gif
bash$ convert rose: -size 20x10 xc:blue -background blue \
\( -clone 0 -crop 40x0 +repage +clone -insert 1 +append \) \
-swap 0,-1 +delete +repage \
\( -clone 0 -crop 0x30 +repage +clone -insert 1 -append \) \
-delete 0 -delete 0 +repage splice_rose_seq.gif

• -write filename

Запишет последовательность изображений. Последовательность изображений, предшествующая параметру "-write filename", записывается, но обработка продолжается с тем же изображением в его текущем состоянии. Чтобы восстановить исходное состояние изображения после его записи, примените оператор "+write filename".

Используйте опцию "-compress", чтобы указать тип сжатия изображения.

bash$ convert rose: \( +clone -crop 1x1+64+22 -write MPR:pixel +delete \) \
-fill mpr:pixel -draw 'color 0,0 reset' \
color_pick_draw.png
bash$ convert rose: -shave 12x0 -repage 64x64+9+9 \
-format '%wx%h %g' -write info:info_paged.txt paged.gif

Прозрачность, альфа-канал.


• -alpha type

Управление альфа-каналом изображения. Возможны следующие опции: Activate, Associate, Deactivate, Disassociate, Set, Opaque, Transparent, Extract, Copy, Shape, Remove, Background.


• -transparent color

Определяет альфа-канал изображения.

Аргумент «color» определяется форматом, заданным параметром "-fill" . Параметр "-fuzz" может использоваться для сопоставления и замены цветов, аналогичных заданному.

Используйте "+transparent", чтобы инвертировать совпадающие пиксели.

Оператор "-opaque" в точности совпадает с оператором "-transparent", но заменяет соответствующий цвет на текущий. Однако оператор "-transparent" гарантирует, что у изображения включен альфа-канал.

bash$ convert test.png -threshold 100% -alpha off black_threshold.png
bash$ convert test.png -alpha opaque -alpha extract white_alpha.png
bash$ convert test.png -alpha transparent trans_alpha.png
bash$ convert test.png -background silver -alpha Background test_silver.png

• -transparent-color color

Установит прозрачный цвет. Прозрачный цвет по умолчанию "#00000000", полностью прозрачный - черный.

bash$ convert colorwheel.png -fuzz 30000 -transparent blue \
-channel A -negate +channel opaque_blue_inv_alpha.png

Маскирование.


• -read-mask filename

Запретит обновление пикселей изображения, заданных маской.

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

Опция "+read-mask" удалит маску.


• -write-mask filename

Запретит обновление пикселей изображения, заданных маской. Используйте "+write-mask", чтобы удалить маску с изображений.


• -clip

Применит обтравочный контур, если он есть.

bash$ convert cockatoo.tif -clip -negate negated.tif
(Инвертируются только пиксели внутри обтравочного контура.)


* Функция "-clip" требует поддержки SVG. Если библиотека делегата SVG отсутствует, параметр игнорируется.


Опция "+clip" отключит обрезку для последующих операций.


• -clip-mask

Обрежет изображение с помощью маски.

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

Опция "+clip-mask" не позволит использовать отсечение для последующих операций.


• -clip-path id

Вырезает по именованному пути из профиля 8BIM.

Опция идентична "-clip", за исключением выбора определенного пути клипа в случае, если изображение имеет более одного доступного пути.

Опция "+clip-path" отключит отсечение для последующих операций.


* 8BIM - расширение файла, связанное с файлами Adobe Photoshop.


Графические примитивы.


• -draw string

Добавляет в изображение графические примитивы.

Векторная графика — способ представления объектов и изображений (формат описания) в компьютерной графике, основанный на математическом описании элементарных геометрических объектов, обычно называемых примитивами, таких как: точки, линии, сплайны, кривые Безье, круги и окружности, многоугольники. Объекты векторной графики являются графическими изображениями математических объектов.

Примитивы формы.

~ point x,y
~ line x0,y0 x1,y1
~ rectangle x0,y0 x1,y1
~ roundRectangle x0,y0 x1,y1 wc,hc
~ arc x0,y0 x1,y1 a0,a1
~ ellipse x0,y0 rx,ry a0,a1
~ circle x0,y0 x1,y1
~ polyline x0,y0 ... xn,yn
~ polygon x0,y0 ... xn,yn
~ bezier x0,y0 ... xn,yn
~ path specification
~ image operator x0,y0 w,h filename
Текстовые примитивы: text x0,y0 string.

Установленные для "-gravity" определения: NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast.

Примитивы трансформации.

~ rotate degrees
~ translate dx,dy
~ scale sx,sy
~ skewX degrees
~ skewY degrees
Примитивы работы с пикселями.

~ color x0,y0 method
~ matte x0,y0 method
Примитивы формы рисуются цветом, заданном настройкой "-fill". Для форм без заливки определена настройка "-fill none". Вы можете дополнительно управлять обводкой (контуром формы) с помощью параметров "-stroke" и "-strokewidth".

Примитив «point» определяется упорядоченной парой целочисленных координат «x», «y».


* Примитив не зависит от "-stroke" или "-strokewidth".


Примитив «line» требует начальной и конечной точек.

Примитив «rectangle» задается парой точек в верхнем левом и нижнем правом углах.

Примитив «roundRectangle» принимает те же угловые точки, что и «rectangle», за которыми следуют ширина и высота скругленных углов для удаления.

Примитив «circle» создает диск (закрашенный) или круг (незаполненный). Укажите центр и любую точку по периметру (границе).

Примитив «arc» применяется для вписывания эллиптического сегмента в прямоугольник. Для «arc» необходимы настройки двух углов, используемых для «rectangle», за которыми следуют начальный и конечный углы дуги сегмента (например, 130,30 200,100 45,90).

Используйте «ellipse», чтобы нарисовать часть эллипса. Укажите центральную точку, горизонтальный и вертикальный «радиусы», а также начальный и конечный углы в градусах (например, 100,100 100,150 0,360).

Примитивам «polyline» и «polygon» требуются три или более точек для задания периметров. Примитив «polyline» - это «polygon», в котором конечная точка не перемещается в начальную точку. Если для параметра "-stroke" установлено значение «none», то «polyline» идентичен «polygon».

«Coordinate» - пара целых чисел, разделенных пробелом или необязательной запятой.

Например, чтобы определить круг с центром в 100,100, воспользуйтесь командой.

:: -draw "circle 100,100 150,150"
Примитив «Bezier» создает сплайновую кривую и требует трех точек.

:: -draw "bezier 20,50 45,100 45,0 70,50" -draw "bezier 70,50 95,100 95,0 120,50"
«Path» это контур объекта. «MoveTo» установит новую текущую точку. «LineTo» нарисует прямую линию. «CurveTo» нарисует кривую Безье. «Arc» создаст эллиптическую или круговую дугу. «Closepath» закроет текущую фигуру, проведя линию до последнего элемента «MoveTo».

С помощью опции «image» можно объединить изображения, а добавив составной оператор, указать размер, имя файла, местоположение изображения.

:: -draw "image SrcOver 100,100 225,225 image.jpg"
Вы можете использовать значение "0,0" для размера (фактический размер) или указать масштабирование.

Специальные расширенные операторы компоновки в настоящее время не могут применяться с настройкой "-draw image".

Опция «text» позволяет аннотировать изображение текстом. Если в строке есть пробелы, заключите ее в одинарные или двойные кавычки.

:: -draw 'text 100,100 "Works like magick!"'
Опция «rotate» поворачивает примитивы формы и текста относительно исходной точки основного изображения.

:: -draw 'rotate 45 text 10,10 "Works like magick!"'
Опция «translate» преобразует последующие примитивы формы и текста, «scale» масштабирует их, «skewX» и «skewY» смещают относительно исходной точки основного изображения или области.

Преобразования изменяют текущую аффинную матрицу, которая инициализируется из начальной, определенной параметром "-affine". Исходная аффинная матрица изменяется только при добавлении опций в командную строку "-affine", "-draw".

Примитив «color» изменит цвет пикселя на цвет заливки (см. "-fill" ).

Координаты пикселя задаются с помощью следующихметодов: point, replace, floodfill, filltoborder, reset.

Метод «point» перекрашивает целевой пиксель, а «replace» изменит любой пиксель, соответствующий цвету целевого пикселя. «Floodfill» окрашивает любой пиксель, который соответствует цвету целевого соседнего пикселя, тогда как «filltoborder» перекрашивает любой соседний пиксель, не являющийся цветом границы. Наконец, «reset» перекрашивает все пиксели.

Опция «matte» определяет значение пикселя как «прозрачное».

Вы можете установить цвет примитива, шрифта и цвет границы шрифта с помощью "-fill", "-font" и "-box". Параметры обрабатываются в порядке работы с командной строкой.

Строки, начинающиеся с числа, должны быть заключены в кавычки (например, 'sample.png').


* Обратите внимание: для рисования требуется альфа-канал.


С помощью "convert" можно использовать «draw» для наложения изображений на рабочий холст.

bash$ convert -size 100x100 xc:skyblue \
-draw "image over 5,10 0,0 'balloon.gif'" \
-draw "image over 35,30 0,0 'medical.gif'" \
-draw "image over 62,50 0,0 'present.gif'" \
-draw "image over 10,55 0,0 'shading.gif'" \
drawn.gif
Допускается указать размер наложенного изображения.

bash$ convert -size 100x100 xc:skyblue \
-draw "image over 5,10 40,40 'balloon.gif'" \
-draw "image over 35,30 0,0 'medical.gif'" \
-draw "image over 62,50 24,24 'present.gif'" \
-draw "image over 10,55 16,16 'shading.gif'" \
drawn_resize.gif
«Нарисованные» изображения можно поворачивать, масштабировать и искажать с помощью аффинных преобразований во время процесса наложения.

Настройки фона, цвета, геометрии графических примитивов.


• -background color

Установит цвет фона.

Цвет указывается в формате "-fill". Цвет фона по умолчанию белый.

bash$ convert rose: \( +clone -background navy -shadow 60x3-5+5 \) +swap \
-background none -mosaic shadow_left_clipped.png
bash$ convert rose: -background black -gravity south -splice 0x8 \
\( +clone -sparse-color barycentric '0,0 black 69,0 white' \) \
\( -clone 1 -function arcsin 0.5 \) \
\( -clone 1 -level 25%,75% \
-function polynomial -4,4,0 -gamma 2 \
+level 50%,0 \) \
-delete 1 \
-virtual-pixel black -define compose:args=17x7 \
-compose Displace -composite rose_cylinder.png

• -fill color

Цвет для заливки графического примитива.

Этот параметр принимает как аргументы имя цвета (black, white и т.д.), шестнадцатеричное значение цвета или числовые спецификации RGB, RGBA, HSL, HSLA, CMYK или CMYKA.


* Заключите спецификации цвета в кавычки или круглые скобки, чтобы оболочки Unix правильно интерпретировала символы.


:: -fill blue -fill "#ddddff" -fill "rgb(255,255,255)"
bash$ convert test.png -fill white -colorize 50% colorize_lighten.png
bash$ convert test.png -fill black -colorize 50% colorize_darken.png
bash$ convert test.png -fill gray50 -colorize 40% colorize_grayer.png
Посмотреть все значения можно с помощью опции "-list color".


• -floodfill {+-} x {+-} y color

Закрасит изображение определенным цветом. Заливка начинается с заданной исходной точки. Любой цвет, соответствующий цветовому расстоянию "-fuzz" заданного аргументом «color», будет заменен текущим цветом "-fill".

bash$ convert cyclops.png -bordercolor white -border 1x1 \
-alpha set -channel RGBA -fuzz 1% \
-fill none -floodfill +0+0 white \
-shave 1x1 cyclops_flood_2.png
bash$ convert man.gif -gamma 0,1,1 -bordercolor black -border 1x1 \
-fill red -floodfill +0+0 black -shave 1x1 \
-channel R -separate +channel -negate man_floodfill.gif

• -foreground color

Определит цвет переднего плана. Цвет указывается в формате, описанном в параметре "-fill". Цвет переднего плана по умолчанию черный.


• -opaque color

Изменит цвет на цвет заливки внутри изображения. Аргумент «color» определяется параметром "-fill". Параметр "-fuzz" может использоваться для сопоставления и замены цветов, аналогичных заданному.

Форма записи "+opaque" позволяет закрасить любой пиксель, не соответствующий целевому цвету.


* Оператор "-transparent" в точности совпадает с оператором "-opaque" по управлению, но установит соответствующий цвет как «прозрачный».


Например, чтобы заменить «blue» на «white», вы должны использовать команду.

bash$ convert balloon.gif -fill white -opaque blue balloon_white.gif
Здесь синий цвет заменен цветом, определенным настройкой "-fill" .


• -sparse-color method 'x,y color ... '

Раскрашивает изображение, используя указанные точки цвета. Возможные методы: barycentric, bilinear, voronoi, manhattan, shepards, inverse.

Точки размещаются в соответствии с расположением изображения на виртуальном холсте (см. "-page" или "-repage").

bash$ convert rose: -sparse-color voronoi '0,0 %[pixel:p{40,30}]' color_pick_sparse.png
bash$ convert rose: -alpha set -channel A \
-sparse-color Barycentric \
'0,0 opaque %w,-%h opaque %w,%h transparent' \
rose_alpha_gradient.png

* Изменяются цветовые каналы, определенные с помощью "-channel" .



• -stroke color

Цвет обводки графического примитива. Указывается настройкой "-fill" .

bash$ convert rose: -fill none -stroke black \
-draw 'circle 39,20 39,24' rose_marked.png
bash$ convert rose: -fill none -stroke white -draw 'line 5,40 65,5' rose_raw.png

• -unique-colors

Удалит все пиксели любого цвета, кроме одного.

bash$ convert speed.gif \
\( -clone 0--1 -background none +append \
-quantize transparent -colors 63 -unique-colors \
-write mpr:cmap +delete \) \
-map mpr:cmap speed_cmap.gif
bash$ convert tree.gif -unique-colors -scale 1000% tree_colors.gif

• -gravity type

Устанавливает текущее значение "-gravity".

Возможные установки: NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast.

bash$ convert rose: -gravity north -extent 100x80 extent_north.gif
bash$ convert rose: -gravity south -extent 100x80 extent_south.gif
bash$ convert rose: -gravity east -extent 100x80 extent_east.gif
bash$ convert rose: -gravity west -extent 100x80 extent_west.gif
bash$ convert rose: -gravity center -extent 100x80 extent_center.gif
bash$ convert rose: -gravity center -extent 40x80 extent_center2.gif
Чтобы получить полный список, введите "-list gravity".

Направление определяет, где размещается текст или фрагменты изображения. Например, «Center» поместит текст по центру. По умолчанию выбрана установка «Undefined» ("неопределенно").

Параметр "-gravity" влияет на примитивы "-draw".

Также "-gravity" используется вместе с оператором "-geometry" и другими операторами, которые принимают в качестве аргумента «geometry», например, "-crop".

Если "-gravity" стоит перед другим оператором, смещение обычно применяется именно к "-gravity".

bash$ convert image.png -gravity Center -region 10x10-40+20 \ -negate output.png
Примените форму "+gravity", чтобы вернуть значение по умолчанию.


• -linewidth

Ширина линии для операций рисования.


• -render

Отрисовка векторных операций.

Опция "+render" отключит векторные операции рендеринга, что полезно при сохранении результата в векторных форматах (MVG или SVG).

Рендеринг или отрисовка (англ. rendering — «визуализация») — термин в компьютерной графике, обозначающий процесс получения изображения по модели с помощью компьютерной программы.


• -strokewidth value

Установит ширину штриха.

bash$ convert -size 100x14 xc:none -gravity center \
-stroke black -strokewidth 2 -annotate 0 'Faerie Dragon' \
-background none -shadow 100x3+0+0 +repage \
-stroke none -fill white -annotate 0 'Faerie Dragon' \
dragon.gif +swap -gravity south -geometry +0-3 \
-composite anno_fancy.jpg
bash$ convert rose: -fill none -stroke navy -strokewidth 11 \
-draw 'rectangle 0,0 69,45' inside_border.jpg
См. "-draw" для получения дополнительной информации.


• -tile filename

Задает изображение тайла для последующего заполнения графического примитива.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-tile gradient: -annotate +28+68 'Anthony' \
font_gradient.jpg

• -title string

Присвоит заголовок отображаемому изображению. Заголовок обычно отображается в строке заголовка окна. Вы можете включить в заголовок имя файла изображения, тип, ширину, высоту, данные Exif или другой атрибут, вставив символы специального формата.

:: -title "%m:%f %wx%h"

Рамки и фреймы.


• -border geometry

Добавляет к изображению цветную рамку.

Установите ширину и высоту с помощью аргументов «geometry»:

~ value (слева/справа, сверху/снизу);
~ value-x x (-x слева/справа);
~ x value-y (-y сверху/снизу);
~ value-x x value-y (-x слева/справа, -y сверху/снизу);
~ value-x x 0 (-x слева/справа);
~ 0 x value-y (-y сверху/снизу);
~ value % (слева/справа, сверху/снизу);
~ value-x x% (-x% слева/справа и сверху/снизу);
~ x value-y% (-y% сверху/снизу и слева/справа);
~ value-x% x value-y% (-x% слева/справа, -y% сверху/снизу);
~ value-x% x 0% (-x% слева/справа);
~ 0% x value-y% (-y% сверху/снизу).
Установите цвет границы с помощью "-bordercolor".

На операцию "-border" влияет текущая настройка "-compose" и предполагается, что используется метод композиции «Over».

bash$ convert rose: -bordercolor SkyBlue -border 10x10 border.gif
bash$ convert rose: -bordercolor Tomato -border 0x10 border_topbot.gif
bash$ convert rose: -matte -bordercolor none -border 10 border_none.gif
Вы можете указать границы в процентах от размера изображения.

bash$ convert rose: -border 10%x10% border_percent.jpg
Когда "-border" применяется к изображению, содержащему виртуальный холст, добавляется граница вокруг фактического изображения на этом холсте.

bash$ convert rose: -shave 12x0 -repage 64x64+9+9 paged.gif
bash$ convert paged.gif -border 5x5 paged_border.gif

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



• -bordercolor color

Установит цвет границы. Цвет указывается в формате, описанном в параметре "-fill" (по умолчанию оттенок серого "#DFDFDF").

bash$ convert rose: -bordercolor SkyBlue -border 10x10 border.gif
bash$ convert rose: -bordercolor LimeGreen -border 10x0 border_sides.gif
bash$ convert rose: -bordercolor Tomato -border 0x10 border_topbot.gif
bash$ convert rose: -matte -bordercolor none -border 10 border_none.gif

• -borderwidth geometry

Установит ширину границы.


• -frame geometry

Обведет изображение рамкой.

Цвет границы задается параметром "-mattecolor".

Часть аргумента «geometry» определяет величину дополнительной ширины и высоты, добавляемой к размерам изображения. Если в аргументе «geometry» не указаны смещения, добавленная граница будет сплошного цвета. Смещения «x» и «y», если они присутствуют, указывают, что ширина и высота границы разделены для формирования внешнего скоса толщиной «x» пикселей и внутреннего скоса толщиной «y» пикселей.

Параметр "-frame" зависит от установки "-compose" и предполагает метод «Over».

Оператор «-frame» очень похож на «-border», но цвет определяется настройкой "-mattecolor"

bash$ convert rose: -frame 10x10 frame.gif
bash$ convert rose: -frame 15x6+2+2 frame_wierd.gif
bash$ convert rose: -mattecolor SkyBlue -frame 6x6+2+2 frame_blue.gif
bash$ convert rose: -mattecolor Tomato -frame 10x10+5+5 frame_red.gif
bash$ convert rose: -matte -mattecolor '#CCC6' -frame 10x10+3+4 \
\( -size 100x100 plasma:fractal -normalize -blur 0x1 \) \
-compose DstOver -composite frame_plasma.gif
Оператор тесно связан с "-border". Поэтому будет использовать некоторые настройки последнего.

bash$ convert star.gif -frame 6x6+2+2 star_framed.gif
Оператор "-frame" использует параметр «-compose», чтобы наложить изображение на фоновый фрейм.

bash$ convert star.gif -bordercolor LimeGreen \
-compose {operation} -frame 6x6+2+2 {result}

• -hough-lines width x height {+threshold}

Определит прямые линии на изображении (например, -hough-lines 9x9+195).

Используется детектор линий преобразования Хафа с любым двоичным изображением.

bash$ convert rectangle.gif -background black -stroke red \
-hough-lines 5x5+20 rectangle_lines.gif
bash$ convert rectangle.gif \
-define hough-lines:accumulator=true -hough-lines 5x5+20 \
-delete 0 -contrast-stretch 0.1% rectangle_accumulator.gif

* Детектор линий Хафа ("-hough-lines") - сложное многоэтапное преобразование. Детектор предназначен для изучения изображения, поиска белых линий на черном фоне и попытки вернуть местоположение линейных сегментов (пикселей линейной последовательности), присутствующих в изображении.



• -mattecolor color

Укажите цвет для оператора "-frame". Цвет описывается параметром "-fill". По умолчанию матовый цвет "#BDBDBD" (оттенок серого).

bash$ convert rose: -alpha set -mattecolor Gold -bordercolor none \
-compose Dst -frame 7x7+3+2 compose_frame_dst.gif
bash$ convert rose: -mattecolor SkyBlue -frame 6x6+2+2 frame_blue.gif
bash$ convert rose: -mattecolor Tomato -frame 10x10+5+5 frame_red.gif

• -raise thickness

Осветляет или затемняет рамку изображения.

Алгоритм имеет трехмерный эффект. Используйте "-raise", чтобы создать эффект поднятия. Также есть форма "+raise".

В отличие от аналогичной опции "-frame", "-raise" не изменяет размеры изображения.

Оператор "-raise" создает прямоугольную фаску изображения.

bash$ convert rose: -raise 5 rose_raise.gif
«Перевернутый» эффект достигается с помощью формы "+".

bash$ convert rose: +raise 5 rose_sunken.gif
Также можно нарисовать прямоугольник вокруг изображения.

bash$ convert rose: -fill none -stroke navy -strokewidth 11 \
-draw 'rectangle 0,0 69,45' inside_border.jpg
Ширина добавляемой границы контролируется параметром "-strokewidth" прямоугольника.

Если размер изображения не известен, вы можете использовать оператор "-shave", а затем добавить рамку.

bash$ convert rose: -bordercolor green -shave 6x6 -border 6x6 inside_border2.jpg

• -shade azimuth x elevation

Растушует изображение, используя удаленный источник света.

Аргументы «azimuth» и «elevation» показывают «положение» источника света. Опция "+shade" вернет результаты затенения как изображение в градациях серого.

bash$ convert logo.png -alpha extract -blur 0x6 -shade 110x30 -normalize \
logo.png -compose Overlay -composite \
logo.png -alpha on -compose Dst_In -composite \
logo_3D.png

• -shadow percent-opacity {x sigma}{+-}x{+-}y{%}

Имитирует тень изображения.

bash$ convert rose: -bordercolor None -border 11x11 \
\( +clone -background navy -shadow 80x3+5+5 \) \
-background none -compose DstOver -flatten \
-compose Over shadow_space.png

• -texture filename

Имя текстуры, размещаемой на фоне изображения.

Добавление аннотаций к изображению.


• -annotate degrees text

• -annotate XdegreesxYdegrees text

• -annotate XdegreesxYdegrees {+-} tx {+-} ty text

• -annotate {+-} tx {+-} ty text

Добавить текст к изображению.

Для более точного управления текстовыми аннотациями используйте "-draw".

Значения «Xdegrees» и «Ydegrees» управляют сдвигом текста, в то время как «t x» и «t y» управляют смещением, определяющим положение текста относительно параметра "-gravity" (по умолчанию в верхнем левом углу изображения).

Если "-annotate" указывается в градусах, это приводит к повороту текста. Направление вращения положительное (вращение по часовой стрелке).

Если «t x» и «t y» не указаны, они считаются равными 0. Поэтому левый нижний угол текста становится левым верхним углом изображения.

Текст - это любая последовательность символов в кодировке UTF-8. Если в аргументе «text» встречается знак "@", текст читается из файла после данного знака. Текст в файле воспринимается буквально; символы встроенного форматирования не распознаются.

Примеры.

Оператор "-annotate" используется для позиционирования и выравнивания текста.

bash$ convert rings.jpg -resize 120x120 \
-gravity northwest -annotate 0 'NorthWest' \
-gravity east -annotate 0 'East' \
-gravity center -annotate 0 'Center' \
-gravity south -annotate 0 'South' \
-gravity northeast -annotate 0 'NorthEast' \
gravity_text.jpg
Нарисовать повернутый текст без смещения.

bash$ convert -size 100x100 xc:white -gravity Center \
-fill cyan -draw 'line 50,50 70,70' \
-fill red -draw 'line 68,70 72,70 line 70,68 70,72' \
-fill blue -draw "text 20,20 'None'" \
rotate_none.jpg
Поворот текста со смещением.

bash$ convert -size 100x100 xc:white -gravity Center \
-fill cyan -draw 'line 50,50 50,78' \
-fill red -draw 'line 48,78 52,78 line 50,76 50,80' \
-fill blue -draw "rotate 45 text 20,20 'Offset'" \
rotate_offset.jpg
Поворот текста с преобразованием.

bash$ convert -size 100x100 xc:white -gravity Center \
-fill cyan -draw 'line 50,50 70,70' \
-fill red -draw 'line 68,70 72,70 line 70,68 70,72' \
-fill blue -draw "translate 20,20 rotate 45 text 0,0 'Translate'" \
rotate_translate.jpg
Аннотации с поворотом и смещением.

bash$ convert -size 100x100 xc:white -gravity Center \
-fill cyan -draw 'line 50,50 70,70' \
-fill red -draw 'line 68,70 72,70 line 70,68 70,72' \
-fill blue -annotate 45x45+20+20 'Annotate' \
rotate_annotate.jpg
Позиционирование текста с помощью искажения.

Например, создаем «текстовое изображение» с прозрачным фоном и накладываем на фоновое.

bash$ convert rings.jpg -background none label:'Some Text' \
-flatten layer_simple.jpg
Как видите, текст добавлен к изображению в верхнем левом углу.

Текст можно повернуть.

bash$ convert rings.jpg \( -background none label:'Some Text' \
+distort SRT 70 \
\) -flatten layer_rotate.jpg
Или поместить со смещением "+60+60" в центр.

bash$ convert rings.jpg \( -background none label:'Some Text' \
+distort SRT '%[fx:w/2],%[fx:h/2] 1 70 60,60' \
\) -flatten layer_translate.jpg
Текст можно размещать в том или ином месте с помощью "-gravity" .

bash$ convert dragon.gif -background Khaki label:'Faerie Dragon' \
-gravity Center -append anno_label.jpg
Или создать метку над изображением.

bash$ convert dragon.gif -background Orange label:'Faerie Dragon' \
+swap -gravity Center -append anno_label2.jpg
«Splice and Draw» - простой способ добавить дополнительное пространство для метки к изображению.

bash$ convert dragon.gif \
-gravity South -background Plum -splice 0x18 \
-annotate +0+2 'Faerie Dragon' anno_splice.gif
Тот же метод допустимо применять для рисования надписи над изображением, но потребуется изменить настройку "-gravity".

bash$ convert dragon.gif \
-gravity North -background YellowGreen -splice 0x18 \
-annotate +0+2 'Faerie Dragon' anno_splice2.gif
Оператор "-draw" не рекомендуется для рисования на изображениях, если только он не является частью более сложных функций.

Утилита «montage» также позволяет эффективно работать с метками.

bash$ montage -label "Faerie Dragon" dragon.gif \
-geometry +0+0 -background Gold anno_montage.jpg
bash$ montage -label "Faerie Dragon" dragon.gif \
-font Candice -pointsize 15 \
-frame 5 -geometry +0+0 anno_montage2.jpg
Даже функция-оператор "-polaroid" обладает причудливыми возможностями, что позволяет встраивать аннотации.

bash$ convert -caption "Faerie Dragon" dragon.gif -gravity center \
-background black +polaroid anno_polaroid.png
Размещение текста поверх изображения.

Чтобы выделить текст следует воспользоваться некоторыми приемами. Например, «нарисовать» текст дважды.

bash$ convert dragon.gif -gravity south \
-stroke '# 000C' -strokewidth 2 -annotate 0 'Faerie Dragon' \
-stroke none -fill white -annotate 0 'Faerie Dragon' \
anno_outline.jpg
Еще лучше встроить в изображение полупрозрачный прямоугольник, на нем размещать текст.

bash$ convert dragon.gif \
-fill '#0008' -draw 'rectangle 5,128,114,145' \
-fill white -annotate +10+141 'Faerie Dragon' \
anno_dim_draw.jpg
Оператор "-undercolor" также может оказаться полезным.

bash$ convert dragon.gif -fill white -undercolor '# 00000080' -gravity South \
-annotate +0+5 ' Faerie Dragon ' anno_undercolor.jpg
Но лучше всего создать текст как слой, затем наложить его на изображение.

bash$ convert -background '#00000080' -fill white label:'Faerie Dragon' miff:- |\
bash$ composite -gravity south -geometry +0+3 \
- dragon.gif anno_composite.jpg
Чтобы узнать размер изображения, можно воспользоваться особенностями ImageMagick Здесь применяется утилита «identify», она записывает в переменную «width» высоту и ширину изображения.

:: bash$ width=‘identify -format %w dragon.gif‘;
bash$ convert -background '# 0008' -fill white -gravity center -size $ {width} x30 \
caption:"Faerie Dragons love hot apple pies\!" \
dragon.gif +swap -gravity south -composite anno_caption.jpg
Наложение текстовой строки с необычным шрифтом с мягкими контурами.

bash$ convert -size 100x14 xc:none -gravity center \
-stroke black -strokewidth 2 -annotate 0 'Faerie Dragon' \
-background none -shadow 100x3+0+0 +repage \
-stroke none -fill white -annotate 0 'Faerie Dragon' \
dragon.gif +swap -gravity south -geometry +0-3 \
-composite anno_fancy.jpg

• -caption string

Добавить подпись в изображение.

Оператор устанавливает метаданные заголовка изображения, считываемого после того, как оператор был задан. Чтобы изменить заголовок изображений, уже находящихся в памяти, настройте "-set caption".

Заголовок может содержать специальные символы формата.

bash$ convert -caption "Faerie Dragon" dragon.gif -gravity center \
-background black +polaroid anno_polaroid.png
bash$ convert -caption 'Spiral Staircase, Arc de Triumph, Paris, April 2006' \
spiral_stairs_sm.jpg -thumbnail 240x240 \
-bordercolor Lavender -border 5x5 -density 144 \
-gravity center -pointsize 8 -background black \
-polaroid -15 -resize 50% poloroid_modified.png
Если первым символом «string» является «@», заголовок изображения считывается из файла, указанного после этого знака.

Метаданные не видны на самом изображении.

:: -caption "%m:%f %wx%h" bird.miff
Здесь создается заголовок изображения «MIFF: bird.miff 512x480» (при условии, что изображение «bird.miff» имеет ширину 512 и высоту 480).


• -comment string

Вставляет комментарий в изображение.

Оператор добавляет метаданные комментария до помещения изображения в память. Чтобы изменить комментарий к изображениям, уже находящимся в памяти, примените настройку "-set comment".

bash$ convert -comment 'Bad Comment' rose: \
\
-write mpr:rose +delete \
-comment Good mpr:rose rose.jpg
Комментарий может содержать символы специального формата. Если первым символом «string» является «@», комментарий изображения считывается из файла, названного оставшимися знаками в строке.


* Метаданные комментария не видны на изображении.



• -undercolor color

Установит цвет рамки аннотации. Цвет указывается в формате, заданным параметром "-fill".

bash$ convert -background white -undercolor lightblue -fill blue \
-pointsize 18 text:- -trim +repage \
-bordercolor white -border 3 text_boxed.gif
bash$ convert dragon.gif -fill white -undercolor '#00000080' -gravity South \
-annotate +0+5 ' Faerie Dragon ' anno_undercolor.jpg

Работа со шрифтами: настройка шрифтов и рендеринг.


• -direction type

Рендеринг текста справа налево или слева направо. Требуются библиотека делегатов RAQM.


• -encoding type

Укажите кодировку текста. Возможные значения: AdobeCustom, AdobeExpert, AdobeStandard, AppleRoman, BIG5, GB2312, Latin 2, None, SJIScode, Symbol, Unicode, Wansung.

ISO 8859-2 (Latin 2) — кодировка в стандарте ISO 8859 для ряда восточноевропейских языков, использующих латиницу: сербохорватского, словенского, чешского, словацкого, польского, верхне- и нижнелужицкого, венгерского, румынского.

GB2312 — зарегистрированное имя кодировки, распространённой в Китайской Народной Республике, используется китайское письмо.

Unicode — стандарт кодирования символов, включающий в себя знаки почти всех письменных языков мира. В настоящее время стандарт является преобладающим в Интернете.


• -family fontFamily

Установит семейство шрифтов.

Если параметр ошибочен, шрифт заменяется на шрифт по умолчанию (например, «Arial»). Обратите внимание, что семейство может быть списком шрифтов в стиле CSS.


* CSS (англ. Cascading Style Sheets «каскадные таблицы стилей») — формальный язык описания внешнего вида документа, написанного с использованием языка разметки.



• -font name

Установит шрифт для встраиваемого в изображение текста.

bash$ convert -font Times-Bold -pointsize 64 \
-background none label:"Colorful Arc" \
\( +clone -sparse-color Barycentric '0,%h blue %w,0 red' \
\) -compose In -composite \
-virtual-pixel transparent -distort arc 120 \
\( +clone -background black -shadow 100x2+4+4 \
\) +swap -background white -compose over -layers merge +repage \
colorful_arc.jpg
bash$ convert -font Candice -gravity center -size 200x50 \
label:'Around the World' text.jpg
bash$ convert -font ArialB -pointsize 24 -gravity center \
-size 55x55 xc:white -annotate 0x0+0+0 'Text' \
annotate_source.jpg
Посмотреть полный список доступных шрифтов можно с помощью опции - "-list font".


• -interline-spacing value

Растояние между двумя текстовыми строками.

bash$ convert -interline-spacing 5 label:'First\nSecond' label_lspace_5.gif
bash$ convert -interline-spacing 10 label:'First\nSecond' label_lspace_10.gif
bash$ convert -interline-spacing 20 label:'First\nSecond' label_lspace_20.gif

• -interword-spacing value

Ширина пробела между двумя словами.

bash$ convert -interword-spacing 1 label:'I Love IM!' label_wspace_1.gif
bash$ convert -interword-spacing 10 label:'I Love IM!' label_wspace_10.gif
bash$ convert -interword-spacing 25 label:'I Love IM!' label_wspace_25.gif

• -kerning value

Ширина пробела между двумя буквами.

bash$ convert -pointsize 12 -kerning 1 label:Anthony label_kerning_1.gif
bash$ convert -pointsize 12 -kerning 2.5 label:Anthony label_kerning_2.gif
bash$ convert -pointsize 12 -kerning 5 label:Anthony label_kerning_5.gif

• -pointsize value

Устанавливает размер шрифта PostScript, OPTION1 или TrueType.

bash$ convert -density 90 -pointsize 72 label:Hello density.gif
bash$ convert -pointsize 30 -font Candice label:Anthony -trim +repage \
-gravity center -resize 95x95 -crop 100x100+0+0\! \
-flatten text_image.jpg

• -stretch fontStretch

Параметр предлагает тип растяжения для текущего семейства шрифтов. Например, выберите «fontStretch» из следующих настроек: Any, Condensed, Expanded, ExtraCondensed, ExtraExpanded, Normal, SemiCondensed, SemiExpanded, UltraCondensed, UltraExpanded.

Посмотреть полный список растянутых шрифтов можно с помощью опции "-list stretch".


• -style fontStyle

Установит стиль шрифта.

Параметр определяет стиль шрифта для выбранного семейства шрифтов. Например, можно указать следующие стили («fontStyle»): Any, Italic, Normal, Oblique.


• -text-font name

Шрифт для текста фиксированной ширины. Задает имя предпочтительного шрифта для использования в тексте с фиксированным форматом (стиль пишущей машинки). По умолчанию установлен «Courier 14».


• -weight fontWeight

Установит толщину (ширину) шрифта для текста.

~ Thin, «fontWeight» = 100.
~ ExtraLight, «fontWeight» = 200.
~ Light, «fontWeight» = 300.
~ Normal, «fontWeight» = 400.
~ Medium, «fontWeight» = 500.
~ DemiBold, «fontWeight» = 600.
~ Bold, «fontWeight» = 700.
~ ExtraBold, «fontWeight» = 800.
~ Heavy, "fontWeight" = 900.
Полный список можно посмотреть с помощью опции "-list weight".

Эффекты составных шрифтов.

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

Здесь используется узор поверх шрифта.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-tile pattern:checkerboard -annotate +28+68 'Anthony' \
font_tile.jpg

* Обратите внимание, что параметр "-tile" отменяет значение "-fill".


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

Пример градиентного шрифта.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-tile gradient: -annotate +28+68 'Anthony' \
font_gradient.jpg
Перевернутый шрифт.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill Navy -annotate 180x180+300+35 'Anthony' \
font_upsidedown.jpg
Жесткая тень: дважды прорисовывается шрифт со смещением.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill black -draw "text 28,68 'Anthony'" \
-fill white -draw "text 25,65 'Anthony'" \
font_shadow.jpg
Срезанная тень: оператор "-annotate" допускает вращение.

bash$ convert -size 320x115 xc:lightblue -font Candice -pointsize 72 \
-fill Navy -annotate 0x0+12+55 'Anthony' \
-fill RoyalBlue -annotate 0x130+25+80 'Anthony' \
font_slewed.jpg
Наклонный шрифт: применение "-draw" для наклона шрифта.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill Navy -draw "translate 28,68 skewX -20 text 0,0 'Anthony'" \
font_slanted.jpg
Штампованный темный или светлый шрифт.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill black -annotate +24+64 'Anthony' \
-fill white -annotate +26+66 'Anthony' \
-fill lightblue -annotate +25+65 'Anthony' \
font_stamp.jpg
Экструдированный ("выдавленный") или блочный трехмерный шрифт.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill gray -annotate +29+69 'Anthony' \
-annotate +28+68 'Anthony' \
-annotate +27+67 'Anthony' \
-annotate +26+66 'Anthony' \
-annotate +25+65 'Anthony' \
-annotate +24+64 'Anthony' \
-fill navy -annotate +23+63 'Anthony' \
font_extrude.jpg
Контурный шрифт.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill black -annotate +24+64 'Anthony' \
-annotate +26+64 'Anthony' \
-annotate +26+66 'Anthony' \
-annotate +24+66 'Anthony' \
-fill white -annotate +25+65 'Anthony' \
font_outlined.jpg
Шрифт Outline (Stroke): Оператор "-stroke" позволяет рисовать контур шрифта. Обычно цвет обводки установлен как «none» (не используется). Толщина штриха изменяется с помощью параметра «-strokewidth» (по умолчанию 1).

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill white -stroke black -annotate +25+65 'Anthony' \
font_stroke.jpg
Перерисовка шрифта без включения обводки, внутренние части линий удаляются, создавая приятный «жирный» шрифт.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 -fill white \
-stroke black -strokewidth 5 -annotate +25+65 'Anthony' \
-stroke none -annotate +25+65 'Anthony' \
font_stroke_thick.jpg
Если отключить цвет заливки, можно оставить только контур.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill none -stroke black -annotate +25+65 'Anthony' \
font_stroke_thin.jpg
«Психоделический» шрифт.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 -fill white \
-stroke black -strokewidth 25 -annotate +25+65 'Anthony' \
-stroke white -strokewidth 20 -annotate +25+65 'Anthony' \
-stroke black -strokewidth 15 -annotate +25+65 'Anthony' \
-stroke white -strokewidth 10 -annotate +25+65 'Anthony' \
-stroke black -strokewidth 5 -annotate +25+65 'Anthony' \
-stroke none -annotate +25+65 'Anthony' \
font_psychedelic.jpg
Нечеткий, размытый шрифт, созданный с помощью оператора "-blur".

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill navy -annotate +25+65 'Anthony' \
-blur 0x3 font_fuzzy.jpg
Нечеткая тень.

bash$ convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-annotate +30+70 'Anthony' -blur 0x4 \
-fill white -stroke black -annotate +25+65 'Anthony' \
font_shadow_fuzzy.jpg
Мягкая тень: оператор "-shadow" позволяет создавать нечеткие тени.

bash$ convert -size 300x100 xc:none -font Candice -pointsize 72 \
-fill white -stroke black -annotate +25+65 'Anthony' \
\( +clone -background navy -shadow 70x4+5+5 \) +swap \
-background lightblue -flatten -trim +repage font_shadow_soft.jpg
Нарисовать шрифт на фоновом изображении можно разными способами. Вероятно, самый простой способ это создать маску.

bash$ convert -size 320x100 xc:black -font Candice -pointsize 72 \
-fill white -annotate +24+64 'Anthony' \
-fill white -annotate +26+66 'Anthony' \
-fill black -annotate +25+65 'Anthony' \
mask_mask.jpg

* Обратите внимание, что созданная маска не только черно-белая, но имеет различные оттенки серого по краям областей из-за сглаживания.


Накладываем маску на фон.

bash$ convert -size 320x180 plasma: -shave 0x40 plasma_background.jpg
bash$ composite trans_stamp.png plasma_background.jpg mask_mask.jpg \
mask_result.jpg
Накладываем с помощью альфа-композитинга «CopyOpacity».

bash$ composite -compose CopyOpacity mask_mask.jpg trans_stamp.png trans_stamp3.png \
bash$ composite trans_stamp3.png plasma_background.jpg mask_result3.jpg
Расширенная обработка шрифтов.

Комбинируя какие-то методы с соответствующими цветами можно создавать впечатляющие эффекты.

Например, здесь мы создаем сложный и красочный фрагмент текста.

bash$ convert -font Times-Bold -pointsize 64 \
-background none label:"Colorful Arc" \
\( +clone -sparse-color Barycentric '0,%h blue %w,0 red' \
\) -compose In -composite \
-virtual-pixel transparent -distort arc 120 \
\( +clone -background black -shadow 100x2+4+4 \
\) +swap -background white -compose over -layers merge +repage \
colorful_arc.jpg
«Неоновая вывеска».

bash$ convert -fill dodgerblue -background black -font Anaconda -pointsize 72 \
label:' I M Examples ' -bordercolor black -border 30x30 \
\( +clone -blur 0x25 -level 0%,50% \) \
-compose screen -composite neon_sign.gif
«Металлический» эффект.

bash$ convert -background none -pointsize 160 -font Candice label:" Anthony " \
-blur 0x5 -channel A -level 40%,60% +channel \
-blur 0x3 metallic_input.png

Анимация.


• -coalesce

Определяет кадр последовательности анимации GIF, чтобы сформировать анимацию по типу «киноленты».

Наложит каждое изображение в последовательности в соответствии с метаданными "-dispose", чтобы воспроизвести вид анимации в каждой точке последовательности. Все изображения должны быть одинакового размера, кадрам обязательно назначаются соответствующие настройки GIF.

bash$ convert rose: \( +clone -resize 10 \) -morph 10 \
-layers TrimBounds -set dispose previous -coalesce \
-background black -alpha remove \
-set delay '%[fx:(t>0&&t<n-1)?10:60]' \
-duplicate 1,-2-1 -loop 0 morph_resize_self.gif

• -delay ticks

• -delay ticks x ticks-per-second {<} {>}

После паузы отобразит следующее изображение в последовательности. Эта опция полезна для настройки анимации. Параметры «ticks/ticks-per-second» по умолчанию определяют, что между каждым показом последовательности изображений нет задержки. (По умолчанию установлено 100 «тиков» в секунду.)

bash$ convert -quiet -delay 1 plane.avi plane.gif

• -dispose method

Определит настройку удаления слоя GIF для создаваемых или считываемых изображений.

Метод удаления слоя описывает способ изменения каждого отображаемого изображения после завершения отображения текущего «кадра» анимации (после «задержки»).

Некоторые допустимые методы.

~ 0 (undefined), не указано.
~ 1 (none), наложит изображение следующего кадра.
~ 2 (background), зальет область кадра цветом фона.
~ 3 (previous), очистит изображение до наложения кадров.
Команда "+dispose" отключает данную настройку. Опция "-set dispose" позволит указать метод удаления слоев для изображений, находящихся в памяти.

bash$ convert -dispose none -delay 100 \
-size 100x100 xc:SkyBlue +antialias \
-fill DodgerBlue -draw 'circle 50,50 15,25' \
-page +5+10 balloon.gif \
-page +35+30 medical.gif \
-page +62+50 present.gif \
-page +10+55 shading.gif \
-loop 0 canvas_none.gif
bash$ convert -dispose none -delay 0 \
-size 100x100 xc:SkyBlue +antialias \
-fill DodgerBlue -draw 'circle 50,50 15,25' \
-dispose previous -delay 100 \
-page +5+10 balloon.gif \
-page +35+30 medical.gif \
-page +62+50 present.gif \
-page +10+55 shading.gif \
-loop 0 canvas_prev.gif
Вывести полный список методов удаления можно с помощью опции "-list dispose".


• -loop iterations

Добавит расширение цикла Netscape к анимации GIF.

Установите итерацию на ноль, чтобы повторять анимацию бесконечное количество раз.

bash$ convert rose: -duplicate 29 -virtual-pixel tile \
-distort SRT '0,0 1, 0, %[fx:w*t/n],%[fx:h*t/n]' \
-set delay 10 -loop 0 rose_diagonal_roll.gif

• -morph frames

Преобразует последовательность изображений.

И пиксели, и размер линейно интерполируются, чтобы создать видимость метаморфозы от одного изображения к другому в текущем списке. Изображения смешиваются, как в композитинге с опцией "-blend". Аргумент «frames» определяет, сколько изображений следует интерполировать.

bash$ convert rose: \( +clone -flip \) -morph 5 \
-set delay '%[fx:(t>0&&t<n-1)?10:240]' \
-duplicate 1,-2-1 rose_flip_anim.gif

• -pause seconds

Пауза на указанное количество секунд перед повторением анимации.


• -visual type

Анимирует изображения с помощью визуального класса.

Выберите из следующих классов: StaticGray, TrueColor, GrayScale, DirectColor, StaticColor (по умолчанию «PseudoColor»).

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

Шифрование и дешифрование.

Операторы "-encipher" и "-decipher" зашифруют изображения. Эти операторы плохо работают с изображениями в форматах JPEG, GIF, потому что возможны непредвиденные ошибки из-за особенностей встроенных алгоритмов сжатия.

bash$ convert message.gif -encipher pass_phrase.txt \
-depth 8 png24:message_hidden.png
(Зашифрованное изображение сохранено в 8-битном формате.)

Чтобы восстановить изображение, примените противоположный алгоритм.

bash$ convert message_hidden.png -decipher pass_phrase.txt message_restored.gif
Файл паролей может быть двоичным файлом. Допустимо шифровать изображение любым файлом.

bash$ convert message.gif -encipher rose.gif -depth 8 png24:message_binary.png

* Прим. Данные алгоритмы работоспособны только в среде IM.



• -decipher filename

Расшифрует и восстановит пиксели, ранее кодированные с помощью "-encipher". Получает кодовую фразу из файла, указанного опцией "filename".


• -encipher filename

Шифрование для последующего дешифрования с помощью "-decipher". Запишет кодовую фразу в файл, определенный параметром "filename".

• -authenticate password

Расшифрует PDF с паролем.

Используйте параметр, чтобы указать пароль (аргумент «password») для расшифровки PDF-файла, зашифрованного с помощью Microsoft Crypto API (MSC API). Шифрование MSC API не поддерживается.

Сравнение файлов изображений.


• -compare

Математически и визуально аннотирует разницу между изображением и его реконструкцией.

bash$ convert image.png reference.png -metric RMSE -compare \
difference.png
Чтобы получить значение метрики, используйте строковый формат «%[distort]».

bash$ convert image.png reference.png -metric RMSE -compare -format \
"%[distortion]" info:
Утилита «compare» позволяет сравнить два изображения для выявления разницы.

bash$ compare bag_frame1.gif bag_frame2.gif compare.gif
Здесь вы получаете бело-красное изображение, на котором есть «тень» от второго изображения. Картинка показывает, что существуют три измененные области.

bash$ compare bag_frame1.gif bag_frame2.gif x:
Чтобы не сохранять файл сравнений на диске, вы можете вывести его на дисплей.

bash$ compare bag_frame1.gif bag_frame2.gif miff:- | display
Допускается изменить цвет «различий» с красного на любой другой.

bash$ compare bag_frame1.gif bag_frame2.gif \
-highlight-color SeaGreen compare_color.gif
bash$ compare bag_frame1.gif bag_frame2.gif \
-highlight-color SeaGreen -lowlight-color PaleGreen \
compare_colors.gif
С помощью трех дополнительных параметров можно создать полутоновую маску измененных пикселей.

bash$ compare bag_frame1.gif bag_frame2.gif \
-compose Src -highlight-color White -lowlight-color Black \
compare_mask.gif
bash$ convert bag_frame1.gif bag_frame1.jpg
bash$ compare bag_frame1.gif bag_frame1.jpg compare_lossy_jpeg.gif
Даже если вы не видите никакой разницы между изображения в форматах GIF и JPEG, «compare» сообщает о большом количестве различий.

Если нужно игнорировать незначительные различия между двумя изображениями.

bash$ compare -metric AE -fuzz 5% \
bag_frame1.gif bag_frame1.jpg compare_fuzz.gif
Специальная установка "-metric AE" («Absolute Error») позволяет сообщать число фактического количества пикселей, которые были замаскированы с текущим коэффициентом «нечеткого совпадения».

bash$ composite bag_frame1.gif bag_frame1.jpg \
-compose difference difference_jpeg.gif
В то время как «compare» показывает, что JPEG создает много различий между изображениями, установка «difference» сообщает о незначительных различиях.

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

bash$ convert difference_jpeg.gif -auto-level difference_norm.gif
Здесь устанавливается порог и объединяется каждый из цветовых каналов, чтобы создать маску любого пикселя, влияющего на цвет.

bash$ convert bag_frame1.gif bag_frame2.gif -compose difference -composite \
-threhold 0 -separate -evaluate-sequence Add \
difference_mask.gif
Масшабирование по серой шкале, чтобы получить хорошее сравнительное изображение.

bash$ convert bag_frame1.gif bag_frame2.gif -compose difference -composite \
-colorspace Gray difference_gray.gif
Если важна мельчайшая разница между изображениями, следует разделить цветовые каналы разностного изображения.

bash$ convert bag_frame1.gif bag_frame2.gif -compose difference -composite \
-separate -evaluate-sequence add difference_add.gif
Полученные выше значения разницы известны как метрика «манхэттенского расстояния». Это расстояние между двумя цветами каждого изображения, когда вы ограничены ортогональным (или осевым) движением. Однако имейте в виду, что большие различия могут быть обрезаны (пиксели выжжены) при выходе за границы «Quantium Range», если только не используется HDRI-версия IM.

Альтернативые способы сравнения.

bash$ convert -delay 50 bag_frame1.gif bag_frame2.gif -loop 0 flicker_cmp.gif
bash$ convert \( anim1.gif -coalesce -append \) \
\( anim2.gif -coalesce -append \) miff:- | \
compare - miff:- |\
bash$ convert - -crop 160x120 +repage anim_compare.gif
Полутоновые изображения.

Чтобы проверить, является ли изображение черно-белым, следует посмотреть уровни насыщенности цвета. Это легко сделать преобразованием в цветовое пространство HCL и просмотром среднего и максимального значений того или иного канала (обычно зеленого).

bash$ convert rose: granite: -colorspace HCL \
-format '%M avg=%[fx:mean.g] peak=%[fx:maxima.g]\n' info:
Числа нормализованы в диапазоне от 0 до 1. Как вы можете видеть, «rose» очень красочная (в среднем 30%), с сильным пиком, приближающимся к 1. Наоборот, «granite» имеет очень низкую насыщенность (2%) и низкое пиковое значение.

Маленькие «средний» и «высокий» пики будут указывать на небольшие участки яркого цвета. Установка порогового значения для одного и того же канала может создать маску цветных областей изображения.


• -deconstruct

Покажет области, которые изменились между изображениями.

Дляпоследовательности изображений одинакового размера, например, созданных с помощью "-coalesce", заменит второе и последующие изображения меньшим изображением только той области, которая изменилась.

bash$ convert canvas_bgnd.gif -coalesce -deconstruct deconstruct_erase.gif
bash$ convert speed.gif -fuzz 5% -deconstruct speed_opt4.gif gif_anim_montage speed_opt4.gif speed_opt4_frames.gif
Полученную последовательность изображений можно использовать для оптимизации последовательности анимации, однако она не будет работать правильно для анимации GIF, когда части анимации могут перейти от непрозрачных к прозрачным.


• -highlight-color color

При сравнении изображений подчеркивает выбранным цветом различия в пикселях.


• -lowlight-color color

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


• -metric type

Выводит в STDERR различия между изображениями в соответствии с заданной метрикой «type».

~ AE, абсолютное количество ошибок.
~ DSSIM, индекс структурного несходства.
~ FUZZ, среднее цветовое расстояние.
~ MAE, средняя абсолютная ошибка (нормализованная), среднее расстояние ошибки канала.
~ MEPP, нормализованная средняя ошибка, нормализованная пиковая ошибка.
~ MSE, средний квадрат ошибки и квадрат ошибки канала.
~ NCC, взаимная нормализованная корреляция.
~ PAE, нормализованный абсолютный пик.
~ PHASH, перцепционный хеш для цветовых пространств sRGB и HCLp. Укажите альтернативное цветовое пространство с помощью "-define phash: colorspaces=colorspace, colorspace, ... "
~ PSNR, пиковое отношение сигнал/шум.
~ RMSE, нормализованный среднеквадратичный.
~ SSIM, индекс структурного сходства.
«MEPP» возвращает три разных метрики (MAE, нормализованные MAE, нормализованные PAE).

Метрики «SSIM» и «DSSIM» учитывают следующие определения: "-define compare:ssim-radius", "-define compare:ssim-sigma", "-define compare:ssim- k2".

Вывести полный список можно с помощью опции "-list metric".


• -subimage-search

Ищет фрагмент изображения.

Опция необходима для поиска по сравнению наиболее подходящего местоположения небольшого изображения (или фрагмента) на большом. Поиск даст два изображения (или два кадра). Первое - это изображение «разницы», второе - изображение «счета совпадений».

Самая яркая точка на этом изображении - местоположение с наилучшим соответствием.


* Обратите внимание, что это не обязательно идеальное совпадение.


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

Настройка алгоритмов сравнения.


• -connected-components connectivity

Определяет подключенные области на изображении, выбирая из 4 или 8 способов подключения.

Используйте "-define connected-components:verbose=true" для вывода статистики, связанной с каждой уникальной меткой.


• -dissimilarity-threshold value

Максимальное среднеквадратичное значение для соответствия фрагментов изображения. По умолчанию 0,2.


• -features distance

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

~ Angular Second Moment, Sum Entropy.
~ Contrast, Entropy.
~ Correlation, Difference Variance.
~ Sum of Squares Variance, Difference Entropy.
~ Inverse Difference Moment, Information Measure of Correlation 1.
~ Sum Average, Information Measure of Correlation 2.
~ Sum Variance, Maximum Correlation Coefficient.

• -similarity-threshold value

Минимальное среднеквадратичное значение для соответствия фрагментов изображения.

Если используется этот параметр, то поиск будет остановлен, как только будет найдено совпадение, метрика которого меньше или равна выбранному значению. В результате выходное изображение будет частично заполнено. Использование нулевого значения приведет к остановке поиска на первом найденном идеальном совпадении. Если параметр не установлен, поиск продолжится до завершения или будет ограничен параметром "-disimilarity-threshold".

Программы dcraw и dcraw_emu.

Программа dcraw, созданная Дейвом Кофином, одна из самых известных в мире цифровой фотографии. Программа лежит в основе LibRAW, UFRaw, digiKam, Photivo, RAWDrop, RawTherapee и других. Эта программа применяется как делегат в ImageMagick.

Здесь и далее я использовал следующие материалы.

Чтобы скорректировать текст-аннотацию, я пользовался замечаниями, предоставленным Аланом Гибсоном.

Также пособиями и комментариями от Гильермо Луйка.

В текст добавлены некоторые комментарии из статей сайта «На девять градусов ниже».

Добавлены замечания разработчиков LibRaw: Ильи Борга на сайте http://dpreview.com, многочисленные и полезные комментарии Алексея Тутубалина.

Оказались полезными сноски к исходному коду программы dcraw, сделанные разными авторами.

Здесь размещена очень важная для фотографа программа-библиотека LibRaw.

На этом сайте много интересных статей, в том числе от Алексея Тутубалина.

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

Так как библиотека LibRaw заимствует из dcraw многие функции и алгоритмы (поэтому ее можно считать «наследницей» или «преемницей» программы), был сделан расширенный комментарий в двух частях.

Первая часть описывает опции, общие для LibRaw и dcraw. Вторая часть посвящена исключительно особенностям LibRaw и входящим в пакет программам.


* Примечания. Несмотря на обширные аннотации, работа в командной строке dcraw сводится к нескольким простым командам. Также «по умолчанию» программа проявляет фотографии в простом полуавтоматическом режиме. Что ничуть не ухудшает качественную проявку фотографий, свойственную dcraw и dcraw_emu. Но если фотограф хочет получить очень хороший результат (например, подобный результату RawTherapee), то придется внимательно настраивать программу.


Оформление текста. Cохранены разделения справки по «темам», принятые во многих описаниях dcraw: основные опции, опции работы с цветом и цветовыми системами, опции интерполяции и т.д. Добавлены англоязычные аннотации, они могут оказаться полезными для самостоятельного изучения dcraw.

Основные опции dcraw.


• -v

• Verbose: print progress messages (repeated -v will add verbosity).

Выдает подробные сообщения в консоль. Эта опция очень полезна, если необходимо посмотреть дополнительную информацию о файле RAW.


• -c

• Для dcraw_emu [-c float-num]

• Set adjust maximum threshold (default 0.75).

Только для dcraw. Выводит проявленное изображение или изъятую из RAW-файла миниатюру в стандартный вывод («stdout»).


• -e

Извлекает созданное фотокамерой изображение-миниатюру из RAW-файла. На выходе файл JPEG или PPM, в зависимости от фотокамеры.


• -z

Изменяет время последнего доступа и модификации AVI, JPEG, TIFF или RAW-файла на время получения снимка (предполагается, что часы фотокамеры настроены по Гринвичу).


• -i

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


• -i -v

Идентифицирует файл и показывает метаданные без проявки.

Восстанавливающие опции.


• -I

Читает raw-файл из стандартного ввода («stdin»).


* С помощью команды "dcraw -E -4" можно получить файл PGM для анализа значений пикселей.



• -P <file>

• (Fix the dead pixels listed in this file.)

Файл для дальнейшего маскирования битых пикселей.

Читает список поврежденных пикселей из данного файла (вместо файла ".badpixels").

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

Файл позволяет маскировать дефектные пиксели конкретного фотоаппарата. Алгоритмы интерполяции критичны к «битым» пикселям, поэтому для качественной проявки необходимо удалить «dead pixels» из файла до интерполяции.

В dcraw плохие пиксели маскируются двумя способами.

~ 1. Необходимо указать с помощью опции "-P deadpixels.txt" путь к файлу с плохими пикселями. В этом случае следует предварительно подготовить текстовый файл с абсолютными координатами дефектных пикселей.
~ 2. Создать файл с именем «.badpixels». (dcraw автоматически ищет файл с именем ".badpixels".)
«Плохие пиксели» это «горячие» или «мертвые» пиксели, но в любом случае требуется, чтобы dcraw исключал их из процесса обработки, иначе на этапе интерполяции могут возникать неприятные артефакты.

«Плохой пиксель» может быть «мертвым» (не реагирующим на свет), или «горячим» - всегда записывающим в файл максимальное значение. Подобные пиксели искажают цвет.

Если заметны яркие цветные точки в тенях, переходящие из кадра в кадр - на сенсоре присутствует «горячий» пиксель. Но если вы видите темное пятно в яркой части кадра, у вас «мертвый» пиксель. (Если видны большие нечеткие области, у вас грязный сенсор.) Команда "dcraw -d -j -t 0" поможет при поиске «плохих» пикселей.


• -K <file>

• Subtract dark frame (16-bit raw PGM).

Вычитает темновой кадр из данных.

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


* Метод не будет эффективным, если камера работает с высоким значением ISO, так как подобный шум имеет случайную природу.


Сделайте снимок в RAW в полной темноте, например, закрыв объектив фотокамеры светонепроницаемой крышкой, затем выполните команду

bash$ dcraw -D -4 -j -t 0 file.raw

• -k <num>

• (Set the darkness level.)


* В камерах Никон «реальный» уровень шумов установлен как 0.


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

Для измерения уровня черного в Linux примените к темновому кадру следующую команду:

bash$ dcraw -D -4 -j -t 0 file.raw
Затем получите информацию о значениях пикселей с помощью команды:

bash$ pamsumm -min file.pgm
Утилита «pamsumm» находятся в пакете «Netpbm».

Для некоторых камер ошибочная установка уровня черного приведет к сильным искажениям цвета на фотографиях.


• -S <num>

• (Set the saturation level.)

(Для cRAW практический диапазон после деления на 4 будет 4150, но обрезается до 4095.)

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

bash$ dcraw -D -4 -j -c file.raw
Можно посмотрите результаты с помощью команды.

bash$ pamsumm -max file.pgm
Уровни черного и насыщения, установленные по умолчанию, обычно правильно рассчитываются программой. Однако уровень насыщения ("-S") привязан производителями сенсора к модели фотокамеры. Значение может быть некорректным для того или иного устройства или ISO, поэтому лучше внимательно настроить данный параметр.

Некоторые камеры по-разному насыщают каналы RGBG (это обычное явление для фотокамер Nikon), а некоторые матрицы фотоаппаратов не насыщаются при определенном значении ISO (например, сенсоры Fuji Super CCD R и Olympus).

В фотоаппаратах Nikon, как правило, данные обрезаются ниже уровня черного в файлах RAW. Dcraw всегда устанавливает уровень черного как 0 для подобных камер.

Также есть несколько приемов, позволяющих исправить проблему «пурпурных оттенков». Например, следует выбрать самую низкую доступную точку насыщения, чтобы любое более высокое значение считалось насыщенным при обработке файла dcraw. Поэтому блики («выбитые» пиксели) будут нейтральными, без оттенков того или иного цвета. Стратегия «нейтральных бликов» дает хорошие результаты с опцией "-H 2".


* Примечание. В dcraw минимальный уровень шума называется «черным». Уровень, при котором происходит насыщение, называется «максимумом» (или «насыщением»).


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

Чтобы узнать, какой уровень насыщения использует dcraw для конкретной фотокамеры при заданном ISO, сделайте кадр с небольшой расфокусировкой. «Проявите» этот файл RAW без интерполяции и масштабирования уровней с помощью следующей команды.

bash$ dcraw -v -D -T -4 test.raw
Найдите «выжженные» пиксели с помощью сторонней программы-анализатора (см. «Netpbm» http://netpbm.sourceforge.net/) или любого графического редактора.


• -n <num>

• (Set threshold for wavelet denoising.)

Применяет вейвлеты для подавления шума с сохранением деталей фотографии. Заметное эффектное пороговое значение будет лежать где-то в промежутке от 100 до 1000.


• -C <r b> (red_mag blue_mag)

• (Correct chromatic aberration.)

Опция корректирует сине-зелёные и пурпурные ореолы, возникающие из-за несовершенства оптической системы или матрицы. (Ореолы заметны преимущественно на краевых границах в фотографии). Коррекция выполняется перед интерполяцией и улучшает фотографии, но требует определенного времени. Алгоритм увеличивает значения красного и синего канала в заданное множителями число раз (обычно от 0.999 до 1.001) для устранения хроматической аберрации.


* Данные каналов можно посмотреть с помощью программы «exiftool» (https://exiftool.org/) из исходного RAW-файла. Программа выводит искомые значения как «RedBalance» и «BlueBalance».


Восстановление, множители и баланс белого.


• -H [0-9] (-H 2 default)

• Highlight mode (0=clip, 1=unclip, 2=blend, 3+=rebuild).

Опция "-H 0" обрезает все сильно засвеченные области до сплошного белого цвета (действие по умолчанию).

"-H 1" оставляет засвеченные области без изменений, но в различных оттенках розового. Позволяет выявить сохранившиеся детали.

"-H 2" смешивает обрезанные и не исправленные значения для постепенного перехода к белому цвету. «Выбитые» области будут нейтрально-серого цвета.

Опции "-H 3 (4-9)" восстанавливают засвеченные области. Небольшие значения подходят для белых областей в изображении, большие для цветных. Попробуйте "-H 5" в качестве компромиссного варианта. Если результат неудовлетворительный, примените настройку "-H 9", вырежьте цветные засвеченные области и наложите на фотографию, созданную командой "-H 3".

Параметр "-H" также влияет на баланс белого и множители (см. множители). Какие бы значения ни были установлены с помощью команды - "-r", множители рассчитывают только относительные пропорции между ними. Именно опция "-H" определяет, какие значения попадут в тот или иной диапазон.

Если множители больше или равны 1, то цветовые артефакты не возникают. Однако вырастает риск перегрузки каналов из-за перенасыщения.

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

Множители баланса белого, меньшие или равные 1 (опции "-H" от 2 до 9 в dcraw), могут привести к небольшому пустому промежутку в правом конце гистограммы фотоснимка. Это нормально и желательно, поскольку именно функция "-H 2" дает блики на фотографии без серьезной потери информации в светах.

Возможно, для «идеального» линейного преобразования следует использовать "-H 0", однако в данном случае могут исчезнуть детали в светах. Поэтому опция "-H 2" предпочтительнее в тех случаях, когда обрезка недопустима.

Поскольку баланс белого подразумевает масштабирование всех уровней с помощью линейного коэффициента, то фотография, проявленная с помощью "-H 0" (множители >= 1) выглядит ярче, чем изображение, созданное настройкой "-H 1" (множители <= 1).

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

Опция "-H 2" очень похожа на "-H 1", в данном случае множители будут меньше или равны 1. При настройке "-H 2" применяется небольшая нелинейная коррекция к светлым областям, чтобы вывести чистый (серый) цвет в передержанных участках.

Параметры восстановления "H 3-9" еще более сложны и заметно замедляют скорость декодирования. При значениях "-H" от 3 до 9 множители меньше или равны 1. Но цветовые значения для выбитых пикселей заимствуются из непрозрачных областей по соседству для заполнения засвеченных областей. Чем выше установлено значение параметра «H», тем меньше нейтральных (серых) тонов в выбитых пикселях.

Dcraw по умолчанию применяет настройку "-H 0".

Цветовые опции, баланс белого.

По умолчанию dcraw использует фиксированный баланс белого, полученный с помощью цветной тестовой таблицы, освещенной стандартной лампой D65.


• -w

• (Use camera white balance, if possible.)

В этом случае dcraw применит баланс белого, заданный камерой. Когда баланс белого не определен, выводится предупреждение и, если возможно, применяется другой метод расчета баланса белого.


* Баланс белого также задается настройкой множителей.



• -a

• (Average the whole image for white balance.)

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


• -A <x y w h>

• (Average a grey box for white balance.)

• -A отступ_слева X отступ_сверху X ширина X высота

Рассчитывает баланс белого по указанной прямоугольной области изображения. Чтобы узнать необходимые значения, выполните команду "dcraw -j -t 0" и выберите в графическом редакторе область с нейтрально-серым цветом.


• -r <r g b g>

• (Set custom white balance.)

• -r множ.0 множ.1 множ.2 множ.3

Опция позволяет задать пользовательский баланс белого. Значения для множителей могут быть взяты из вывода команды "dcraw -v -h".

Множители очень важны при работе с балансом белого. Dcraw применяет для алгоритма работы с балансом белого четыре умножающих коэффициента, что позволяет линейно масштабировать каждый из каналов RGBG матрицы Байера. Настройка баланса белого применяется до интерполяции (до «демозаики»). Коэффициенты второго (G0) и четвертого (G1) каналов одинаковые, поскольку соответствуют двум зеленым каналам. (Утверждение верно не для всех фотокамер.) Четыре значения линейно масштабируют все уровни RGBG в указанном порядке красный, зеленый0, синий, зеленый1.

Поскольку при расчете баланса белого все уровни пересчитываются, могут возникать нежелательные эффекты. Поэтому, если баланс белого не рассчитывается, следует указать множители как "-r 1 1 1 1" (линейный выход).

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

Множители рассчитываются в зависимости от трех установок:

~ а) "-w" баланс белого устанавливается в соответствии с настройками камерного баланса белого на момент съемки;
~ б) "-a" автоматический баланс белого, рассчитываемый dcraw по всему изображению;
~ в) "-r m1 m2 m3 m4" пользовательский баланс белого, настраиваемый изменением множителей.
Dcraw по умолчанию делает установку баланса белого, соответствующую освещению серой карты стандартным источником света D65. Применяемые «правильные» линейные значения будут отличаться от камеры к камере.

Допустимо самостоятельно указать коэффициенты, соответствующие каждой из установок баланса белого камеры. Потребуется сделать кадр с предустановленной («preset») цветовой температуры фотокамеры, затем с помощью опций "dcraw -v -w" посмотреть результаты.

Ниже показана таблица множителей камеры Canon 350D.

~ По умолчанию (D65): множители 2.395443 1.000000 1.253807
~ Лампа накаливания: множители 1.392498 1.000000 2.375114
~ Дневной свет: множители 2.132483 1.000000 1.480864
~ Флуоресцентная лампа: множители 1.783446 1.000000 1.997113
~ Фотовспышка: множители 2.429833 1.000000 1.284593
~ Облачно: множители 2.336605 1.000000 1.334642
Если цветовая температура рассчитывается в графическом редакторе, множители можно установить как "-r 1 1 1 1" (линейный выход). Затем настроить баланс белого по гистограмме. Однако алгоритмы интерполяции Байера оптимизированы для работы с уже сбалансированной фотографией (множители установлены до интерполяции).


• +M/-M

• (Use/don't use an embedded color matrix.)

Применяет (или не использует) цветовую матрицу из метаданных фотокамеры. По умолчанию установлено "+M", если выбрана опция "-w" (камерный баланс белого). В противном случае настройка определена как "-M". Опция влияет только на камеры «Olympus», «Leaf» и «Phase One».

Цветовое пространство.


• -o [0-8]

• Output colorspace (raw, sRGB, Adobe, Wide, ProPhoto, XYZ, ACES, DCI-P3, Rec2020)

Опция позволяет выбрать выходное цветовое пространство.

~ 0, вывод в собственном цветовом пространстве камеры (уникально для каждой фотокамеры).
~ 1, sRGB D65 (по умолчанию).
~ 2, Adobe RGB (1998) D65.
~ 3, Wide Gamut RGB D65.
~ 4, Kodak ProPhoto RGB D65.
~ 5, XYZ.
~ 6, ACES.
Опции, добавляемые программой dcraw_emu.

~ 7, DCI-P3.
~ 8, Rec2020.
Преобразование в цветовое пространство (матричное преобразование уровней изображения) в некоторых случаях нежелательно, например, если необходим линейный выходной файл.


* Чтобы отказаться от всех преобразований, следует применить настройку "-o 0".


После декодирования RAW-файла, как правило, для ретуширования и коррекции используется графический редактор. Но если после декодирования в файле установлено неизвестное графическому редактору «цветовое пространство», придется предварительно указать необходимые параметры и настройки.

Настройку "-o 1" (sRGB) нельзя считать «идеальной», но она автоматически и безошибочно «определяется» почти всеми графическими редакторами (в том числе GIMP и Photoshop). Также вы можете использовать сторонние программы, например, «tifficc» или «cctiff» из пакета «ArgyllCMS» в командной строке, или открыть изображение в редакторе изображений «Cinepaint», чтобы назначить желаемый профиль.


• -o file

• (Output ICC profile.)

Позволяет задать выходное цветовое пространство через профиль. Чтобы посмотреть, как dcraw создает профили, сначала установите, например, опцию "-o 4" (ProPhotoRGB), а затем используйте программу «tifficc» для извлечения и сохранения на диск профиля, внедренного в изображение. Можно проверить извлеченный профиль с помощью программы «iccdump» пакета «ArgyllCMS» или «ICC Profile Inspector». (Это программа для Windows, но она также работает в Wine.)

Примечание. В выходных профилях dcraw используется D65. Для белого цвета D65 даются три значения в шестнадцатеричном виде: 0,95045, 1,00000, 1,08905.


• -p file

• Camera input profile (use "embed" for embedded profile).

Применяет профиль ICC, внедренный в RAW-файл (если он существует).


• -o file

Используется профиль ICC для преобразования цветового пространства фотокамеры. Зависит от версии dcraw.

В идеальном случае следует применить профиль фотоаппарата, созданный после калибровки. Таким образом, декодирование RAW можно будет осуществлять без какого-либо управления цветовым пространством (аналогично "-o 0"), но загружая профили камеры.

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

1. Если доступен профиль камеры, то допустимо декодировать файл без пересчета цвета в dcraw с помощью команды "-o 0" (цветовое пространство камеры). Затем следует внедрить в изображение профиль, чтобы графические редакторы правильно распознавали цветовое пространство.

2. Выполнить преобразование в целевое цветовое пространство в dcraw: в этом случае следует указать значении опции "-o" от 1 до 5 (для dcraw) или от 0 до 8 (для LibRaw).

3. Указать с помощью опции "-o file.icc" путь к файлу ICC (например, Adobe98.icc, AppleRGB.icc, CIERGB.icc, MelissaRGB.icc, ProPhoto.icc, WideGamut.icc из пакета Adobe). Возможно, этот вариант будет оптимальным.

Опции интерполяции.


• -d

Выводит данные RAW как изображение в градациях серого без интерполяции. Если указана опция "-d" интерполяция не выполняется, однако настраиваются уровни черного и насыщенность, выводится 16-битное изображение.

Можно получить линеаризованные данные (для вычитания черной точки) без интерполяции в 16-битном режиме с помощью следующей команды.

bash$ dcraw -d -r 1 1 1 1
Это позволяет работать с гистограммой для расчета в стопах экспозиции или чтобы изучить матрицу Байера. Например, чтобы создать файл с «битыми» пикселями.

Развертка dcraw в 16 бит линейна, гамма определена как 1.0.


• -D

Опция аналогична предыдущей, но без усиления яркости каналов. Извлекает изображение без интерполяции и масштабирования. Полученное изображение соответствует raw-файлу.


• -E

В этом случае маскированные пиксели не обрезаются.


• -h

• Half-size color image (twice as fast as "-q 0").

Быстрое преобразование. Выдает цветное изображение, уменьшенное вдвое. Алгоритм в два раза быстрее, чем "-q 0".


• -q

• 0 - linear, 1 - VNG, 2 - PPG, 3 - AHD, 4 - DCB 11 - DHT, 12 - AAHD

Методы интерполяции, возможны следующие значения, общие для dcraw и dcraw_emu:

~ "-q 0", быстрая низкокачественная билинейная интерполяция;
~ "-q 1", интерполяция VNG;
~ "-q 2", интерполяция PPG;
~ "-q 3", интерполяция AHD (по умолчанию).
Только для программы dcraw_emu.

~ "-q 4", DCB.
~ "-q 11", DHT.
~ "-q 12", AAHD.
Чем выше значение "-q", тем сложнее алгоритм, возрастают затраты на преобразование. Как кажется, "AHD" оптимальный алгоритм, однако эффективность того или иного метода интерполяции зависит от фотокамеры. Например, для некоторых камер Fuji метод "-q 2" (PPG) даст лучшие результаты, чем алгоритм AHD.

Программа-библиотека "LibRaw" может работать со многими алгоритмами интерполяции, но не все используются по умолчанию. Это связано как с лицензионными ограничениями, так и с политикой разработчиков. Тем не менее существует возможность использовать, после самостоятельной компиляции, какие-то специфические для той или иной программы-декодера алгоритмы. Впрочем, как показывает опыт пользователей, вряд ли те или иные методы вызовут обязательный «вау-эффект».

О некоторых особенностях алгоритмов интерполяции.

~ Интерполяция "AMaZE". Популярный алгоритм, встроенный в программу RawTherapee.
~ Интерполяция "HPHD" работает быстрее, чем "AMaZE".
~ Метод "EAHD" медленнее, чем другие алгоритмы, так как использует всего одно ядро даже на многопроцессорных компьютерах.
~ Метод "VNG-4" считается предпочтительным алгоритмом для фотокамер «Olympus», удаляет специфические для производителя артефакты.
~ Алгоритм "DCB" похож на "AMaZE", но тонко настраивается.
Те или иные алгоритмы интерполяции обладают как преимуществами, так и недостатками.

Так, метод «двойной демозаики» "AMaZE+VNG4" преобразует области с высокой и низкой контрастностью, но для областей используются разные алгоритмы. Поскольку одни алгоритмы лучше обрабатывают мелкие детали (высокий контраст), а другие - крупные. «Двойная демозаика» позволяет качественно обработать снимок. Однако «двойная демозаика» нагружает процессор, что сильно замедляет конвертирование.

Считается, что "LMMSE" и "IGV" следует применять при обработке фотографий с высоким ISO, хотя в иных случаях лучше придерживаться "AMaZE". А так как алгоритм "AMaZE" дает ложные цвета, потребуется подавление цветового шума. Количество итераций шумоподавления следует ограничить, поскольку трудно оценить, какой «ущерб» наносит каждая итерация.

Сильная цифровая фильтрация всегда «портит» сигнал. Но алгоритм "IGV" почти не добавляет цветовые шумы. Метод "DCB" имеет собственные настройки для «улучшения цвета» и даже две итерации подавления шума значительно улучшают результаты.

Также те или иные алгоритмы интерполяции дадут разные эффекты при обработке фотографий с «плохими» пикселями.

Алгоритм "AMaZE" неплохо справится с горячими пикселями, но две итерации "DCB" распространяют дефекты, вызванные ошибками матрицы, на 14 пикселей ячейки (причем будет заметна горизонтальная и вертикальная симметрия). Метод "AHD" также имеет проблемы при работе с «плохими» пикселями.

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


• -f

• (Interpolate RGGB as four colors.)

Интерполирует RGGB как четыре цвета. Применяется, если на фотографии видны искажения в виде ложной сетки 2x2 (интерполяция "VNG"), или узор-лабиринт (интерполяция "AHD").


• -m <num>

• (Apply a 3x3 median filter to R-G and B-G)

Подчищает цветовые артефакты (точечные искажения цвета) с помощью многократного медианного фильтра 3x3, применяемого к цветовым каналам R-G и B-G.

Возможно, значение "-m 15" - минимум, необходимый для устранения большого размытия цветности. Однако "-m 10" справится, если необходимо ускорить процесс.

Ложные цвета (спеклы, крапинки) возникают из-за интерполяции, если на фотографии присутствуют тонкие детали. Алгоритм подавления ложных цветов похож на фильтр сглаживания цветов. Но яркость не изменяется.

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


* Фильтр сглаживания ("anti-aliasing filter", AAF) - фильтр, используемый перед устройством выборки сигнала (сенсор камеры) для ограничения полосы пропускания в необходимом диапазоне.


Опции вывода


* По умолчанию, dcraw записывает данные как 8-битные PGM/PPM/PAM файлы с гамма-кривой BT.709, уровнем белого, базирующемся на гистограмме, и без внедрения метаданных.



• -W

• (Don't automatically brighten the image.)

Запрещает применять автоматическую коррекцию яркости. Использует фиксированный уровень белого, гистограмма изображения игнорируется. Без опции "-W" гистограмма вычисляется, а фотография имеет насыщенность около 1% пикселей (данные обрезаются).


• -b <num>

• Adjust brightness (default = 1.0).

Делит уровень яркости на указанное число (1.0 по умолчанию). Все каналы умножаются на это число после интерполяции, но в линейном пространстве RGB.

Если установлено автоматическое увеличение яркости (опция "-W" отключена), некоторые пиксели уже достигнут насыщения, поэтому применение "-b" приведет к обрезке.


• -g pow ts

• Set gamma curve to gamma pow and toe slope ts (default = 2.222 4.5).

Настройка гамма кривой, по умолчанию BT.709 ("-g 2.222 4.5"). Если вы предпочитаете sRGB гамму, воспользуйтесь "-g 2.4 12.92". Для "линейной" гаммы установите наклон кривой на 0.

Некоторые типичные значения:

~ "-g 1 1", линейная 1,0 гамма (по умолчанию, если используется опция "-4");
~ "-g 2.2 0", гамма 2,2 (Adobe RGB);
~ "-g 1.8 0", гамма 1,8 (ProPhoto RGB);
~ "-g 2.4 12,9", гамма "sRGB";
~ "-g 2.222 4.5", гамма спецификации BT.709 (по умолчанию, если "-4" не используется).

* Гамма-кривая не применяется к изображению до тех пор, пока изображение не будет записано на диск.



* На странице руководства dcraw говорится, что для вывода линейной гаммы потребуется настроить гамму как "-g 1 1". Возможно, настройка "-g 1 0" дает аналогичный результат.



• B6 -6

• (Write 16-bit output)

Записывает 16-битное изображение вместо 8-битного.


• B4 -4

• Linear 16-bit, same as -6 -W -g 1 1

Записывает линейное 16-битное изображение, что аналогично команде "dcraw -6 -W -g 1 1". Параметр также связан с другими опциями.

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

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

Линейные изображения необходимы, если фотограф стремится получить технически максимально качественную фотографию. С линейным изображением легче производить определенные преобразования и коррекции. В частности, избежать «обрезки» или «квантового округления» пикселей при работе со многими алгоритмами.


• -T

• (Write TIFF instead of PPM.)

Выводит файл формата TIFF (с метаданными) вместо файла PGM/PPM/PAM.


• dcraw_emu -t [0-7]

• Flip image (0=none, 3=180, 5=90CCW, 6=90CW).

• -t [0-7,90,180,270]

«Поворачивает» фотографию. По умолчанию dcraw применяет поворот, заданный фотокамерой. Опция "-t 0" отключает все виды вращения.


• -j

• (Don't stretch or rotate raw pixels.)

Для фотокамер «Fuji Super CCD» покажет фотографию, повернутую на 45 градусов. Если пиксели «не квадратные», не растягивает изображение, сохраняя оригинальные пропорции.


• -s [0..N-1]

• (Select one raw image from input file.)

• -s [0..N-1] или -s all

Если файл содержит N необработанных изображений, выбирает одну или все («all») миниатюры для расшифровки. Например, фотокамеры «Fuji Super CCD SR» создает второе изображение, но недоэкспонированное на 4 стопа, что позволяет сохранить детали в засвеченных областях.

Некоторые опции dcraw_emu.


• -G

Включает фильтр «green_matching»: выравнивание зеленых каналов для матриц, где каналы различаются.


* Некоторые фотокамеры (например, «Olympus», «Panasonic», «Canon 7D») имеют разные светофильтры для зеленых субпикселей матрицы Байера.



• -B <x y w h>

Обрезает («cropping») выходное изображение до прямоугольника с верхним левым углом в точке «x,y» шириной «w» и высотой «h». Координаты и размеры определяются до поворота изображения (если применяется поворот).


• -F

Файловый вывод (FILE I/O) вместо streambuf API.


• -Z <suf>

Правила генерации выходного имени файла:

~ а) .suf => добавит .suf (окончание) к имени ввода, сохранив существующий суффикс;
~ б) suf => заменит последнее расширение имени входного файла;
~ в) - => вывод потока в консоль.

• -timing

Включает «тайминг» (время работы) этапов обработки.


• -fbdd N

«FBDD noise reduction», определяет степень подавления шума в режиме интерполяции "DCB". FBDD («Fake Before Demosaicing Denoising») - алгоритм, разработанный автором демозаики "DCB" (Jacek Gózdz).

Параметры:

~ 0 - отключить шумоподавление FBDD (по умолчанию);
~ 1 - легкое шумоподавление FBDD;
~ 2 - полное шумоподавление.

• -dcbi N

Устанавливает количество дополнительных итераций алгоритма "DCB" (только для опции "-q 4"). По умолчанию 0, нет дополнительных итераций.


• -dcbe

Улучшение цвета DCB. Включает режим «DCB color enhance» (только для "-q 4").


• -aexpo <e p>

Проводит экспокоррекцию (до интерполяции); «e» - величина экспокоррекции (по линейной шкале), диапазон от 0.25 (-2 стопа) до 8 (+3 стопа); «p» - степень предохранения в светлой области при положительной экспокоррекции, диапазон от 0.0 (линейный сдвиг данных с клиппингом) до 1.0 (без дополнительной обрезки).


• -mmap

Разрешает использование интерфейса open_buffer(), в который передается mmap()-ed файл (только Unix OS).


• -mem

Использует буфер памяти вместо обычного файлового вывода (FILE I/O). Входной файл читается в буфер в памяти и декодируется.


• -disars

Отключает библиотеку «RawSpeed». Библиотека «RawSpeed», входящая в состав LibRaw, позволяет ускорить распаковку некоторых поддерживаемых RAW-форматов.


• -dsrawrgb1

Отключает преобразование YCbCr в RGB для sRAW (интерполяция Cb/Cr включена).


• -dsrawrgb2

Отключает преобразование YCbCr в RGB для sRAW (интерполяция Cb/Cr отключена).


• -dngsdk

Использует Adobe DNG SDK для декодирования "DNG".


• -dngflags N

Установит параметры интерполяции "DNG" на значение N.


• -doutputflags N

Установит для params.output_flags значение N.


• -eeci

Разрешает режим «EECI refine» (только для методов "VCD/AHD" с заданной опцией "-q 8").


• -esmed N

Количество проходов специального фильтра («edge-sensitive median filter») для интерполяции "VCD+AHD".

Для режима интерполяции "VCD+AHD" применяется уникальный медианный фильтр, при этом аналогичный фильтр dcraw отключается. Фильтр требуется для подавления цветового шума. Фильтр размывает цвет, оставляя нетронутой яркостную составляющую.


• -acae r b

«Chromatic aberrations suppressions» (RT), - режим исправления хроматических аберраций, заимствованный из «RawTherapee» (параметры ca_correc и cared+cablue). Применяется в функции dcraw_process после scale_colors. «Red» и «Blue» каналы изменяются в диапазоне -4..+4 (0 - отсутствие коррекций). Автор Emil Martinec. Параметры r(«Red») и b(«Blue») определяют величину коррекции по красной и синей осям. Параметры обязательны, для автоматической коррекции следует указать "-acae 0 0".


• -aline l

«Line noise reduction», подавление «полосатости» («banding») с помощью DCT фильтрации. Разработчик Emil Martinec. Параметры: l - степень подавления шума, диапазон значений 0.001-0.02, типичное значение 0.005.


• -aclean l c

«Luminance/Color noise reduction», подавление яркостного и цветового шума (импульсного и высокочастотного). Разработчик Emil Martinec.

Разрешает подавление импульсного шума, параметры:

~ l - степень подавления яркостного («luminocity») шума;
~ c - подавление цветового («chrominance») шума.
Разумный диапазон значений обоих параметров 0.005-0.05, типичное значение 0.01.


• -agreen g

Разрешает режим выравнивания зеленых каналов на равномерных поверхностях; g - степень чувствительности алгоритма, диапазон значений 0.01-0.1, типичное значение 0.03.

Другие программы пакета LibRaw.

Некоторые скомпилированные программы библиотеки LibRaw.

Программы входят в пакет и размещаются, как правило, в директории /usr/lib/libraw (для дистрибутива Debian).

Например, утилита "multirender_test" - простая программа, демонстрирующая множественную обработку.


• Утилита half_mt

Эмулятор функции "dcraw -h". Утилита принимает следующие ключи:

~ "-a" автоматический баланс белого, рассчитываемый по всему изображению;
~ "-w" применяет баланс белого, установленный фотокамерой;
~ "-T" сохраняет файлы формата TIFF;
~ "-J n" количество параллельных потоков, запускаемых для обработки изображений.
Последняя опция на мультипроцессорных машинах даст существенный выигрыш в скорости при массовой обработке. На системах Win32 собирается из исходного файла half_mt_win32.c, так как работа с потоками Windows OS имеет свои особенности.


• Утилита mem_image

Пример использования функций dcraw_make_mem_image и dcraw_make_mem_thumb: распаковка изображений и preview() в память с последующей записью в выходном формате PPM (JPEG для миниатюры «thumbnail»). Поддерживаются ключи "-4", "-1", "-e", "-h". Результат работы идентичен результатам dcraw с необходимыми ключами.


• Утилита unprocessed_raw

Извлечение данных из raw-файла без вычитания уровня черного имаскирования черных пикселей (на тех камерах, где возможно маскирование). Для фотокамер с «черной рамкой» RAW, она включается в данные после декодирования.

Ключи командной строки:

~ "-q", не выводить текстовую справку о размерах файла;
~ "-A", автоматическое масштабирование данных в целое число раз;
~ "-g", применить гамму (2.2);
~ "-N", не накладывать тоновую кривую;
~ "-B", вычитать уровни черного из данных;
~ "-M", добавить маскированную рамку к результирующему изображению.

• Утилита 4channnels

Программа 4channnels извлекает данные из RAW-файла и сохраняет их в четырех 16-битных файлах формата TIFF (как «grayscale»).

Ключи командной строки:

~ "-s N", выбрать N-е изображение (для файлов с несколькими изображениями);
~ "-g", применить гамма-коррекцию (2.2) изображения;
~ "-A", автоматическое масштабирование значений в целое число раз;
~ "-B", отключить вычитание уровня черного;
~ "-N", не применять тоновую кривую для RAW-файла.

Примеры.

Программа Dcraw почти всегда предлагает оптимальные для большинства пользователей «настройки по умолчанию». Однако «оптимальные» настройки нельзя применять в тех случаях, когда фотограф хочет получить очень качественный результат.

Так, dcraw предлагает следующий вариант проявки фотографий «по умолчанию»: Интерполяция AHD, гамма BT.709 (-g 2.222 4.5), цветовое пространство sRGB D65. Баланс белого можно установить камерным или автоматическим (опции "-w" и "-a").

Пример.

~ -o 1 # sRGB D65
~ -a # автоматический баланс белого
~ -g 2.4 12.92 # sRGB гамма
bash$ dcraw -a -q 3 -g 2.4 12.92 -H 2 -o 1 FILE.raw
Теперь мы можем применить к выходному файлу (в формате PPM) простейшую обработку.

bash$ convert FILE.pgm -set colorspace sRGB -monitor -quality 00 -format png FILE.png
Во многих случаях такие настройки позволят получить относительно приемлемый для размещения в Интернете результат. Но вряд ли удовлетворят требовательного фотографа.

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

Данные RGB с матрицы без обработки, но с интерполяцией можно получить следующей командной.

bash$ dcraw -r 1 1 1 1 -o 0 -H 0 -T -6 -W -g 1 1 RAW
Еще один возможный вариант.

bash$ dcraw -o 0 -r 1 1 1 1 -4 -T RAW
Итоговое изображение формата TIFF можно перенаправить в потоковый графический редактор.

Если не использовать опцию "-W" («автоматически сделать изображение ярче»), результат похож на "-auto-level" IM, но только растягивается в сторону белого.

Без «автоматического увеличения яркости» максимальное значение изображения было бы, например, 16383.

bash$ dcraw -v -o 0 -W -6 -r 1 1 1 1 -g 1 0 -D -d -T -O RAW
Пример: данные RGB с матрицы без обработки, вывод данных сенсора.

bash$ dcraw -r 1 1 1 1 -o 0 -H 0 -T -6 -W -g 1 1 RAW

Примечания.

IM включен почти во все дистрибутивы , так как этот программный пакет используется со множеством программ. Например, для поддержки популярной программы Calibre (чтение, конвертация электронных книг) или как набор библиотечных графических функций PHP.

Однако ImageMagick «по умолчанию» компилируется как версия Q16, а для взыскательного фотографа может потребоваться HDRI версия пакета.

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

Процесс компиляции несложен.

Сначала потребуется посмотреть необходимые зависимости.

:: bash$ sudo apt-get -s build-dep imagemagick
Список выглядит устрашающим, но можно выбрать только необходимые пакеты.

Как пример, привожу работоспособный список: libbz2-dev, libcairo2-dev, libdjvulibre-dev, libfftw3-dev, libfribidi-dev, libgdk-pixbuf2.0-dev, libgraphite2-dev, libharfbuzz-dev, libheif-dev, libilmbase-dev, libjbig-dev, liblcms2-dev, liblqr-1-0-dev, liblzma-dev, libopenexr-dev, libopenjp2-7-dev, libpango1.0-dev, libperl-dev, libpixman-1-dev, librsvg2-dev, libtiff-dev, libwebp-dev, libwmf-dev, libxcb-render0-dev, libxcb-shm0-dev, libxext-dev, libxft-dev, libxml2-dev, libxrender-dev, x11proto-xext-dev.

:: bash$ ./configure --enable-hdri (Или даже так --with-quantum-depth=32)
Компиляция не занимает много времени и не вызывает каких-либо сложностей, но может потребоваться некоторая настройка.

:: bash$ make -j4
:: bash$ sudo checkinstall -D --install=yes --fstrans=no --pakdir "$HOME/imagemagick_build" \
--pkgname imagemagick --backup=no --deldoc=yes --deldesc=yes --delspec=yes --default \
--pkgversion "7.0.10-14"
:: bash$ make distclean && sudo ldconfig

Лицензия IM.

License

Terms and Conditions for Use, Reproduction, and Distribution

• How to Apply the License to your Work

Before we get to the text of the license, lets just review what the license says in simple terms:

It allows you to:

~ freely download and use ImageMagick software, in whole or in part, for personal, company internal, or commercial purposes;
~ use ImageMagick software in packages or distributions that you create;
~ link against a library under a different license;
~ link code under a different license against a library under this license;
~ merge code into a work under a different license;
~ extend patent grants to any code using code under this license;
~ and extend patent protection.
It forbids you to:

~ redistribute any piece of ImageMagick-originated software without proper attribution;
~ use any marks owned by ImageMagick Studio LLC in any way that might state or imply that ImageMagick Studio LLC endorses your distribution;
~ use any marks owned by ImageMagick Studio LLC in any way that might state or imply that you created the ImageMagick software in question.
It requires you to:

~ include a copy of the license in any redistribution you may make that includes ImageMagick software;
~ provide clear attribution to ImageMagick Studio LLC for any distributions that include ImageMagick software.
It does not require you to:

~ include the source of the ImageMagick software itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it;
~ submit changes that you make to the software back to the ImageMagick Studio LLC (though such feedback is encouraged).
A few other clarifications include:

~ ImageMagick is freely available without charge;
~ you may include ImageMagick on any digital media as long as you comply with the terms of the license;
~ you can give modified code away for free or sell it under the terms of the ImageMagick license or distribute the result under a different license, but you need to acknowledge the use of the ImageMagick software;
~ the license is compatible with the GPL V3.
~ when exporting the ImageMagick software, review its export classification.
Terms and Conditions for Use, Reproduction, and Distribution

The legally binding and authoritative terms and conditions for use, reproduction, and distribution of ImageMagick follow:

Copyright © 1999-2021 ImageMagick Studio LLC, a non-profit organization dedicated to making software imaging solutions freely available.

1. Definitions.

License shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

Legal Entity shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, control means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

You (or Your) shall mean an individual or Legal Entity exercising permissions granted by this License.

Source form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

Object form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

Work shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

Derivative Works shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

Contribution shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as Not a Contribution.

Contributor shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non- exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross- claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

~ You must give any other recipients of the Work or Derivative Works a copy of this License; and
~ You must cause any modified files to carry prominent notices stating that You changed the files; and
~ You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
~ If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
~ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

How to Apply the License to your Work

To apply the ImageMagick License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information (don't include the brackets). The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the ImageMagick License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


Оглавление

  • Оглавление.
  • Введение.
  • Некоторые важные ссылки.
  • Работа с командной строкой.
  • Команды-утилиты программного пакета ImageMagick.
  • Контроль качества изображений.
  • Формат HDRI.
  • Разрешение изображения.
  • Отладка, оптимизация, вывод информации.
  • Печать изображений.
  • Системные настройки X Windows.
  • Ограничения, синхронизация, разделяемая память.
  • Битность, сжатие, формат изображений.
  • Распространенные форматы.
  • Связанные форматы вывода JPEG.
  • PNG и виртуальный холст.
  • Специальные форматы файлов.
  • Профили и качество изображения.
  • Изменение цветового пространства через профили.
  • Метаданные EXIF.
  • Качество изображения.
  • Свойства изображений.
  • Метки, имя.
  • Интерполяция, виртуальные пиксели.
  • Простые методы интерполяции.
  • Свертка, сдвиг.
  • Пороговая настройка.
  • Другие функции.
  • Автоматический поворот фотографий.
  • Уровни каналов.
  • Таблицы цветов LUT, Hald.
  • Предопределенные фильтры.
  • Гамма-коррекция изображений.
  • Корректировка с помощью гистограммы.
  • Настройка яркости, контраста.
  • Регулировка уровней каналов.
  • Баланс белого, точки цветности.
  • Цветовая дискретизация.
  • Введение в понижение цветности.
  • Раскрашивание, колоризация, цветокоррекция.
  • Цветовое пространство.
  • Черно-белое и монохромное изображение.
  • Слои.
  • Композиция.
  • Методы композиции.
  • Оператор и утилита composite.
  • Методы Дафф-Портера.
  • Специальные методы композиции.
  • Методы эффекта картирования изображений.
  • Математические методы компоновки.
  • Методы композиции освещения.
  • Копирование каналов.
  • Размытие, сглаживание.
  • Резкость, усиление резкости.
  • Удаление шумов, шумоподавление.
  • Добавление шума.
  • Оператор filter.
  • Особенности фильтров масштабирования.
  • Интерполированные фильтры.
  • Фильтры размытия по Гауссу.
  • Другие фильтры типа Гаусса.
  • Профиль изображения.
  • Фильтр размытия: экспертный контроль.
  • Усиленный фильтр Гаусса.
  • Оконные фильтры Sinc и Jinc.
  • Различные оконные фильтры.
  • Фильтры Ланцоша, Катмулла-Рома, Лагранжа.
  • Кубические фильтры.
  • Фильтр Митчелла-Нетравали.
  • Экспертные настройки.
  • Цилиндрические фильтры Jinc.
  • Замыкание фильтров и операторов искажения.
  • Цилиндрический фильтр Ланцоша.
  • Экспертные элементы управления фильтрами.
  • Пиксельная карта.
  • Виртуальный холст.
  • Повороты, смещения изображения.
  • Размер изображения.
  • Методы изменения размера.
  • Изменение размера с гамма-коррекцией.
  • Изменение размера в цветовом пространстве LAB.
  • Другие операторы масштабирования.
  • Биннинг - уменьшение цифрового шума.
  • Масштабирование изображения.
  • Выравнивание, искажение.
  • Искажения с использованием контрольных точек.
  • Cуперсэмплинг или передискретизация.
  • Изменение размера изображений с помощью искажения.
  • Методы искажения.
  • Обрезка изображений.
  • Математические функции.
  • Выражения FX.
  • Язык выражений FX.
  • Морфология.
  • Масштабирование ядра Convolve.
  • Нормализация ядра (автоматическое масштабирование).
  • Размытие изображений (фильтрация нижних частот).
  • Свертки с обнаружением краев (фильтрация верхних частот).
  • Методы морфологии.
  • Базовые встроенные ядра формы.
  • Пользовательские ядра DIY.
  • Основные методы морфологии.
  • Методы разностной морфологии.
  • Краевые эффекты.
  • Клонирование и дублирование изображений.
  • Объединение, работа с последовательностями и списками.
  • Индексы, позиция в списках.
  • Прозрачность, альфа-канал.
  • Маскирование.
  • Графические примитивы.
  • Настройки фона, цвета, геометрии графических примитивов.
  • Рамки и фреймы.
  • Добавление аннотаций к изображению.
  • Работа со шрифтами: настройка шрифтов и рендеринг.
  • Эффекты составных шрифтов.
  • Анимация.
  • Шифрование и дешифрование.
  • Сравнение файлов изображений.
  • Настройка алгоритмов сравнения.
  • Программы dcraw и dcraw_emu.
  • Основные опции dcraw.
  • Восстанавливающие опции.
  • Восстановление, множители и баланс белого.
  • Цветовые опции, баланс белого.
  • Цветовое пространство.
  • Опции интерполяции.
  • О некоторых особенностях алгоритмов интерполяции.
  • Опции вывода
  • Некоторые опции dcraw_emu.
  • Другие программы пакета LibRaw.
  • Примеры.
  • Примечания.
  • Лицензия IM.