ImageJ HyperStacks具有数据类型(8-32位),宽度,高度,通道数, slice 数和帧数。它们代表5D(XYCZT)数据集。 ImageJ将它们存储为多页tiff文件,其中存储通道数乘以 slice 数乘以帧数2D(XY)图像。第一张图片似乎有两个ID为50838和50839的自定义标签。
我想创建包含来自Matlab的5D数据的tif文件,ImageJ可以将其作为有效的5D HyperStack读取。
我可以使用imwrite(matrix, file, 'WriteMode','append')
在Matlab的多页tiff文件中存储许多2D图像,但是ImageJ只会将其作为3D(XYZ)图像堆栈读取。不包含有关通道, slice 和帧的信息。
我想我可以看一下ImageJ源,找出它们存储这些丢失信息的位置,然后使用Matlab的LibTIFF包装器重新创建ImageJ的元信息。但是,如果您已经知道该怎么办或有其他选择,我想听听。
最佳答案
我还认为,Bio-Fomats是唯一的方法。但是后来我意识到,斐济的ImageJ-MATLAB允许您将MATLAB数据传递给ImageJ。然后,可以通过ImageJ保存图像,以便ImageJ可以确定将其打开。
问题是创建ImageJ的人(或者只有一个人?)在创建从MATLAB到ImageJ的路由方面做得很好,但是他们似乎并没有理会这种行为。 ImageJ-MATLAB的IJM.show('name')
有很多隐藏或未记录的限制(我对the documentation进行了大规模更改,因此现在应该更清楚了)。最终,我开始使用包装函数ijmshow
https://github.com/kouichi-c-nakamura/ijmshow
示例MATLAB代码
您可以用4行完成。
addpath '/Applications/Fiji.app/scripts' % depends your Fiji installation
ImageJ
imp = ijmshow(I,'YXCZT') % I is 5D array of uint8 or uint16
% the second argument determines which dimension represents what
% imp is a 5D hyperstack
ij.IJ.saveAsTiff(imp, 'image1.tif');
在保存之前,可能需要设置每个通道的显示范围。
添加于5/7/2018
copytoImagePlus
比上面的ijmshow
提供了更好的解决方案(您可以使用相同的语法),因为copytoImagePlus
不再依赖基本工作空间中的IJM
变量。https://github.com/kouichi-c-nakamura/copytoImagePlus
addpath '/Applications/Fiji.app/scripts' % depends your Fiji installation
ImageJ
imp = copytoImagePlus(I,'YXCZT') % I is 5D array of uint8 or uint16
% the second argument determines which dimension represents what
% imp is a 5D hyperstack
ij.IJ.saveAsTiff(imp, 'image1.tif');
另请参见
copytoImgPlus
,它改为创建ImageJ2 ImgPlus
对象。https://github.com/fiji/fiji/blob/master/scripts/copytoImgPlus.m
关于matlab - 如何从Matlab生成有效的HyperStack ImageJ数据文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47438678/