Matlab只打开多页tiff堆栈的第一帧

72次浏览(过去30天)
我用ImageJ中的宏创建了多页tiff文件,我现在试图使用matlab打开它,但我只能访问第一帧。
下面是imfinfo(filename)的结果。相应地,我得到
长度(imfinfo(filename)) = 1
文件名:[1x129 char]
FileModDate:“11月28 - - 2013 12:27:51”
文件大小:6.7905 e + 09年
格式:气管无名动脉瘘管的' '
FormatVersion: []
宽度:512
身高:512
BitDepth: 8
ColorType:“灰度”
FormatSignature: [77 77 0 42]
ByteOrder:“大端法”
NewSubFileType: 0
BitsPerSample: 8
压缩:未压缩的
PhotometricInterpretation:“BlackIsZero”
StripOffsets: 932625
SamplesPerPixel: 1
RowsPerStrip: 512
StripByteCounts: 262144
XResolution: []
YResolution: []
ResolutionUnit:“没有”
Colormap: []
PlanarConfiguration:“粗”
TileWidth: []
TileLength: []
TileOffsets: []
TileByteCounts: []
方向:1
FillOrder: 1
GrayResponseUnit: 0.0100
MaxSampleValue: 255
MinSampleValue: 0
阈值:1
抵消:8
ImageDescription:“ImageJ = 1.47 q
图像= 25900
片= 25900
循环= false
然而,如果我在ImageJ中打开相同的tif文件,那么我可以阅读和滚动25900帧…奇怪的是matlab可以读取之前我在imageJ中创建的多页tiff,而不需要我的批处理宏…
我不明白发生了什么……任何帮助都将不胜感激!谢谢你,史蒂文

接受的答案

Christoph
Christoph 2014年4月28日
编辑:图像分析 2019年10月17日
ImageJ只在文件开头为大于4GB的TIFF文件写入第一个IFD。
其他IFD条目放在TIFF文件的末尾。
ImageJ能够读取这样的文件,因为它在ImageDescription标签中看到“images=n”,并意识到它需要打开n张图像。
作为MATLAB中的解决方案,您可以尝试下面的代码是否有效。注意:这段代码假设TIFF图像具有条带平面配置,并且每张图像包含一个条带。这可能不适用于所有图像,但它可以让您了解如何使用低级I/O函数读取ImageJ生成的此类文件。
文件名=“Mylarge.tif”确定图像帧数和第一个图像的偏移量
info = imfinfo(文件名)
这可能会产生类似于(以及其他)的结果
文件大小:1.055313188500000 e + 10
格式:气管无名动脉瘘管的' '
FormatVersion: []
宽度:692
身高:520
BitDepth: 16
ColorType:“灰度”
FormatSignature: [77 77 0 42]
ByteOrder:“大端法”
NewSubFileType: 0
BitsPerSample: 16
压缩:未压缩的
PhotometricInterpretation:“BlackIsZero”
StripOffsets: 3342765
SamplesPerPixel: 1
RowsPerStrip: 520
StripByteCounts: 719680
现在确定帧数:
numFramesStr = regexp(信息。ImageDescription,“图像= (\ d *)”“令牌”);
numFrames = str2double(numFramesStr{1}{1});
使用低级文件I/O读取文件
fp = fopen(文件名,rb的);
StripOffsets字段提供了第一个条带的偏移量。基于
%该文件的INFO,每个图像由1条组成。
fseek (fp,信息。StripOffsets,“转炉”);
假设图像为每像素16位,并以大端格式存储。
还假设图像是一个接一个地存储的。
例如,读取前100帧
framenum = 100;
imData =细胞(1、framenum);
CNT = 1:framenum
imData{cnt} = fread(fp,[信息。宽度信息。高度),“uint16”0,“ieee-be”)”;
结束
文件关闭(fp);
1评论
阿施施Uthama
阿施施Uthama 2021年9月27日
“奇怪的是,matlab可以读取之前我在imageJ中创建的多页tiff,而不需要我的批处理宏…”:我相信当图像大小超过4GB时,ImageJ会切换到这种(非标准)tiff格式,所以如果你之前的图像更小,它们将是MATLAB可以识别的标准tiff文件。

登录评论。

更多答案(1)

阿施施Uthama
阿施施Uthama 2022年2月25日
MATLAB R2020b有 tiffreadVolume 它支持Ima金宝appgeJ创建的大于4GB的非bigtiff卷。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!

翻译的