我有一个tif文件,可以从Windows Photos App中查看它。您可以从此链接下载它。我想使用imread
函数将其加载到Matlab ,但是下面显示了错误。
TIFF库错误-'TIFFReadDirectory:无法为“ BitsPerSample”的每个样本处理不同的值。
然后,我进一步查看文件的配置文件,发现BitDepth和BitsPerSample值似乎不正确。另外,MaxSample值看起来很奇怪。
通过检查Matlab内置的tiff文件配置文件,我了解到对于RGB图像,BitDepth应该为24,BitsPerSample应该为[8,8,8]。但是,当我尝试显式更改它们时,仍然出现相同的错误。
fname = 'TifImg.tif';
info = imfinfo(fname);
% Explicitly Assign Correct Value to BitDepth and BitsPerSample (still doesn't work)
for i = 1: length(info)
info(i).BitDepth = 24;
info(i).BitsPerSample = [8 8 8];
end
% Read Tif Image
frame = imread(fname, 1, 'Info', info);
imshow(frame,[])
我希望有人可以帮助我将该图像加载到Matlab,并指出要成功加载文件应该更改的配置文件。
如上面的评论所述,该文件似乎已损坏。我也无法使用gimp或其他程序打开它。所以这是一个hack。您可以使用imfinfo从标题中获取大小(高度乘以宽度乘以3种颜色),然后从末尾读取文件。稍微重新排序,图像就会被保存。我不知道标头中有很大的BitsPerSample,如果使用[8,8,8],则具有所需的确切长度。如果使用较大的色深等,则文件中没有足够的数字来填充520x696像素图像。
info = imfinfo('TifImg.tif');
fid = fopen('TifImg.tif','r');
s = fread(fid,'uint8=>uint8');
fclose(fid);
len = info.Height*info.Width*3;
data = s(length(s)-len+1:end);
img = reshape(data,3,info.Width,info.Height);
img = permute(img,[3,2,1]);
figure;
imshow(img)
聪明的答案。在奖励您之前,我只有一个问题。实际上,我正在尝试读取相同大小的多页Tif。我尝试了阅读的方式,但得到了一些奇怪的结果。你能帮我吗?这是我的代码:info = imfinfo(fname); numofFrames = length(info); fid = fopen(fname,'r'); s = fread(fid,'uint8 => uint8'); fclose(fid); len = info(1).Height * info(1).Width * 3 * numofFrames; 数据= s(长度-len + 1:结束); imgStacks = reshape(data,numofFrames,3,info(1).Width,info(1).Height); imgStacks = permute(imgStacks,[4,3,2,1]); implay(imgStacks)
都在uint8中吗?你可以链接一个例子吗?
是的,图像只是此多页tif文件的一帧。链接在这里。谢谢!dropbox.com/s/oi8t10z0n57l8t7/imagestacks.tif?dl=0
您的数据样本是s(2797:end),我正在调查
这需要繁重的侦探工作。我可以用这种方式获得一些图像,但是它们的颜色似乎不对,如果您使用ii = 450,则图像被混成一团。fname ='imagestacks.tif'; info = imfinfo(fname); numofFrames = length(info); fid = fopen(fname,'r'); s = fread(fid,'uint8 => uint8'); fclose(fid); 数据= s(2797:end); len = info(1)。高度* info(1).Width * 3; 数字; 对于ii = 1:4开始=(ii-1)* len + 1; 完成=开始+ len-1; img =重塑(data(start:finish),3,info(1).Width,info(1).Height); img = permute(img,[3,2,1]); imshow(img)标题(ii)暂停结束