Недавно я наткнулся на эту тему, когда искал решение для сохранения файлов TIFF с метаданными ImageJ для более чем 3 цветовых каналов в дополнение к серому каналу. Описанные выше решения были очень полезными, и я расширил пример для дополнительных каналов.
В ImageJ можно использовать до 7 различных цветовых каналов в комбинированном режиме на основе цветовой схемы RGB - три основных цвета: красный, зеленый и синий, смеси двух основных цветов, в результате чего получаются желтый, пурпурный и голубой, а также серый канал.
Чтобы добавить синий LUT, вы просто определите ndarray, как показано в примере выше для красного или зеленого LUT, но назначите значения интенсивности в диапазоне от 0 до 255 третьему массиву, в то время как два других массива (красный и зеленый) заполнены нулями.
lut_blue = np.zeros((3, 256), dtype=np.uint8)
lut_blue[2, :] = val_range
Путем «смешивания», например, основные цвета красный и зеленый теперь могут генерировать желтое LUT.
lut_yellow= np.zeros((3, 256), dtype='uint8')
lut_yellow[[0,1],:] = np.arange(256, dtype='uint8')
Пример, приведенный ниже, приведет к генерации файла TIFF с 7 каналами. Назначение цвета изображениям в стеке tiff определяется следующим образом:
ijmeta = {'LUTs': [lut_gray, lut_red, lut_green, lut_blue, lut_yellow, lut_magenta, lut_cyan]}
и может быть скорректирована по мере необходимости. Полный код, основанный на примере Дженни Фолкессон, выглядит следующим образом:
import numpy as np
from tifffile import imread, imsave
# Create a random test image
im_3frame = np.random.randint(0, 255, size=(7, 150, 250), dtype=np.uint8)
# Intensity value range
val_range = np.arange(256, dtype=np.uint8)
# Gray LUT
lut_gray = np.stack([val_range, val_range, val_range])
# Red LUT
lut_red = np.zeros((3, 256), dtype=np.uint8)
lut_red[0, :] = val_range
# Green LUT
lut_green = np.zeros((3, 256), dtype=np.uint8)
lut_green[1, :] = val_range
# Blue LUT
lut_blue = np.zeros((3, 256), dtype=np.uint8)
lut_blue[2, :] = val_range
# Yellow LUT
lut_yellow= np.zeros((3, 256), dtype='uint8')
lut_yellow[[0,1],:] = np.arange(256, dtype='uint8')
# Magenta LUT
lut_magenta= np.zeros((3, 256), dtype='uint8')
lut_magenta[[0,2],:] = np.arange(256, dtype='uint8')
# Cyan LUT
lut_cyan= np.zeros((3, 256), dtype='uint8')
lut_cyan[[1,2],:] = np.arange(256, dtype='uint8')
# Create ijmetadata kwarg
ijmeta = {'LUTs': [lut_gray, lut_red, lut_green, lut_blue, lut_yellow, lut_magenta, lut_cyan]}
# Save image
imsave(
'test.tif',
im_3frame,
imagej=True,
metadata={'mode': 'composite'},
ijmetadata=ijmeta,
)