imread是计算机语言中的一个函数,用于读取图片文件中的数据。在matlab的命令窗口中输入docimread或者helpimread即可获得该函数的帮助信息。所谓图片文件的数据,简单地说,就是一个二维数组,这个二维数组存储着一张图片各个像素点的颜色索引值或颜色值,当然真正的图片文件还需要一些附加信息。比如:对于24位真彩色位图文件,它的数据前14个字节是位图文件头(记录图片类型、大小、图像数据区的偏移量等),接下来的40个字节是位图信息头(记录图像的长度、宽度尺寸,图像是否压缩、图像中使用到的颜色数),然后就是记录图片上每个像素点的RGB值。对于灰度图像,位图信息头后是颜色表。
imtool表示显示图像,它能更加详细的反应/展示一副图像中各像素的RGB组成。
方法/步骤
1、在matlab软件中,读取图像数据(载入)利用的是imread函数,主要有以下4种方式:
A = imread(filename, fmt)
[X, map] = imread(...)
[...] = imread(filename)
[...] = imread(URL,...)
[...] = imread(...,Param1,Val1,Param2,Val2...)
作为初步以及最为常见的方式,采取第一种讲解。
如下图所示即为将载入的图片,图片格式(jpg) :
2、在命令窗口(Command Window)输入语句:
>>imdata = imread('haibao.jpg')
即读入图片数据保存在imdata矩阵中。如下所示,在Workspace可以看到该矩阵信息,是一个3维矩阵。
3、在读入图像数据后就可以进行各种算法操作,简单介绍几种常见的图片操作,如下代码可以将彩色图转为灰度图:
>>imdata = imread('haibao.jpg')
>>imgray = rgb2gray(imdata)
>>imshow(imgray)
4、图像二值化操作,如下所示即可:
>>imdata = imread('haibao.jpg')
>> lev = graythresh(imdata)
>>bwimg = im2bw(imdata,lev)
>>imshow(bwimg)
二值化后图像如下所示:
这个问题很复杂的。不管是什么语言,C也好,matlab也好,它要读取一个文件的信息都必须按照文件数据的格式来读取,也就是说,matlab读取图像的方法和C语言是一样的。matlab的imread很强大,一个命令可以读取各种类型的图像。但是imread并不是一个实际功能函数。不同的图像格式有不同的编码方式,因此有不同的读取方式。实际上,为每种不同格式的图像编写各自的读取函数是适当的,实际中也是这么做的。matlab就是这样的,imread只是一个入口函数。它仅仅是做了一些文件名的处理,从你的文件名中,找到绝对路径,找到图像后缀名,然后调用合适的读取函数。比如你打开\toolbox\matlab\imagesci\private文件夹会看到很多诸如readjpg.m,readtif.m的文件。这些才是不同格式图片读取的真正函数,但是!这些函数也不是实际功能函数!你打开这些m函数就可以看到里面其实很简单。它们所做的事情和imread差不多。也是调用了一些别的函数。比如readjpg.m里的实际读取函数是rjpg8c rjpg16c 这些。你会发现这些文件也存在于上面所说的这个文件夹中,但是它们的后缀名不是.m,而是.mex(.mex64 for 64bit),这些实际功能函数并不是用matlab编写的,而是用C编写的,它们是经过编译的文件,不是文本文件。matlab只是调用他们而已。
也就是说实际上matlab读取图像也是调用了C语言编写的代码。而且不同格式的图像有不同的代码。imread只不过是个入口函数而已。
这种结构在matlab里非常非常非常常见。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)