《MATLAB图像处理工具箱》由会员分享,可在线阅读,更多相关《MATLAB图像处理工具箱(74页珍藏版)》请在金锄头文库上搜索。
1、第第4章章 图像灰度变换图像灰度变换 Matlab对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、数学形态学处理等图像处理操作。图像处理工具箱主要有:图像处理工具箱主要有: Image Acquisition Toolbox(图像采集工具箱) Image Processing Toolbox(图像处理工具箱) Signal Processing Toolbox(信号处理工具箱) Wavelet Toolbox(小波分析
2、工具箱) Statistics Toolbox(统计工具箱) Bioinformatics Toolbox(生物信息学工具箱)4.1 MATLAB4.1 MATLAB图像处理程序的特点图像处理程序的特点n上手容易,开发周期短,见效快。n程序代码编写量明显较小n有专门的图像处理工具箱nMATLAB程序不能脱离MATLAB平台而独立存在4.2 4.2 图像处理工具箱的图像类型图像处理工具箱的图像类型图像处理工具箱支持4种图像类型,它们是: 真彩色图像(RGB images) 索引色图像(index images) 灰度图像(intensity images) 二值图像(binary images)
3、Matlab还支持由多帧图像组成的图像序列 真彩色图像真彩色图像真彩色图像用 R、G、B 3个分量表示1个像素的颜色,数据结构是一个mn3的多维数组。如果读取图像中(100,50)处像素值,可以查看三元组(100,50,1:3)。真彩色图像可用双精度存储,亮度值范围是0,1常用存储方法是无符号整型存储,亮度值范围为0,255 图图1 1 真彩色图像的结构真彩色图像的结构真彩色图像数据格式真彩色图像数据格式 RGB图像的表示方法图像的表示方法-三幅分量图像合成三幅分量图像合成索引色图像索引色图像索引图像是把像素值作为RGB调色板下标的图像。索引色图像包含2个结构,一个是调色板map;另一个是图像
4、数据矩阵X。调色板是一个有3列和若干行的色彩映像矩阵,矩阵每行代表一种色彩,通过3个分别代表红、绿、蓝颜色强度的双精度数,形成一种特定颜色。图像数据是uint8或是双精度的。Matlab中调色板的色彩强度是0,1中的浮点数,0代表最暗,1代表最亮。 图图2 索引色图像的结构索引色图像的结构 索引图像的数据格式索引图像的数据格式 索引图像的索引图像的double与与uint8型型 doubleuint8图像数据图像数据调色板调色板索引图像的表示方法索引图像的表示方法读入一幅索引图像的语句如下:X, map=imread(trees.tif);显示一幅索引图像,可使用语句:imshow(X, ma
5、p)或者:image(X) %用系统当前的颜色表显示索引图像colormap(map) %将系统当前颜色表设置为map举例:举例:X, map=imread(trees.tif);X, map=imread(trees.tif);image(X)image(X)其效果等同于:其效果等同于:imshow(X, colormap)imshow(X, colormap)举例:X, map=imread(trees.tif);image(X)colormap(map);其效果等同于:imshow(X, map)MATLAB提供了一些预定义的彩色表imshow(X, hsv)imshow(X, hsv)
6、imshow(X, autumn)imshow(X, autumn)imshow(X, copper)imshow(X, copper)imshow(X, gray(64)imshow(X, gray(64) 灰度图像灰度图像n存存储储灰灰度度图图像像只只需需要要一一个个数数据据矩矩阵阵,数数据据类类型型可可以以是是doubledouble也也可以是可以是uint8uint8。n 存存储储时时会会使使用用一一个个默默认认的的调调色色板板来来显显示示图图像。像。 二值图像二值图像n与与灰灰度度图图像像相相同同,二二值值图图像像只只需需一一个个数数据据矩矩阵阵,每每个个像像素素只只有有2个个灰灰度
7、度值值。可可以以采采用用uint8或或double类类型型存存储储,工工具具箱箱中中以以二二值值图图像像作作为为返返回回结结果果的的函函数数都都使使用用uint8类型。类型。 图像序列图像序列n图像处理工具箱支持将多帧图像连接成图像序列。使用cat函数将分散图像合并成图像序列,前提是各图像尺寸必须相同。n将A1、A2、A3、A4、A5五幅图像合并成一个图像序列A,Matlab语句为nA=cat (1,A1,A2,A3,A4,A5), 1维,纵向排列nA=cat (2,A1,A2,A3,A4,A5),2维,横向排列nA=cat (3,A1,A2,A3,A4,A5),3维,竖向排列 n图像序列也可
8、以产生一个四维数组,图像帧的序号在图像的长、宽、颜色后构成第四维。n一个包含了5幅400300真彩色图像的序列,大小为n 40030035n一个包含了5幅400300灰度或是索引图像的序列,其大小为n 40030015nA=cat (4,A1,A2,A3,A4,A5),4维n提取其中一帧(如第2帧):A(:,:,:,2) 4.3 Matlab4.3 Matlab图像类型转换图像类型转换 索引图像索引图像灰度图像灰度图像真彩图像真彩图像二值图像二值图像数据矩阵数据矩阵1.dither1.dither函数函数功能:图像抖动把RGB图像转换成索引图像把灰度图像转换成二值图像。 格式:X = dith
9、er(RGB,map) BW = dither(I) (1 1)RGBRGB图像抖动成索引图像图像抖动成索引图像 I=imread(autumn.tif); map=pink(1024); X=dither(I,map); imshow(I); figure, imshow(X,map); colorbar (2 2)灰度图像抖动成二值图像)灰度图像抖动成二值图像I=imread(rice.png);bw=dither(I);imshow(I);figure,imshow(bw); 2. gray2ind2. gray2ind函数函数 功能:将灰度图像转换成索引图像。 格式:X,map= gr
10、ay2ind(I,n) n的缺省值为64。 I=imread(cameraman.tif); X,map=gray2ind(I,16);subplot(121),imshow(I);subplot(122), imshow(X,map);3. grayslice3. grayslice函数函数功能:通过设定阈值将灰度图像转换成索引色图像。 格式:X=grayslice(I,n) I=imread(cameraman.tif); X=grayslice(I,16); imshow(I); figure,imshow(X,bone(16); 功能:将灰度图像、索引色图像和真彩色图像转化成二值图像。
11、 格式:BW=im2bw(I, level) BW=im2bw( X, map, level) BW=im2bw(RGB, level) level是一个归一化阈值,取值在0,1。 4.im2bw函数I=imread(autumn.tif);X=im2bw(I,0.5);imshow(I);figure,imshow(X); 功能:将索引图像转换成灰度图像。 格式:I= ind2gray(X, map) 5.ind2gray5.ind2gray函数函数功能:将索引色图像转换成真彩色图像。格式:RGB=ind2rgb(X, map) 例:I,map=imread(m83.tif); X=ind2
12、rgb(I,map); imshow(I,map); figure,imshow(X); 6.ind2rgb函数 功能:将一个数据矩阵转换成一幅灰度图像。 格式:I=mat2gray(A) 7.mat2gray7.mat2gray函数函数I = imread(rice.png);J = filter2(fspecial(sobel), I);K = mat2gray(J);figure, imshow(I), figure, imshow(K) 功能:将一幅真彩色图像转换成灰度图像。格式:I= rgb2gray(RGB)例:RGB=imread(autumn.tif); X=rgb2gray(
13、RGB); imshow(RGB); figure,imshow(X); 8. rgb2gray函数转换效果图转换效果图 功能:将真彩色图像转换成索引色图像。 格式:X,map = rgb2ind(RGB,n)例: RGB=imread(autumn.tif); X,map=rgb2ind(RGB,128)imshow(RGB); figure,imshow(X,map); 9. rgb2ind函数4.4 图像文件的读写和查询图像文件的读写和查询n imread:读取图形文件格式的图像;:读取图形文件格式的图像;n imwrite:写入图形文件格式的图像;:写入图形文件格式的图像;n imfi
14、nfo:获取图像的信息;:获取图像的信息;n loadsave:以:以Mat文件加载或保存矩阵数据;文件加载或保存矩阵数据;n imshow:显示加载到:显示加载到Matlab中的图像。中的图像。 n n 函数函数imread可完成图形图像文件的读取操作,其可完成图形图像文件的读取操作,其语法如下语法如下n 一般:一般:A=imread(filename, fmt)n 索引图像:索引图像:X, map=imread(filename, fmt) X, map=imread(m83.tif, tif)1 图形图像文件的读取图形图像文件的读取imdata = imdata = imread(ngc
15、6543a.jpg);imread(ngc6543a.jpg);image(imdata)image(imdata)nimread函函数数可可以以从从图图形形文文件件中中以以特特定定位位宽宽读读取取图图像像。读读取取的的大大多多数数图图像像均均为为8bit。加加载载到到内内存存中中时时,就就存存储在类储在类uint8中。中。n n对对于于索索引引图图像像来来说说,即即使使图图像像阵阵列列的的本本身身为为uint8或或uint16,imread函函数数仍仍然然将将颜颜色色映映像像表表读读取取并并存存储储到到一个双精度的浮点类型阵列中。一个双精度的浮点类型阵列中。 2 图形图像文件的写入(保存)图
16、形图像文件的写入(保存)nimwrite函数可以完成图形图像文件的写入操作,函数可以完成图形图像文件的写入操作,n其语法为:其语法为: imwrite(A, filename, fmt)n imwrite(X, map, filename, fmt)n缺缺省省的的保保存存方方式式:uint8数数据据格格式式。Matlab中中许许多多图图像都是像都是8bit,不需要双精度的浮点数据。,不需要双精度的浮点数据。imwrite(X, map, lena.bmp, bmp)A=imread(onion.png);A=imread(onion.png);B=A(50:100,100:150,:);B=A
17、(50:100,100:150,:);imwrite(B,onion-part.png)imwrite(B,onion-part.png)C=imread(onion-part.png);C=imread(onion-part.png);subplot(1,2,1)subplot(1,2,1)image(A);axis image;title(image(A);axis image;title(全部全部)subplot(1,2,2)subplot(1,2,2)image(C);axis image;title(image(C);axis image;title(部分部分)3 图形图像文件信息的
18、查询图形图像文件信息的查询nimfinfo函数用于从图像文件中查询其信息。所获取函数用于从图像文件中查询其信息。所获取信息依文件类型不同而不同,至少包含下面内容信息依文件类型不同而不同,至少包含下面内容n 文件名文件名 文件格式文件格式n 文件格式的版本号文件格式的版本号 文件修改时间文件修改时间 n 文件的字节大小文件的字节大小 图像的宽度(像素)图像的宽度(像素)n 图像的长度(像素)图像的长度(像素) 每个像素的位数每个像素的位数n 图像类型(图像类型(RGB图像、灰度图像还是索引图像)图像、灰度图像还是索引图像) imfinfo(autumn.tif)info = Filename:
19、1x64 char FileModDate: 01-十月-1996 16:19:44 FileSize: 27387 Format: jpg FormatVersion: Width: 600 Height: 650 BitDepth: 24 ColorType: truecolor FormatSignature: NumberOfSamples: 3 CodingMethod: Huffman CodingProcess: Sequential Comment: 1x69 char4 图像文件的显示图像文件的显示n图像显示函数图像显示函数imshow。其语法格式如下。其语法格式如下n灰度图
20、像灰度图像 imshow(I)n imshow(I, n)n imshow(I, low high)n二值图像二值图像 imshow(BW)n索引图像索引图像 imshow(X, map)n真彩色图像真彩色图像 imshow(RGB)其中其中n为灰度级数为灰度级数目,缺省值为目,缺省值为256。low high为图为图像数据的值域。像数据的值域。 索引图像及其显示索引图像及其显示n索引图像包括数据矩阵索引图像包括数据矩阵X和颜色映像矩阵和颜色映像矩阵map。n其其中中map是是一一个个p3的的数数据据矩矩阵阵,其其每每个个元元素素的的值值均均为为0, 1之之间间双双精精度度浮浮点点型型数数据据
21、。map矩矩阵阵的的每每一一行行分分别别表表示示红红色色、绿绿色色和和蓝蓝色色的的颜颜色色值值。而而数数据据矩矩阵阵X可以是可以是double和和uint8型的,调用格式如下:型的,调用格式如下:n imshow(X, map) 例例如如一一幅幅包包含含256色色的的uint8索索引引图像像,使使用用一一个个仅有有16色色的的调色色板板显示示,则所所有有数数值大大于于或或等等于于15的像素都将被的像素都将被显示示为调色板的最后一个色板的最后一个颜色。色。 借助不同的调色板显示图像,借助不同的调色板显示图像, X=imread(cameraman.tif);X=imread(cameraman.
22、tif); map=pink(256); map=pink(256); imshow(X,map);imshow(X,map); colorbar;%colorbar;%显示颜色条显示颜色条灰度图像及其显示灰度图像及其显示n 一一幅幅灰灰度度图图像像是是一一个个数数据据矩矩阵阵 I,其其中中数数据据均均代代表表了了在在一一定定范范围围内内的的颜颜色色灰灰度度值值。Matlab 把把灰灰度度图图像像用用数数据据矩矩阵阵的的形形式式进进行行存存储储,每每个个元元素素则则表表示示了了图图像像中中的的每每个个像像素素。矩矩阵元素可以是阵元素可以是doudle、uint8整数类型。整数类型。n 多多数数
23、情情况况下下,灰灰度度图图像像很很少少和和颜颜色色映映像像表表一一起起保保存存,但但在在显显示示灰灰度度图图像像时时,Matlab 仍仍然然在在后后台台使使用用系系统统预预定定义义的的缺省灰度颜色映像表。缺省灰度颜色映像表。 (1) 灰度图像显示最基本的调用格式灰度图像显示最基本的调用格式 imshow(I) Matlab 中中 imshow函函数数使使用用一一个个灰灰度度级级系系统统调调色色板板(R=G=B)来来显显示示灰灰度度图图像像。如如果果I是是double型型,若若像像素素值值为为0.0,则则显显示示为为黑黑色色,1.0则则显显示示为为白白色色,0.0和和1.0之之间间的的像像素值将
24、显示为灰影。素值将显示为灰影。 imshow函数显示灰度图像函数显示灰度图像(2) 使用明确指定的灰度级数目使用明确指定的灰度级数目 imshow(I, n)以下语句将显示一幅以下语句将显示一幅32个灰度级的图像个灰度级的图像I。 imshow(I, 32)n(3) 某些情况下,可能将一些超出数据惯例范围某些情况下,可能将一些超出数据惯例范围的数据显示为一幅灰度图像的数据显示为一幅灰度图像 对于对于double型数组为型数组为0,1,对于对于uint8型型数组为数组为0,255n为了将超过数据范围的数据显示为图像,用户可以为了将超过数据范围的数据显示为图像,用户可以直接定义数据范围,其调用格式
25、如下,直接定义数据范围,其调用格式如下,n imshow(I,low high)n 其中其中low、high分别为数据的最小和最大值。分别为数据的最小和最大值。 n如果用户使用一个空矩阵如果用户使用一个空矩阵 指定数据范围,指定数据范围, imshow将自动进行数据标度。将自动进行数据标度。 RGB图像及其显示图像及其显示imshow函数显示函数显示RGB图像的调用格式如下,图像的调用格式如下,imshow(RGB)参 数 RGB是 mn3的 数 组 。 imshow显 示 数 值(r,c,13)所描述颜色像素(r,c)。每个屏幕像素使用24位颜色系统直接显示真彩图像,系统给每个像素的红、绿、
26、蓝颜色分量分配8位(256级),这样就有1000多万种颜色(224)。 二二值值图像及其显示图像及其显示显示二显示二值值图像用如下语句,图像用如下语句, imshow(BW)二二值值图像是一个逻辑类,包括图像是一个逻辑类,包括0和和1两个数值,两个数值,像素像素0显示为黑色,像素显示为黑色,像素1显示为白色。显示为白色。通过通过NOT()命令命令可可对二进制图像取反,数值对二进制图像取反,数值0显示为白色,显示为白色,1显示为黑色。显示为黑色。例:例: BW=imread(circles.png); imshow(BW); figure, imshow(BW); 二二值值图像显示效果图像显示效
27、果 直接从磁盘显示图像直接从磁盘显示图像通常在显示图像前首先调用通常在显示图像前首先调用imread函数装载图像,将函数装载图像,将数据存储为数据存储为Matlab工作平台中的变量。工作平台中的变量。如果不在显示图像前装载图像,则使用以下命令格式如果不在显示图像前装载图像,则使用以下命令格式进行图像文件显示,进行图像文件显示, imshow filename imshow rice.pngimshow(rice.png)多幅图像文件的显示多幅图像文件的显示 创建新的图像窗口,每个图像显示在一个窗创建新的图像窗口,每个图像显示在一个窗口中口中 figure,imshow功能:新建一个图像窗口,用
28、于显示新图像功能:新建一个图像窗口,用于显示新图像(从而不让新的图像覆盖原来图像)。(从而不让新的图像覆盖原来图像)。调用调用imshow函数显示图像函数显示图像I=imread(rice.png)J=filter2(1 2;-1 -2,I) %用模板用模板1 2;-1 -2对图像滤波对图像滤波imshow(I)figure,imshow(J, )用用imshow显示滤波前后的图像显示滤波前后的图像 subplot(m,n,k),imshow %绘制并显示绘制并显示m行行n 列第列第k个子图个子图 例:例: X1=imread(rice.png); X2=imread(coins.png);
29、X3=imread(bag.png); subplot(1,3,1),imshow(X1); subplot(1,3,2),imshow(X2); subplot(1,3,3),imshow(X3);子图显示子图显示 load treesload treesX2,map2 = imread(forest.tif);X2,map2 = imread(forest.tif);subplot(1,2,1), subimage(X,map)subplot(1,2,1), subimage(X,map)subplot(1,2,2), subimage(X2,map2)subplot(1,2,2), su
30、bimage(X2,map2)多多图图显示显示montagemontage函数,函数,可用于显示某一文件夹下某一格式的可用于显示某一文件夹下某一格式的所有图像文件,组成一个四维矩阵,并显示在一个图像所有图像文件,组成一个四维矩阵,并显示在一个图像框中。框中。语法格式如下语法格式如下montagemontage(I I)montagemontage(D D,mapmap)例例 load mriload mri montage(D,map)montage(D,map)1 1)immovieimmovie 以动画方式显示各帧图像,既将各帧图片以动画方式显示各帧图像,既将各帧图片转换为转换为matla
31、bmatlab动画格式;只能用索引图像;动画格式;只能用索引图像;mov=immovie(X,map)mov=immovie(X,map)2 2)moviemovie 播放已记录的影片;播放已记录的影片;movie(M,n,fps)movie(M,n,fps)MM待播放的数据矩阵;待播放的数据矩阵;nn影片的播放次数,默影片的播放次数,默认为认为1 1;fpsfps影片的播放速度,既每秒播放的图影片的播放速度,既每秒播放的图片帧数,默认为片帧数,默认为1212帧帧/ /秒;秒;多帧图像的电影片段多帧图像的电影片段 mri=uint8(zeros(128,128,1,27);for frame=1:27 mri(:,:,:,frame),map=imread(mri.tif,frame);endmov=immovie(mri,map);movie(mov);将将mri.tif的每一帧读入的每一帧读入图相应的图像帧中图相应的图像帧中