我最近在寻找一种解决方案,可以将带有ImageJ元数据的tiff文件保存为多于3个颜色通道以及灰度通道。我发现了这个帖子,并且上面提到的解决方案非常有用,我还根据它们的示例扩展了额外的通道。
在ImageJ中,可以使用最多7种不同的颜色通道,在复合模式下基于RGB颜色方案 - 三种原色红、绿和蓝,混合2种原色得到黄、洋红和青色,以及一个灰度通道。
要添加蓝色LUT,您只需像上面的示例中为红色或绿色LUT定义ndarray,但将强度值范围从0到255分配给第三个数组,而其他两个数组(红色和绿色)则填充为零。
"最初的回答"
lut_blue = np.zeros((3, 256), dtype=np.uint8)
lut_blue[2, :] = val_range
通过混合基本颜色红色和绿色,现在可以生成一个黄色的LUT。
注:LUT是指查找表,是一种数据结构,常用于图像处理中。
lut_yellow= np.zeros((3, 256), dtype='uint8')
lut_yellow[[0,1],:] = np.arange(256, dtype='uint8')
下面的示例将生成一个具有7个通道的tiff文件。对于tiff堆栈中的图像,颜色分配如下定义: "最初的回答":
以下示例将生成一个包含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
im_3frame = np.random.randint(0, 255, size=(7, 150, 250), dtype=np.uint8)
val_range = np.arange(256, dtype=np.uint8)
lut_gray = np.stack([val_range, val_range, val_range])
lut_red = np.zeros((3, 256), dtype=np.uint8)
lut_red[0, :] = val_range
lut_green = np.zeros((3, 256), dtype=np.uint8)
lut_green[1, :] = val_range
lut_blue = np.zeros((3, 256), dtype=np.uint8)
lut_blue[2, :] = val_range
lut_yellow= np.zeros((3, 256), dtype='uint8')
lut_yellow[[0,1],:] = np.arange(256, dtype='uint8')
lut_magenta= np.zeros((3, 256), dtype='uint8')
lut_magenta[[0,2],:] = np.arange(256, dtype='uint8')
lut_cyan= np.zeros((3, 256), dtype='uint8')
lut_cyan[[1,2],:] = np.arange(256, dtype='uint8')
ijmeta = {'LUTs': [lut_gray, lut_red, lut_green, lut_blue, lut_yellow, lut_magenta, lut_cyan]}
imsave(
'test.tif',
im_3frame,
imagej=True,
metadata={'mode': 'composite'},
ijmetadata=ijmeta,
)