【问题标题】:Read .img file in MATLAB and在 MATLAB 中读取 .img 文件并
【发布时间】:2016-02-14 09:34:50
【问题描述】:

我对 MATLAB 还是很陌生。我想在 MATLAB 中读取 .img 文件,并希望将其导出为任何通用图像格式。我没有关于文件的任何信息(即图像分辨率)我尝试使用fread 命令读取文件。

fid=fopen('image.img');
A=fread(fid,256*378,'unit8=>unit8');
fclose(fid);
b=reshape(A,256,378);
imshow(A);

只有在我知道 .img 文件的分辨率后才能打开它。请帮我做同样的事情,但不知道开始的解决方案,或者是否有人可以提出更好的方法。

下载 .img 文件here

【问题讨论】:

  • 你曾经运行过你的代码吗? 5 行 3 个错误。

标签: matlab image-processing


【解决方案1】:

目前尚不清楚您正在处理哪种 .img 文件。 .img 文件通常是磁盘映像文件。 Mac、Windows 和 ISO 有不同的文件格式。但是,听起来您在询问可能是专有的图形图像文件格式。如果您知道用于创建 .img 文件的程序,则可以了解有关其内部格式的更多信息。

dir 函数可用于确定文件中的总字节数,这将允许您使用 fread 读取文件。但是,您仍然需要知道要重塑图像的尺寸。

【讨论】:

    【解决方案2】:

    如果您想处理图像,Matlab 有一个不错的图像处理工具箱,我强烈建议您阅读帮助/手册。您会发现几个可立即使用的内置函数可以帮助您解决问题。

    imageinfo() 就是其中之一:将显示一个包含有关图像的多个信息的结构,imread() 将以矩阵形式导入您的图像,mat2grey() 将您的 RGB 图像转换为灰度图像...和名单还在继续。

    不要将fopen()/fread()/fclose()与图片一起使用:此类函数主要用于处理文本文件。

    PS:您提供的链接包含一个磁盘映像(当然,鉴于该扩展名,正如@Herb 正确指出的那样)。

    【讨论】:

    • imreadimageinfo 仅支持定义明确的图像格式,而不支持在图形图像上下文中通常指原始图像数据的 .imgfread 是正确的选择。
    【解决方案3】:

    你的代码中fread()函数的sintax是错误的。

    首先,数据类型是 uint8 而不是 unit8

    • U 是无符号的,这意味着:所有值都是正数(不允许负“符号”)

    • INT是整数,意思是:所有值都是整数,0,1,2,3...

    • 8是只有8位信息,即:最大值为255,最小值为0。

    其次,函数fread() 中的256*378 参数将创建此图像的另一个维度。因此正确的方法是使用[]

    f = fopen('image.img')
    image = fread(f, [256 378], '*uint8');
    imshow(image,[])
    

    imwrite(image, 'davinci.jpg', 'jpg')
    whos image
    Variables in the current scope:
    
       Attr Name          Size                     Bytes  Class
       ==== ====          ====                     =====  =====
            image         256x378                  96768  uint8
    
    Total is 96768 elements using 96768 bytes
    

    这个问题可能和这个question有点相同

    • 参考资料 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 2012-04-18
      • 2012-01-15
      相关资源
      最近更新 更多