我最近遇到了这个线程,同时寻找一种解决方案来保存带有 ImageJ 元数据的 tiff 文件,除了灰色通道之外,还有超过 3 个颜色通道。上面描述的解决方案非常有帮助,我扩展了示例以获取其他通道。
在 ImageJ 中,可以基于 RGB 配色方案在复合模式下使用多达 7 个不同的颜色通道 - 红色、绿色和蓝色三种基色,两种基色的混合产生黄色、品红色和青色以及灰色通道。
要添加蓝色 LUT,您只需为红色或绿色 LUT 定义如上例所示的 ndarray,但将强度值范围从 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')
下面给出的示例将生成具有 7 个通道的 tiff 文件。tiff 堆栈中图像的颜色分配定义为:
ijmeta = {'LUTs': [lut_gray, lut_red, lut_green, lut_blue, lut_yellow, lut_magenta, lut_cyan]}
并且可以根据需要进行调整。基于 Jenny Folkesson 示例的完整代码如下所示:
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,
)