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文件, 这说明这些都是一些二进制的文件, 这样便于读取的快速进行. 因为其实每一种格式的图片都是进行过压缩的, 所以这些函数其实是进行了一些解压缩操作的.
请发表评论