温馨提示:本文翻译自stackoverflow.com,查看原文请点击:tiff - Matlab Read Tif File shows Error "Cannot handle different values per sample for "BitsPerSample"."
matlab tiff

tiff - Matlab读取Tif文件显示错误“无法为“ BitsPerSample”的每个样本处理不同的值”。

发布于 2020-05-31 11:25:58

我有一个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,并指出要成功加载文件应该更改的配置文件。

查看更多

提问者
SimaGuanxing
被浏览
17
Yuval Harpaz 2020-03-17 14:11

如上面的评论所述,该文件似乎已损坏。我也无法使用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)

固定影像