首页 文章

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

提问于
浏览
3

我正在处理tiff格式的显微镜图像(在Matlab中),通常是uint8或uint16 . 基本上我读它们,把它们放在一个单元格数组中进行处理,然后以tiff格式将它们导出为图像序列或堆栈(分别使用imwrite和imwrite的'overwrite'或'append'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 .

  • 如果我在命令窗口中打开一个给定的图像,然后使用与上面相同的代码保存它,它会按照我想要的方式执行我想要的结果图像 . 因此,我的猜测是问题来自使用单元阵列,但我不明白如何 .

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

2 回答

  • 0

    你需要指定'ColorSpace'

    试试这个

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

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

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

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

相关问题