ImageMagick: Точное переназначение значений оттенков серого на значения RGB - PullRequest
1 голос
/ 24 октября 2019

Я использую ImageMagick 6.8, и у меня есть таблица цветов LUT, созданная в текстовом формате:

# ImageMagick pixel enumeration: 848,1,255,srgb
0,0:   (0  , 0  , 0  )    #000000
1,0:   (226, 226, 224)    #E2E2E0
2,0:   (48 , 74 , 0  )    #304A00
# ... 
# few hundred more colors

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

Итак, я хочу преобразовать изображение в градациях серого в RGB-изображение, используя этот LUT без каких-либо необычных гамма-коррекций, преобразований цветового пространства, интерполяций и т. Д. Просто прямая замена. Как это сделать?

Текущие проблемы начинаются с самого начала:

Попытка convert lut.txt lut.png с различными вариантами всегда дает мне больше цветов, чем они есть на самом деле. В LUT есть 540 уникальных цветов, но при проверке сгенерированного PNG или даже identify lut.txt отчетов 615! Это означает, что LUT совсем не интерпретируется.

С другой стороны, даже если мне удастся точно прочитать LUT или, возможно, избежать преобразования его в PNG, возникает другая проблема. Использование -clut отображает весь диапазон оттенков серого (0-65535) в LUT, так что я думаю, что сначала мне нужно его нормализовать. Но это приводит в замешательство ввод градаций серого.

PS Ответ, который может быть здесь полезен, если существует формат изображения с индексированной палитрой размером более 8 бит. Затем этот текст LUT будет использоваться в качестве его палитры, а растровый масштаб - в качестве значений пикселей.

1 Ответ

3 голосов
/ 24 октября 2019

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

Сначала создайте 3-цветное изображение LUT таблицы цветов с красным, зеленым и синимшестнадцатеричные цвета. Я показываю увеличенную версию.

convert xc:"#ff0000" xc:"#00ff00" xc:"#0000ff" +append colortable.gif


enter image description here

Здесь ввод - простой градиент, который я буду раскрашивать.

enter image description here

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

convert gradient.png colortable.gif -clut gradient_colored.png


enter image description here

По умолчанию используется линейная интерполяция. Но если вы хотите видеть только 3 цвета, используйте -interpolate nearest-neighbor.

convert gradient.png colortable.gif -interpolate nearest-neighbor -clut gradient_colored2.png


enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...