matlab 中如何识别图片文件格式的

MATLAB中imread函数的解析

在MATLAB中imread函数能够读取各种常见格式图像中的数据, 返回图像的像素值.

在MATLAB中注册的格式主要包括下面的:

 

MATLAB中有一个imformats函数, 这个函数可以获得以上注册图像的一些信息: 主要包括下面的列举几个常见格式的信息:

 

 

BMP

GIF

ICO

PNG

TIF

 

 

 

 

 

 

JPEG

JPEG2000

JPEG2000

JPEG2000

 

 

 

 

 



 

 

图像格式判断

图像信息获取

图像内容的读取

将数据写成某种格式的图像

下图是上图对应图像格式判断的方法, 主要是对于那些没有扩展名的图像进行判断, 看它是否属于matalb所支持的图像格式.

   

 

 

 

 

 

 

在函数imread中主要是先判断是否给出了图像格式, 如果给出了图像格式, 那么就按这种格式去读取图像, 如果没有给出, 根据文件名去判读, 看有没有扩展名, 看扩展名是否给出, 给出的格式是否在MATLAB的注册图像格式列表中.

如果无法得到图像的格式, 那么就需要循环判断当前的图像是否是MATLAB支持的某一种格式. 判断时候就是执行每种格式对应的"isbmp"类似的函数来进行判断.

 

下面列举几个常见格式的图像文件的识别方法:

 

BMP

GIF

 


 

可以看到BMP文件的前两个字符是'BM',这表示该文件是一个BMP格式的文件, 如果没有'BM', 表示这个不是BMP, 是其他格式的文件. 我曾经将BMP文件的前两个字符'BM'去掉, 结果是该图片文件就无法显示了.

 

可以看到GIF文件的前3个字符是'GIF'

 

 


 

PNG

ICO

PNG图像的前4个字符的ASCII值为:137, P,N,G

这个图像格式的判断和之前的不一样, 这个类型是'uint16' 是16位(2个字节)无符号整数,如下图所示

读取十六进制数和机器架构有关, 我们是X86的机器, 所以这儿是从低位开始存储:对于16位表示的数字'1', 应该是'0001', 但是低位要在前,高位在后, 所以为'0100'

JPEG

 

JPEG格式图像的前两个字符的ASCII是:255和216


TIF

可以看到TIF包括多种格式的起始码, 下面是其中一种格式

JPEG2000



可以看到jpeg2000有两种形式

 

在MATLAB中具体要读取某种格式的图像时都有对应的读取函数, 函数查看里边的m文件我们可以发现, 最终要进行读写的函数都是.mex文件, 这说明这些都是一些二进制的文件, 这样便于读取的快速进行. 因为其实每一种格式的图片都是进行过压缩的, 所以这些函数其实是进行了一些解压缩操作的.

posted @ 2011-07-13 22:10  Mr.Rico  阅读(5246)  评论(0编辑  收藏  举报