【问题标题】:How to display a .bin image in Matlab?如何在 Matlab 中显示 .bin 图像?
【发布时间】:2015-01-14 04:11:23
【问题描述】:

所以我确信这是一个非常简单的问题,但是我在读取和显示 .bin 文件中的数据时遇到了问题。基本上,我有一个图像(256x256,每像素 8 位),我正在尝试读取和显示。虽然我可以让它适用于 .jpg 或 .tif,但我无法让它适用于 .bin 文件。这是我现在的代码:

file = fopen('image.bin', 'r');
A = fread(file);
imshow(A) %not sure if this is correct...
% imshow(file) doesn't work
% imshow('image.bin') doesn't work either
fclose(file);

有什么想法吗?

【问题讨论】:

  • .bin 文件非常模糊。它可以是任何东西。你知道这是不是原始图像吗?该文件是否包含原始图像像素本身?此外,.bin 文件的链接将有助于回答您的问题。如果是二进制文件,fread 会将文件的全部内容读入一个数组,然后你需要reshape 数组,使它变成一个图像。此外,由于您的图像是每像素 8 位,请尝试使用您的 fread 调用:A = fread(file, 256*256, 'uint8=>uint8'); 执行此操作。接下来,执行此操作以重塑图像:A = reshape(A, 256, 256).'; 现在尝试imshow(A)
  • 我不确定文件是图像还是原始图像像素,但您提供的代码有效。非常感谢!
  • 呸哈哈,如果有效,那么数据就是原始图像像素。凉爽的!介意我写一个答案,你能接受吗?
  • 我还是写了一个答案。有机会请接受 :) 谢谢!
  • 非常感谢!祝你好运!

标签: image matlab image-processing bin


【解决方案1】:

我将假设您的.bin 文件包含存储在二进制文件中的原始图像强度。您的fread 调用只会将文件的内容读入一个数组,但您需要小心。默认情况下,这些值将在 MATLAB 中作为 64 位 double 值读入,因此单个 double 值将包含 8 个图像像素。因此,您需要做的是修改使用fread 读取值的方式。具体来说,您需要这样做:

A = fread(file, 256*256, 'uint8=>uint8');

这意味着您将读取总共 256 x 256 像素的图像,其中输入二进制文件以无符号 8 位整数存储数据。之后,将数据作为相同类型读入 MATLAB。现在,您接下来需要做的是reshape 数组,使其变为 256 x 256 图像。

但是,由于fread 读入了column-major 中的数据,所以这张重塑后的图像的每一行都会被放入列中,因此您需要转置 完成后重塑的矩阵。具体来说:

A = reshape(A, 256, 256).';

现在,A 将是您正在寻找的 256 x 256 图像。您现在可以使用imshow(A); 显示此图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2013-01-18
    相关资源
    最近更新 更多