ImageMagick разложить на множители

Известно, что во всех графических редакторах изображение можно представить в различных цветовых пространствах. Все наверное слышали, что такое RGB. Это проcтранство, где результирующий пиксел является комбинацией красного, зеленого и синего цветов различной интенсивности. Ну это типа, как картриджи в принтере. С помощью банок с содержащих разноцветные чернила мы получаем на бумаге то что нам нужно, посредством их напыления в нужных пропорциях. Кроме цветового пространства RGB есть еще много других, таких как CMYK, LAB, HSB). Во всех этих пространствах исходную картинку можно разложить на 3 (RGB, LAB, HSB) или 4 (CMYK) составляющие. Причем вовсе не обязательно, что 4 лучше 3. Просто используются они для разных целей. Возникает вопрос, зачем раскладывать исходное изображение на множители (цветовые слои). Применений данному способу полно. Взять ту же чистку фото от шума где оригинал раскидали на составляющие, поблюрили их (фильтр Blur, размытие), а затем снова собрали, но получив изображение с меньшим уровнем шума. Или, например, перевод изображения из цветного в черно-белое, там тоже нужно деление на слои. А расширенная цветокоррекция, когда слои складывают и вычитают друг из дружки по 20 раз. Да полно применений. Поэтому каждый уважающий себя графический редактор должен уметь разложить изображение на составляющий, а затем сложить его обратно, при этом нигде ничего не потеряв. Давайте посмотрим как с эти справится ImageMagick.

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

convert tulip.png -colorspace RGB -separate separate_RGB_%d.png

После выполнения в текущей папке появляются три файла:

tulip = separate_LAB_0 + separate_LAB_1 + separate_LAB_2
R G B

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

Если после этого выполнить команду:

convert separate_LAB_?.png -set colorspace Lab -combine -colorspace sRGB combined.png

То 3 файла сольются в один и на выходе мы получим новое изображение (combined.png) полностью идентичное первоначальному о чем и говорит команда compare:

compare metric RMSE tulip.png combined.png NULL:
192.11 (0.00293142)

Как видите, по метрике RMSE, здесь различия минимальные (0.00293142).
Стопроцентной идентичности получить невозможно из-за ошибок округления.

Теперь разложим в пространстве Lab.

convert tulip.png -colorspace Lab -separate separate_LAB_%d.png
tulip = separate_LAB_0 + separate_LAB_1 + separate_LAB_2
L a b

Ну и раз пошла такая пьянка то и впространстве CMYK:

convert tulip.png -colorspace CMYK -separate separate_CMYK_%d.png

Тут уже цвет состоит из 4-х компонент, поэтому табличку пришлось уменьшить.

tulip = separate_LAB_0 + separate_LAB_1 + separate_LAB_2 + separate_LAB_2
C M Y K

Почитать еще