使用Matlab将uint16 tiff图像保存为truecolor

时间:2014-08-05 19:21:03

标签: image matlab export tiff

我正在处理tiff格式的显微镜图像(在Matlab中),通常是uint8或uint16。基本上我读它们,把它们放在一个单元格数组中进行处理,然后以tiff格式导出它们作为图像序列或堆栈(使用imwrite和'覆盖'或者'追加&# 39; imwrite的writemode属性,分别)。到目前为止,一切都运作良好。

我遇到的问题如下:

当我用ImageJ打开图像时,它们不是真正的颜色" RGB"颜色模式,而是复合模式。例如,ImageJ将数据读取为8位,但它不会将图像打开为真彩色(很抱歉,选择不好的单词我不知道正确的术语)。因此,我必须手动将3个通道组合在一起,这对于大型数据集来说是很麻烦的。

这是一个屏幕截图解释。在左边是我想要的,即。如果我直接使用ImageJ打开图像,我得到的是右边是我用Matlab保存图像并用ImageJ打开它后我现在所拥有的,这是我不想要的。

enter image description here

我用于导出图像序列的代码如下。 " FinalSequenceToExport"是包含图像的单元格数组。

for i = 1:SliceNumber
    ExportedName = sprintf('%s%s%d.tiff',fileName,'Z',i);
  imwrite(FinalSequenceToExport{i},ExportedName,'tif','WriteMode','overwrite','Compression','none');

end
  • 例如,如果我向Matlab询问FinalSequenceToExport {1}的大小,它会给出512 x 512 x 3。
  • 如果我在命令窗口中打开一个给定的图像,然后使用与上面相同的代码保存它,它会按照我想要的方式执行,并在ImageJ中打开生成的图像。因此,我的猜测是问题来自使用细胞阵列,但我不明白如何。

我希望我已经足够清楚了。如果没有,请询​​问更多详情。 谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您需要指定'ColorSpace'

试试这个

imwrite(FinalSequenceToExport{i},ExportedName,...
       'tif','WriteMode','overwrite','Compression','none', ...
       'ColorSpace', 'rgb');

答案 1 :(得分:0)

在重新审视这个问题后,我发现以下内容有效,感谢来自@Ashish的提示:

imwrite(uint8(FinalSequenceToExport{i}/255),...);

转换为uint8后,我只需要除以255。