在数字图像处理中,计算机对图像有着很多处理和操作方法,其中最常见的是图像的读取、显示、修改和保存,以及获取图像的基本信息。本节会对这些内容进行介绍,并结合相关内容对图像进行一些简单的处理。
2.3.1 图像的读取
如果要对数字图像进行处理,则首先需要读取图片。在MATLAB中,函数imread可以实现对图像的读取,其格式如下。
灰度图像或真彩色图像的读取:
A = imread(/'filename/',/'fmt/')或imread(/'filename .fmt/')
索引图像的读取:
[X,map] = imread(/'filename/' , /'fmt/')或imread(/'filename .fmt/')
filename是图像的文件名,fmt是图像类型(如.jpg、.gif、.jpeg、.png等)。图像读取可以为A=imread(/'lena/',/'jpg/')或A=imread(/'lena.jpg/')。如果lena.jpg不在MATLAB的当前路径下,则filename要包含文件的路径。该函数读取的图像为灰度图像或真彩色图像,如果读取的是灰度图像,则A是一个M×N的二维数组(M、N分别是图像的高度和宽度);如果读取的是真彩色图像,则A是一个M×N×3的三维数组。如果读取的是索引图像,则X代表数据矩阵,是M×N的二维数组;map代表调色板矩阵,是m×3的二维数组。
下面我们通过Code7来了解如何利用函数imread实现图像的读取。
Code7:ch2_7.m
上述代码演示了读取图像的不同方式,gray1、gray2读取的是灰度图像,rgb1、rgb2读取的是真彩色图像。运行Code7后,结果如图2-14所示。
图2-14 Code7的运行结果
Code7运行结束后,查看MATLAB的工作空间,可以看到四个矩阵,即gray1和gray2是灰度图像,对应的是二维数组;rgb1和rgb2是真彩色图像,对应的是三维数组,如图2-15所示。
图2-15 Code7运行结束后MATLAB的工作空间
函数imread还可以读取特殊格式的图像文件。关于函数imread特殊使用和图像读取的更多问题,读者可参阅MATLAB帮助文档。
2.3.2 图像的显示
通常对一幅图像处理完成后,还需要将图像显示出来,查看处理后的效果。在MATLAB中,函数imshow可以实现对图像的显示。
imshow(/'img/')
img可以是imread返回的变量,也可以为图片路径,如“E:five.jpg”。
使用函数imshow,MATLAB会自动打开图形图像视窗,这是MATLAB中一种通用的图像显示方法,可以显示灰度图像、真彩色图像、二值图像、索引图像等。在显示灰度图像时,可以加入一些限制,如imshow(gray,[40,120]),像素值小于40的会显示为黑点,像素值大于120的会显示为白点。下面我们通过Code8来说明如何利用函数imshow实现图像的显示。
Code8:ch2_8.m
运行Code8后,结果如图2-16所示。图(a)是对读取的灰度图像进行显示;图(b)是对读取的RGB图像进行显示;图(c)在显示时限制了灰度图像(a)的像素值范围;图(d)是根据路径直接显示图像文件。
图2-16 Code8运行后的结果
注意:图像显示是先打开图形图像窗口,然后将图片显示在窗口内,如图2-16所示。为了清晰展示运行结果,本书中其他图例只显示图像部分,不显示整个图形图像窗口。
在MATLAB中,图像的显示函数还有imtool、image、imagesc、colorbar、montage等,关于这些函数的使用,读者可查阅MATLAB帮助文档。
2.3.3 图像的修改
在数字图像处理中,通常需要对图像进行修改。修改图像就是修改对应的数字矩阵中的像素值。下面我们结合程序Code9对图像的修改进行介绍。
Code9:ch2_9.m
运行Code9后,结果如图2-17所示。我们可以看到,修改后的图像的左上角区域为黑色,因为图像该区域内的像素值被修改为0。
图2-17 Code9的运行结果
2.3.4 图像的保存
对数字图像处理结束后,通常需要对处理后的图像进行保存。在MATLAB中,函数imwrite可以实现图像的保存,格式如下。
imwrite(img,filename,fmt)
img是函数imread得到的图像矩阵,filename和fmt分别是要存储的文件名和文件类型。如果要保存的img是灰度图像,则img是一个二维矩阵;如果要保存的img是真彩色图像,则img是一个三维矩阵。下面我们通过Code10说明如何利用函数imwrite实现图像的保存。
Code10:ch2_10.m
首先读入了一个灰度图像gray1,然后读入了一个真彩色图像rgb1,可以在工作空间中看到gray1是二维矩阵,rbg1是三维矩阵。通过函数imwrite把图像矩阵保存在指定路径下。运行Code10后,当前路径下增加了一个灰度图像,名字为gray.jpg;计算机E:盘下增加了一个真彩色图像,名字为rgb.jpg。
通过函数imshow显示图像后,图像会显示在图形图像视窗内,如果利用hode on在该图像上添加一个矩形框生成新图像,由于图像的像素值没有改变,不能使用函数imwrite保存新图像,那么此时需要使用函数saveas,格式如下。
saveas(gcf,/'filename/',/'fmt/')
saveas是将图形图像窗口保存,相当于将该窗口进行另存为。
下面我们通过Code11说明如何利用函数saveas保存图像。
Code11:ch2_11.m
运行Code11后,结果如图2-18所示。
图2-18 Code11的运行结果
2.3.5 获取图像的基本信息
在数字图像处理中,通常需要查看图像的基本信息,如图像格式、图像大小、图像数据类型等。在MATLAB中,函数imfinfo可以获取图像的基本信息,格式如下。
INFO=imfinfo(imagename);
INFO返回图像的基本信息,它是一个结构数组。
通过在MATLAB的命令行窗口中输入如下语句,来查看图像的基本信息。
返回的info包含着图像“1.jpg”的基本信息。Filename代表图像文件的路径和名字;FileModDate表示图像文件的最后修改时间;FileSize表示图像文件的大小;Format表示图像的格式;Width表示图像的宽;Height表示图像的高;BitDepth:24;ColorType表示图像类型(灰度图像、RGB图像、索引图像、二值图像)。
如果仅需要获取图像的行和列,则可以使用如下语句。