如何使用低级函数(不是imread)来读取灰度图像?

时间:2017-05-12 22:50:03

标签: image matlab file-io grayscale image-formats

我正在尝试使用低级函数(fopenfread)来读取TIFF格式的uint16类型的灰度图像,如下所示:

fid = fopen(filepath,'r');
img = fread(fid,[ncolms, nrows], 'uint16=>uint16')';

获得的图像矩阵与通过简单地使用imread

获得的图像矩阵不同
img = imread(filepath);

生成的图片如下所示(左侧是fread,右侧是imread):

enter image description here

除了明显的强度差异之外,还可以注意到fread图像在图像的上边缘有一些伪影。我认为这必须归功于他们阅读图像的不同机制。

我想知道如何使用fopenfread这样的低级函数来读取图像(灰度,而不是二进制),等效于使用imread,如果可以的话。

1 个答案:

答案 0 :(得分:1)

您看到的那些“工件”很可能是在图像数据之前存储在文件中的标题和标记数据。我建议看看这个TIFF File Format Summary。它会告诉您如何真的想要自己完成所有这些额外信息。请注意,一些额外的标记信息(即ImageHeight,ImageWidth,BitsPerSample,SamplesPerPixel等)将有助于确切地确定如何正确读取图像数据,从而匹配从imread函数获得的图像