【问题标题】:How can I use low-level functions (not imread) to read a grayscale image?如何使用低级函数(不是 imread)来读取灰度图像?
【发布时间】:2017-10-12 08:21:19
【问题描述】:

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

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

得到的图像矩阵与单纯使用imread得到的图像矩阵不同:

img = imread(filepath);

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

除了明显的强度差异之外,人们可能还注意到fread图像在图像的顶部边缘有一些伪影。我认为这一定是由于他们阅读图像的机制不同。

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

【问题讨论】:

  • 我的意思不是听起来很咄咄逼人,但你已经问了很多没有accepting any answers 的问题。请注意,您不必必须这样做,但如果一个答案真正帮助并解决了您的问题,那就太好了。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多