MATLAB中的图像处理工具箱提供了一套全方位的标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。可用其对有噪图像或退化图像进行去噪或还原、增强图像以获得更高的清晰度、提取特征、分析形状和纹理,以及对两个图像进行匹配。工具箱中的大部分函数均以开放式MATLAB语言编写,这意味着可以检查算法、修改源代码和创建自定义函数。

图像处理工具箱在生物测定学、遥感、监控、基因表达、显微镜技术、半导体测试、图像传感器设计、颜色科学及材料科学等领域,为工程师和科学家提供支持,同时也促进了图像处理技术的教学。

图像处理工具箱的主要功能如下:

(1)图像增强,包括过滤、滤波器设计、去模糊和对比度增强;

(2)图像分析,包括功能检测、形态学、分割和测量;

(3)空间变换和图像配准;

(4)图像变换,包括FFT、DCT、Radon和扇形波束投影;

(5)支持多维图像处理;

(6)支持ICC版本4颜色管理系统;

(7)模块化交互式工具,包括ROI选择、直方图和距离测量;

(8)交互式图像和视频显示;

(9)DICOM导入和导出。

图8-1显示了图像处理工具箱中去相关延伸算法(上)、线条检测(中)和基于分水岭分割(下)等结果。

图8-1  图像处理工具箱

8.1  图像文件的操作

图像处理工具箱支持多种设备生成的图像,包括数码相机、图像采集系统、卫星和空中传感器、医学成像设备、显微镜、望远镜和其他科学仪器。用户可以用多种数据类型来可视化、分析和处理这些图像,包括单精度和双精度浮点和有符号或无符号的8、16和32位整数。

在MATLAB环境中,导入或导出图像进行处理的方式有几种。用户可以使用图像采集工具箱从Web 摄像头、图像采集系统、DCAM兼容相机和其他设备中采集实时图像。另外通过使用数据库工具箱,用户可以访问ODBC/JDBC兼容数据库中存储的图像。

MATLAB支持标准数据和图像格式,包括JPEG、TIFF、PNG、HDF、HDF-EOS、FITS、Microsoft Excel、ASCII和二进制文件等。它还支持多频带图像格式,如LANDSAT。同时MATLAB提供了低级I/O函数,可以让用户开发用于处理任何数据格式的自定义程序。

图像处理工具箱支持多种专用图像文件格式。例如对于医学图像,它支持DICOM文件格式,包括关联的元数据,以及Analyze 7.5和Interfile格式。另外此工具箱还可以读取NITF格式的地理空间图像和HDR格式的高动态范围图像等。

8.1.1  查询图像文件的信息

在MATLAB中,使用函数imfinfo能够获得图像处理工具箱所支持的任何格式的图像文件的信息,其调用语法为:

info = imfinfo(filename,fmt)

info = imfinfo(filename)

函数imfinfo返回一个结构体info,其中包括了图像文件的信息,filename是指定图像文件名的字符串,fmt是指定图像文件格式的字符串。

通过此函数获得的信息与图像文件的类型有关,但至少包含以下一些内容:

(1)Filename—文件名。

(2)FileModDate—文件最后修改时间。

(3)FileSize—文件大小,以字节为单位。

(4)Format—文件格式。

(5)FormatVersion—文件格式的版本号。

(6)Width—图像的宽度,以像素为单位。

(7)Height—图像的高度,以像素为单位。

(8)BitDepth—每个像素的位数。

(9)ColorType—颜色类型。

【例8-1】  imfinfo函数应用示例。

>> info = imfinfo('canoe.tif')          %  canoe.tif 是系统自带的图片

Filename: [1x63 char]     %  文件名及路径

FileModDate: '04-十二月-2000 13:57:56'  %  修改日期

FileSize: 69708              %  图片大小

Format: 'tif'               %  图片格式

FormatVersion: []

Width: 346            %  图片宽度

Height: 207           %  图片高度

BitDepth: 8              %  像素维数

ColorType: 'indexed'

FormatSignature: [73 73 42 0]

ByteOrder: 'little-endian'

NewSubFileType: 0

BitsPerSample: 8

Compression: 'PackBits'

PhotometricInterpretation: 'RGB Palette'

StripOffsets: [9x1 double]

SamplesPerPixel: 1

RowsPerStrip: 23

StripByteCounts: [9x1 double]

XResolution: 72

YResolution: 72

ResolutionUnit: 'None'

Colormap: [256x3 double]        %  颜色表

PlanarConfiguration: 'Chunky'

TileWidth: []

TileLength: []

TileOffsets: []

TileByteCounts: []

Orientation: 1

FillOrder: 1

GrayResponseUnit: 0.0100

MaxSampleValue: 255

MinSampleValue: 0

Thresholding: 1

Offset: 67910

8.1.2  图像文件的读写

在MATLAB中,可以通过文件导入向导读取图像文件,另外还可以通过命令来读取图像文件。

1.使用文件导入向导读取图像文件

在工具栏选择【Import Data】命令,即可弹出“Import Data”对话框,如图8-2所示,从中可以选择需要导入的图像文件。

然后回弹出导入向导窗口,如图8-3所示,从中选择需要导入的数据,单击Finish按钮即可完成图像文件的导入。

图8-2  选择需要导入的图像文件

图8-3  使用导入向导读取图像文件

2.使用命令导入图像文件

MATLAB提供了imread函数来读取图像文件到工作空间中。通过imread函数,用户可以导入多种文件格式的图像数据,如TIFF、HDF、BMP、JPEG、GIF、PCX、XWD、Cursor、Icon和PNG等格式。

通常,读取的大多数图像均为8bit像素,当这些图像加载到内存中时,MATLAB就将其存放在uint8类型数组中。此外MATLAB还支持16bit的PNG和TIF图像,当读取这类文件时,MATLAB就将其存储在uint16类型数组中。对于索引图像,即使图像数组的本身为uint8类型或uint16类型,imread函数仍将颜色映象表读取并存储到一个双精度的浮点类型的数组中。

【例8-2】  imread函数使用示例。

>> RGB = imread('football.jpg');      %  读入jpg图像文件到RGB

>> [X,map] = imread('trees.tif');      %  读入tif文件到[X,map]

>> whos

Name        Size                Bytes  Class     Attributes

RGB       256x320x3              uint8

X         258x350               90300  uint8

map       256x3                  6144  double

本例中用到的football.jpg和trees.tif是MATLAB图像处理工具箱中的测试图片。需要指出的是:[X,map]中的X存储的是图像,而map存储的则是颜色表。

3.图像文件的写入

为了把MATLAB工作空间中的图像数据用一种标准格式输出到一个图像文件中,需要使用imwrite函数来完成这个工作。imwrite函数用于将数据输出为多种标准的图像文件。

【例8-3】  imwrite函数调用示例。将上例中导入的数据以图像格式文件输出。

>> imwrite(RGB,'footballtemp.jpg')            %  写入jpg文件

>> imwrite(X,map,'treestemp.tif')             %  写入tif文件

通过调用以上命令,MATLAB的当前工作目录下就会新建名字为footballtemp.jpg和treestemp.tif的图像文件。