2016-02-13 145 views
0

我对MATLAB很新颖。我想在MATLAB中读取.img文件,并想导出它是任何通用图像格式。我没有关于文件的任何信息(即图像分辨率),我尝试使用fread命令读取文件。阅读MATLAB中的.img文件和

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

只有知道我的.img文件的分辨率时,才能打开它。请帮助我做同样的事情,但不知道开始的解决方案,或者任何人都可以提出一个更好的方法来做到这一点。

下载.img文件here

+0

你有没有运行代码? 5行中有3个错误。 – Daniel

回答

0

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

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

0

如果你想处理图像,Matlab有一个很好的图像处理工具箱,我强烈建议你阅读帮助/手册。您会发现几种可立即使用的内置函数,可以将您排除在外。

imageinfo()是一个:将显示与有关图像的相关信息的几个结构,imread()将导入您的图像矩阵形式,mat2grey()会将您的RGB图像的灰度图像...和这样的例子不胜枚举。

请勿使用带有图片的fopen()/fread()/fclose():此类功能主要用于处理文本文件。 PS:你提供的链接包含一个磁盘映像(当然,正如@Herb指出的那样,给定了扩展名)。

+0

'imread'和'imageinfo'只支持定义良好的图像格式,而不是'.img',它在图形图像的上下文中通常指的是原始图像数据。 'fread'是正确的选择。 – Daniel

0

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

首先,数据类型是uint8不是单元8

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

  • INT是整数,这意味着:所有的值是整数,0,1,2, 3 ...

  • 8是只有8比特的信息,这意味着:最大值为255,最小值为0。

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

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

davinci

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