我正在尝试使用低级函数(fopen
和fread
)来读取TIFF格式的uint16
类型的灰度图像,如下所示:
fid = fopen(filepath,'r');
img = fread(fid,[ncolms, nrows], 'uint16=>uint16')';
获得的图像矩阵与通过简单地使用imread
:
img = imread(filepath);
生成的图片如下所示(左侧是fread
,右侧是imread
):
除了明显的强度差异之外,还可以注意到fread
图像在图像的上边缘有一些伪影。我认为这必须归功于他们阅读图像的不同机制。
我想知道如何使用fopen
和fread
这样的低级函数来读取图像(灰度,而不是二进制),等效于使用imread
,如果可以的话。
答案 0 :(得分:1)
您看到的那些“工件”很可能是在图像数据之前存储在文件中的标题和标记数据。我建议看看这个TIFF File Format Summary。它会告诉您如何真的想要自己完成所有这些额外信息。请注意,一些额外的标记信息(即ImageHeight,ImageWidth,BitsPerSample,SamplesPerPixel等)将有助于确切地确定如何正确读取图像数据,从而匹配从imread
函数获得的图像