12.4.1 图像预处理(1)
针对CCD摄像头拍摄的每一帧图片,图像处理系统将利用图像采集卡进行模数转换,转换成数字图片后,为使图片达到图像分析要求而对原图片进行的一系列处理手段就是图像预处理过程。图像预处理包括图像的格式转换、图像滤波、图像编码以及图像存储与显示等环节。下面介绍各个图像预处理方法与MATLAB实现函数。
1.图像的读取、显示与保存
MATLAB提供了图像的读取与显示命令,常用的图像处理函数介绍可以参考11.3节、11.4节、11.5节的相关内容。在读取图像之前,应该先清除MATLAB所有工作空间中的变量,并关闭所有打开的图像窗口。在MATLAB命令窗口中输入以下命令:
- Clear;
- close all
然后,通过图像读取命令读取一幅图像,在MATLAB命令窗口输入以下命令:- I=imread('图像名') %被读取图像必须保存到MATLAB当前工作目录,
图像名包括图像存储地址\ %图像名.后缀名
之后就可以通过调用显示图像命令显示该图像,在MATLAB命令窗口输入以下命令:- imshow(I) %I为被读入图像的代表变量
在图像处理结束后,可以通过图像保存命令保存处理后的图像,在MATLAB命令窗口输入如下命令:- imwrite(I,'图像名')%I为需要保存的图像,图像名可以重新任意取定,同时也可以改变后缀名
然后,可以对图像进行保存。如果将图像imdata保存到磁盘中,并希望保存后的图像名为NewPic的PNG图像格式,则在MATLAB命令窗口输入如下命令:- >> imwrite(imdata,'NewPic.png')
用户可以在MATLAB当前使用路径下找到保存好的NewPic.png文件。
2.图像的格式转换
MATLAB支持索引色图像、灰度图像、二值图像、RGB图像和多帧图像阵列5种图像类型,同时也支持JPEG、PNG、GIF、BMP等图像文件格式的读、写和显示。对于绝大多数类型的图像,都需要进行图像的格式转换后才能进行其他图像预处理。例如,需要对一幅索引色图像进行滤波,就必须对图像进行格式转换,转换成灰度图像,再对图像的灰度进行滤波。如果不将索引色图像的格式进行转换,直接进行滤波处理,这些操作就没有意义。下面简要介绍MATLAB提供的图像转换的基本函数。
(1)rgb2ind()将RGB图像转换成索引色图像,其语法格式如下:
- [X,map]= = rgb2ind ( I,n)
I表示被转换的RGB原图像,n为转换阈值,其取值范围为1~256。
(2)ind2rgb()将索引色图像转换成RGB图像,其语法格式如下:
- RGB=ind2rgb(X,map)
X表示被转换的索引色图像,map是X的调色板。MATLAB的实际处理方式是创建一个三维数组,然后将索引色图像中与颜色对应的map值赋值给三维数组。
(3)rgb2gray ()将RGB图像转换成灰度图像,其语法格式如下:
- I=rgb2gray(RGB)
该命令是将真彩色图像RGB转换成灰度图像I。
(4)ind2gray()将索引色图像转换成灰度图像,其语法格式如下:
- I= ind2gray(X, map)
该命令是将具有调色板map的索引色图像X转换成为灰度图像I,但是在转换过程中去掉了原图像的色度和饱和度,只保留了图像的亮度信息。
(5)im2bw()通过设置阈值将RGB、索引色、灰度图像转换成二值图,其语法结构如下:
- BW=im2bw(I, level)
其中,参数I可以是RGB图像、灰度图像和索引色图像,当是索引色图像时,I表示成X,map;level为转换阈值,转换阈值根据图像而不同,可以通过函数graythresh()求得。
(6)mat2gray()将数据矩阵转换成一幅灰度图像,其语法结构如下:
- I=mat2gray(A, [a b])
该命令是按照指定的取值区间[a b]将数据矩阵A转换成灰度图像I,a对应灰度0,b对应灰度1。如果不设置指定区间,则MATLAB会自动默认矩阵中最小元素为0,最大元素为1。