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

Image 使用Matlab将uint16 tiff图像保存为truecolor,image,matlab,export,tiff,Image,Matlab,Export,Tiff,我正在处理tiff格式的显微镜图像(在Matlab中),通常是uint8或uint16。基本上,我读取它们,将它们放入单元格数组中进行处理,然后以tiff格式将它们导出为图像序列或堆栈(分别使用imwrite和imwrite的“overwrite”或“append”writemode属性)。到目前为止,一切都很顺利 我遇到的问题如下: 当我用ImageJ打开图像时,它们不是在truecolor“RGB”颜色模式下,而是在合成模式下。例如,ImageJ以8位的形式读取数据,实际上是这样,但不能以t

我正在处理tiff格式的显微镜图像(在Matlab中),通常是uint8或uint16。基本上,我读取它们,将它们放入单元格数组中进行处理,然后以tiff格式将它们导出为图像序列或堆栈(分别使用imwrite和imwrite的“overwrite”或“append”writemode属性)。到目前为止,一切都很顺利

我遇到的问题如下:

当我用ImageJ打开图像时,它们不是在truecolor“RGB”颜色模式下,而是在合成模式下。例如,ImageJ以8位的形式读取数据,实际上是这样,但不能以truecolor的形式打开图像(很抱歉,我不知道正确的术语)。因此,我必须手动将3个通道组合在一起,这对于大型数据集来说很麻烦

这是一个屏幕截图解释。左边是我想要的,也就是说,如果我直接用ImageJ打开图像,我会得到什么,右边是我用Matlab保存图像并用ImageJ打开它们后当前得到的,这是我不想要的

我用于导出图像序列的代码如下所示。“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中按我想要的方式打开。因此,我的猜测是,问题产生于使用单元阵列,但我不知道如何解决
我希望我已经够清楚了。如果没有,请询问更多细节。
谢谢你的帮助

您需要指定“颜色空间”

试试这个

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

在重新审视这个问题后,我发现以下方法可行,这要感谢@Ashish的提示:

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

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

你能在某处上传一个坏图像样本吗。或者用虚拟数据创建它?(RGB=uint8(rand(20,30,3)*100))并确认图像j将其视为非标准RGB图像?在我的机器上,imwrite(uint8(rand(10,10,3))、“/tmp/t”、“tif”、“WriteMode”、“overwrite”、“Compression”、“none”);结果在ImageJ中像正常RGB一样读取它。而imwrite(uint16(rand(10,10,3))、“/tmp/t”、“tif”、“WriteMode”、“overwrite”、“Compression”、“none”);结果在三层视图中,您似乎正在谈论。感谢您的快速回复!是的,如果我添加imwrite(uint8(FinalSequenceToExport{I}),…),它就会工作。然而,图像已经饱和,这可能是因为我在导入数据时使用了imadjust。谢谢你可以发布一个答案,如果你愿意,我可以接受。当我做Ashish所做的(“imwrite(uint16(…”)时,我得到的并不完全是你得到的(“1/3红色,…,16位”而不是“8位”)。所以有些东西可能还是不同的。但是我想只保存uint8就可以避免整个问题。ImageJ似乎只将RGB作为8位处理。感谢链接/comment@Trilarion,我会研究它!感谢提示!但是它会产生与以前相同的结果。