《图像处理常用命令matlab归纳 .pdf》由会员分享,可在线阅读,更多相关《图像处理常用命令matlab归纳 .pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1. 读入并显示一幅图像clear % 清除所有的工作平台变量close all %关闭已打开的图形窗口I=imread (pout.tif); %读取图像 pout.tif(该图像是图像处理工具箱自带的图像),%存储在一个名为I 的数组中imshow(I) %显示图像 I 2. 检查内存中的图像whos % 查看图像数据 I 是如何存储在内存中的。3. 实现直方图均衡化figure % 生成一个新的图形窗口,避免后面的图像覆盖前面图像的显示imhist(I) % 创建描述图像 I 灰度分布的直方图I2=histeq(I); % 将图像的灰度值扩展到整个灰度范围,从而提高图像数组I 的对比度。
2、figure,imshow(I2) %显示修改过的图像I2 figure,imhist(I2) % 显示拓展后的灰度值的分布情况4. 保存图像imwrite(I2,pout.png); %将图像 I2 以 PNG 图像文件格式保存到磁盘5. 检查新生成文件的内容imfinfo(pout2.png) % 观察保存的图像文件信息图像处理的高级应用主要对一幅灰度图像rice.tif 进行一些较为高级的操作为例说明整个过程。1. 读取和显示图像clear % 清除所有的工作平台变量close all %关闭已打开的图形窗口I=imread(rice.png); %读取图像 rice.png (该图像是
3、图像处理工具箱自带的图像) imshow(I) %显示图像2. 估计图像背景background=imopen(I,strel(disk,15); %对图像 I 进行形态学开操作, 删除那些不完全包括% 在半径为 15 的圆盘中的对象,实现对背景亮度的估计figure,imshow(background) figure,surf(double(background(1:8:end,1:8:end),zlim(0 255); %以表面形式显示背景3. 从原始图像中减去背景图像I2=imsubtract(I,background); % 将背景图像 background从原始图像 I 中减去fig
4、ure,imshow(I2) 4. 调节图像对比度I3=imadjust(I2,stretchlim(I2),0 1); % 调节图像的对比度figure,imshow(I3); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 31 页 - - - - - - - - - 5. 使用阈值操作将图像转换为二进制图像level=graythresh(I3); bw=im2bw(I3,level); figure,imshow(bw) 6. 检查图像中的对象个数labeled,
5、numObjects=bwlabel(bw,4); % 确定图像中的米粒个数numObjects 101 7. 检查标记矩阵grain=imcrop(labeled) %选择并显示已标记的对象和部分背景内的像素RGB_label=label2rgb(labeled,spring,C,shuffle); %将标记矩阵 显示为一副伪彩色的 索引图像 ,在伪彩色的彩色图像中,%标记矩阵中的 每一个对象 都将被映射为 相关调色板中的不同颜色imshow(RGB_label); 8.计算图像中对象的统计属性graindata=regionprops(labeled,basic) %测量图像 或者区域的属
6、性 , 并返回一个结构数组。 当用于一个标记图像时, %它还为每一个标记分量创建一个结构元素。graindata(51).Area % 显示第 51个元素的属性graindata(51).BoundingBox,graindata(51).Centroid % 寻找最近的边缘和中心allgrains=graindata.Area; %创建一个新的向量allgrains,其包含每个米粒的范围allgrains(51) %查看第 51 个元素的范围max(allgrains) %获取最大的米粒大小biggrain=find(allgrains=404) % 返回最大米粒的标记号mean(allgr
7、ains) % 获取米粒的平均大小hist(allgrains,20) % 绘制包含 20 个柱的直方图图像格式:是存储图像采用的文件格式。不同的操作系统、不同的图像处理软件,所支持的图像格式都有可能不同。在实际应用中 经常会遇到的图像格式有:BMP、GIF 、TIFF 、PCX、JPEG、PSD、PCD、WMF 等。*(1) BMP(Bitmap) 文件*(2)GIF 文件*(3)TIF 文件*(4)JPEG 文件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 31 页
8、 - - - - - - - - - 图像类型: 是指数组数值与像素颜色之间定义的关系,它与图像格式概念有所不同。在 MATLAB 图像处理工具箱中,有 五种类型的图像 :(1) 二进制图像在一幅二进制图像中, 每一个像素 将取两个离散数值 (0 或 1)中的一个, 从本质上说 ,这两个数值 分别代表状态“开” (on)或“关” (off)。二进制图像仅 使用 unit8 或双精度类型 的数组来 存储。在图像处理工具箱中,任何返回一幅二进制图像的数组均使用 unit8 逻辑数组存储 该图像,并且使用一个 逻辑标志来指示unit8 逻辑数组的 数据范围 。若逻辑状态为“开”(on) ,数组范围为
9、 0,1;若为“关” (off) ,则数组范围为 0,255。(2) 索引图像索引图像 :是一种把 像素值 直接作为 RGB 调色板下标 的图像。在 MATLAB 中,索引图像 包含有 一个数据矩阵 X 和一个颜色映射 (调色板) 矩阵 map。数据矩阵: 可以是 unit8、unit16、双精度类型的;颜色映射矩阵map:是一个 m3 的数据矩阵,其中每个元素的值均为0,1之间的双精度浮点型数据, map 矩阵的 每一行 分别表示 红色、绿色和蓝色的颜色值。索引图像可把 像素值 直接映射为 调色板数值 ,每一个像素的颜色 通过使用 X 的数值 作为map 的下标 来获得,如 值 1 指向矩阵
10、 map 中的第一行 ,值 2指向第二行 ,依此类推。颜色映射 通常与索引图像存储在一起 ,当装载图像时, MATLAB 自动将颜色映射表与图像同时装载。图像矩阵 与颜色映射表 之间的 关系依赖于图像数据矩阵的类型。如果图像数据矩阵是 双精度类型 ,则数据 1 指向矩阵 map中的第一行,数据值 2 将指向map中的第二行 ,依此类推;如果图像矩阵是unit8 或 unit16 类型时,将产生一个偏移,即 数值 0表示矩阵 map中的第一行,数据值 1 将指向 map中的第二行 ,依此类推。(3) 灰度图像灰度图像通常由一个unit8、 unit16、 双精度类型的数组来描述, 其实质是一个
11、数据矩阵 I,该矩阵中的数据 均代表了在一定范围内的灰度级 ,每一个元素 对应于图像的 一个像素点 ,通常 0 代表黑色 ,1、255、65 535(针对不同存储类型)代表白色。(4) 多帧图像多帧图像 是一种包含多幅图像或帧的图像文件,又称为多页图像 或图像序列 。在 MATLAB 中,它是一个 四维数组 ,其中 第四维 用来指定 帧的序号 。在一个多帧图像数组中,每一幅图像 必须有 相同的大小和颜色分量 ,每一幅图像还要使用相同的调色板 。另外,图像处理工具箱中的许多函数(如:imshow)只能对多幅图像矩阵的前两维或三维进行操作,也可以对四维数组使用这些函数,但是必须单独处理每一帧 。如
12、果将一个数组传递给一个函数,并且数组的维数超过该函数设计的超作维数,那么得到的结果是不可预知的。(5) RGB 图像RGB 图像又称为 真彩色图像 ,它是利用 R、G、B 三个分量表示一个 像素的颜色 ,R、G、B 分别代表 红、绿、篮 3 种不同的颜色 ,通过三基色可以合成出任意颜色。所以对一个尺寸为 nm 的彩色图像来说,在MATLAB 中则存储为一个nm3 的多维数据数组 ,其中数组中的元素定义了图像中的每一个像素的红、绿、篮颜色值。 图形文件格式 把 RGB 图像存储名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精
13、心整理 - - - - - - - 第 3 页,共 31 页 - - - - - - - - - 为 24 位的图像, 红、绿、篮分量分别占用8 位。MATLAB 的 RGB 数组可以是双精度的浮点型、 8 位或 16 位无符号的整数类型。在一个双精度类型 的 RGB 数组中, 每一个颜色分量都是一个0,1范围内的数值。如: 颜色分量为 (0,0,0)的像素将显示为 黑色 ;颜色分量为 (1,1,1)的像素将显示为 白色 。每一个像素的 三个颜色分量都存储在数组的 第三维中 。 如: 像素 (10, 5) 的红、绿、 篮颜色值 分别保存在元素RGB(10,5,1)、RGB(10,5,2)、RG
14、B(10,5,3)中。例:创建一个简单的 RGB 图像,该图像包含某一范围内不中断的红、绿、篮颜色分量, 另外,针对每一个颜色分量各创建一幅图像来加以对比:RGB=reshape(ones(64,1)*reshape(jet(64),1,192),64,64,3); R=RGB(:,:,1); G=RGB(:,:,2); B=RGB(:,:,3); subplot(2,2, 1);imshow(R); subplot(2,2, 2);imshow(G); subplot(2,2, 3);imshow(B); subplot(2,2, 4);imshow(RGB);(1)图像颜色浓淡处理(图像抖
15、动)X=dither(RGB,map) % 通过抖动算法将 真彩色图像 RGB 按指定的颜色 (调色板)map 转换成索引色图像 XX=dither(RGB,map,Qm,Qe) %利用给定的参数Qm,Qe从真彩色图像 RGB 中产生 索引色图像 X。%Qm 表示沿每个颜色轴反转颜色图的量化(即对于补色各颜色轴)的位数,%Qe 表示颜色空间计算误差的量化误差。% 如果 QeQm,则不进行抖动操作。 Qm 的默认值是 5,Qe的默认值是 8。BW=dither(I) %通过抖动算法将 矩阵 I 中的灰度图像 转换为 二进制图像 。注意:输入图像 可以是双精度类型或8 位无符号类型,其他参数必须是
16、双精度类型。如果输出的图像是二值图像或颜色种类少于256 的索引图像时,为uint8 类型,否则为 doule型。例:由 RGB 图像产生一个 索引图像使用 索引图像chess.met的颜色图map,通过 抖动 map 中的颜色 ,产生 RGB 图像autumn.tif 的近似索引图像 。load chess; RGB=imread(autumn.tif); subplot(1,2,1);imshow(RGB); Y=dither(RGB,map) subplot(1,2,2);imshow(Y,map);(2)灰度图像转换为索引图像X,map=gray2ind(I,n)%按指定 的灰度级数
17、n 和颜色图 map,将 灰度图像 I 转换成 索引色%图像 X,n 的默认值为 64。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 31 页 - - - - - - - - - 例:将灰度图像 pout.tif 转化成索引图像 X,颜色图分别为 gray(128)和 gray(16)。I=imread(pout.tif); I1,map1=gray2ind(I, 128); I2,map2=gray2ind(I, 16); subplot(1,3,1);imshow(
18、I1,map1); subplot(1,3,2);imshow(I2,map2); subplot(1,3,3);imshow(I);(3)索引图像转换为灰度图像I=ind2gray(X,map)%将具有颜色图 map 的索引色图像 X 转换成 灰度图像 I, 去掉了图像的%色度和饱和度, 仅保留了 图像的亮度信 息。%输入图像可以是double或 unit8 类型。例:将一幅索引图像 trees.mat转换成灰度图像。load trees I=ind2gray(X,map); subplot(1,2,1);imshow(X,map); subplot(1,2,2);imshow(I);(4)
19、RGB 图像转换为灰度图像I=rgb2gray(RGB)%将真彩色图像 RGB 转换成灰度图像 I 。Newmap=rgb2gray(map)% 将颜色图 map 转换成 灰度级颜色图 。注意: 如果输入的是真彩色图像 ,则图像可以是8 位无符号类型或双精度类型,输出图像I 与输入图像类型相同。如果输入 的是颜色图 ,则输入和输出的图像均为双精度类型。*例: 将 RGB 图像 flowers.tif 转换为灰度图像。RGB=imread(flowers.tif); figure(1);imshow(RGB) figure(2);Y=rgb2gray(RGB);imshow(Y)(5)RGB 图
20、像转换为索引图像X,map=rgb2ind(RGB)%直接将 RGB 图像 转换为具有颜色图 map 的矩阵 X. X,map=rgb2ind(RGB,tol)% 用均匀量化 的方法将 RGB 图像转换为索引图像X. X,map=rgb2ind(RGB,n)%使用最小方差量 化的方法将 RGB 图像转换为索引图像,%map 中包括至少 n 个颜色 。X=rgb2ind(RGB,map)% 通过将 RGB 中的颜色 与颜色图 map 中最相近的颜色匹配 ,% 将 RGB 图像转换为具有 map 颜色图的索引图像。=rgb2ind(,dither_option)% 通过 dither_option
21、参数来设置是否抖动。 dither_option 为 dither 表示使用抖动 ,以达到% 较好的颜色效果; 缺省时为 nodither,使用了新颜色图中最接近的颜色来画原图的颜色。*例: 将 RGB 图像 flowers.tif转换为索引图像。RGB=imread(flowers.tif); figure(1);imshow(RGB) figure(2);Y=rgb2ind(RGB,128);imshow(Y)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 31 页
22、- - - - - - - - - (6)索引图像转换为 RGB 图像RGB=ind2rgb(X,map)% 将矩阵 X 及相应颜色图 map 转化成真彩图像 RGB。输入图像 X 可以是双精度类型或8 位无符号类型, 输出图像 RGB 为双精度类型。例:将索引图像 wmandril.mat 转换为 RGB 图像。load wmandril; figure(1);imshow(X,map); I=ind2rgb(X,map); figure(2);imshow(I)(7)通过阈值化方法将图像转换为二值图像im2bw 函数: 通过设置亮度阈值 将真彩图像 、索引图像 及灰度图像 转化成二值图像
23、。在转换过程中,如果 输入图像不是灰度图像,首先将其转换为灰度级图像,然后通过阈值化将灰度级图像转换成二值图像。输出二值图像在输入图像所有亮度小于给定值 (level 取值范围为0,1)像素点处 均为 0,其他均为 1。其语法格式为:BW=im2bw(I,level)% 将灰度图像 I 转化为黑白二值图像。BW=im2bw(X,map,level)% 将带有颜色图 map的索引图像 X 转化为黑白二值图像。BW=im2bw(RGB,level)%将 RGB 图像 转化为黑白二值图像。注意:输入图像 可以是双精度类型或8 位无符号类型, 输出图像 为 8 位无符号类型。例:通过阈值化方法将 索引
24、图像 trees.mat转换为 二值图像 ,阈值为 0.4。load trees; BW=im2bw(X,map,0.4); figure(1);imshow(X,map); figure(2);imshow(BW)(8)通过阈值化方法从灰度图像产生索引图像X=grayslice(I,n)%将灰度图像 I 均匀量化为 n 个等级 ,然后转换为 伪彩色图像 X。X=grayslice(I,v)%按指定的阈值向量v (每一个元素都在 0 和 1 之间)对图像 I 的值域 进行划分,而后转换成 索引图像 X。注意:输入图像 I 可以是双精度类型或8 位无符号类型。如果阈值数量小于 256, 则返回图
25、像 X 的数据类型是 8位无符号类型 , X 的值域为 0,n或0,length(v);否则,返回图像 X 为双精度类型 ,值域为 1,n+1或1,length(v)+1。*例:将一幅灰度图像转换成索引图像。I=imread(alumgrns.tif); figure(1);imshow(I); X=grayslice(I,16); figure(2);imshow(X,hot(16);(9)将矩阵转换为灰度图像I=mat2gray(X,xmin,xmax)% 按指定的取值区间xmin,xmax将数据矩阵X 转换为 图像I,xmin 对应灰度0(最暗 即黑) ,%xmax 对应灰度 1(最亮即
26、白) 。如果 不指定区间 min,max时,MATLAB 则自动将 X阵中% 最小设为 xmin,最大 设为 xmax。注意:输入 X 和输出图像 I 都是双精度类型。实际上,mat2gray 函数与 imshow函数功能类名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 31 页 - - - - - - - - - 似。Imshow 函数也可用来使数据矩阵可视化。*例:将图像滤波后产生的矩阵转换为灰度图像。I=imread(saturn.tif); J=filter2(f
27、special(sobel),I); K=mat2gray(J); figure(1);imshow(I); figure(2);imshow(K);3.3 图像的显示图像的显示过程: 将图像从 一组离散数据 还原为 一幅可见的图像 的过程。图像的显示是提高图像处理分析性能非常有用的一个手段 ,通过图像的显示,可以监视图像处理过程,并与处理分析交互地控制处理分析过程。图像显示 最重要的特性 是图像的大小、光度分辨率、灰度线性、平坦能力和噪声特性等,这些显示特性将共同决定一个数字图像显示系统的质量及其在特定应用中的适用性等性能指标。3.3.1 标准图像显示技术Matlab 显示图像的 主要方法
28、是调用 image函数 ,该函数可创建一个句柄图形图像对象,并且包含设置该对象的各种属性的调用语法;此外,还提供了与image 函数类似的imagesc函数,利用该函数,可以实现对输入图像数据的自动缩放。同时,还包含了一个附加的显示函数,即 imshow函数,与 image和 imagesc函数类似, imshow 函数可用于创建句柄图形图像对象。此外,该函数也可以自动设置各种句柄属性和图像特征,以优化显示效果。(1)imshow函数当调用 imshow 函数显示图像时,将自动设置图形窗口、坐标轴和图像属性,以控制图像数据在 MATLAB 的解释方式。在 Matlab 中,imshow 函数的
29、语法如下:imshow(I,n) imshow(I,low,high) imshow(BW) imshow(,display_option) imshow(x,y,A, ) imshow filename h=imshow() 根据用户使用参数的不同和MATLAB 工具箱的设置, imshow 函数在调用时 除了完成前面提到的属性设置外,还可以:设置其他的图形窗口对象和坐标轴对象的属性以定制显示效果。例如,可以通过设置隐藏坐标轴及其标示;包含或隐藏图像边框 ;调用函数以 显示没有彩色渐变效果的图像。(2)显示索引图像利用 imshow 函数显示 MATLAB 的索引图像时, 可以同时指定 图像
30、的 数据矩阵 和颜色映射表,形如:imshow(X,map) 其中,对于 X 中的每个像素, imshow 都将其显示为存储在map 映射表矩阵的相应的行所对应的颜色。(3)显示灰度图像名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 31 页 - - - - - - - - - 调用 imshow 函数显示灰度图像的语法如下:imshow(I) imshow(I,N) 其中: I 为灰度图像数据矩阵, N 为整数,用于指定对应于灰度颜色映射表中的索引数。*例:I=imsh
31、ow(windows.bmp); imshow(I,64); %绘制出具有 64 个灰度等级的灰度图*例:I=imshow(windows.bmp); imshow(I,2); %绘制出具有 2 个灰度等级的灰度图,即黑白图。(4)显示二进制位图imshow 函数显示二进制位图的语法如下:imshow(BW) 如果该位图的图像矩阵 属于类 double,则 imshow 函数将其显示为灰度图 来对待,图像数据矩阵中 值 0 所对应的像素显示为 黑色,值 1 所对应的像素显示为 白色 。(5)显示 RGB 图像显示 RGB 图像的语法如下:imshow(RGB) 其中:RGB 为一个 mn3 的
32、图像数据矩阵。在Matlab 中,该数据矩阵属于类double、类 uint8 或 uint16。(6)显示图形文件中的图像通常情况下, 在显示图像时, 该图像的对象数据保存在MATLAB 运行内存中的一个或多个变量中。 但是,如果用户 将图像保存在可以通过imread函数读取的图形文件中 ,则可通过下面的语法直接将其显示出来:imshow filename 如果图像是 多帧的,那么 imshow 将仅仅 显示第一帧 ,这种调用格式对于图像扫描非常有用。注意: 在使用这种格式时,该 图形文件必须在当前目录下,或在 MATLAAB 目录下 。如果图像数据 没有保存在 MATLAB 工作平台中 ,
33、可以通过 使用 getimage函数将从当前的句柄图形图像对象中获取图像数据。*例:rgb=getimage;下面的代码可以显示一幅小孩儿的图像:imshow kids.tif(7)显示非图像数据非图像数据 :是指其 数据矩阵的元素值落在“合法”范围之外。对于 double数组来说,该范围是 0,1;对于 uint8 数组来说,该范围是 0,255;对于 uint16 数组来说,该范围是 0,65 535。例:假设将一个灰度图进行过滤操作,则得到的结果数据可能在“合法”范围之外。此时显示该结果数据必须使用下面的语法:imshow(I,low,high) *例: 先读取 testpat.tif
34、图形文件,然后对其进行过滤操作,再将结果数据显示出来:I=imread(testpat.tif); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 31 页 - - - - - - - - - J=filter(1 2;-1 -2,I); imshow(I); figure,imshow(J,);3.3.2 特殊图像显示技术在 MATLAB 的影像工具箱中,除了imshow 函数外,还提供了一些实现特殊显示功能的函数。它们与 MATLAB 自身提供的图形函数相结合,为图像
35、显示提供了各种特殊显示技术,包括有:图像显示中 添加颜色条 ;显示多帧图像阵列;图像上的 区域缩放 ;将图像纹理 映射到 表面对象 上;显示多幅图像 。(1) 添加颜色条;在 MATLAB 的图像显示中,可以利用colorber函数将颜色条添加到坐标轴对象中。如果该坐标轴对象包含一个图像对象,则添加的颜色条将指示出该图像中不同颜色的数据值。*例:先过滤一个类为 uint8的图像,然后将其显示为灰度图,并添加颜色条:I=imread(saturn.tif); h=1 2 1;0 0 ;-1 -2 -1; J=filter2(h,I); imshow(J,); colorbar ;(2) 显示多帧
36、图像阵列;MTTLAB 支持的多帧图像的文件格式包括 HDF和 TIFF 两种。文件一旦被读入MATLAB ,多帧图像的 显示帧数 由矩阵的 第四维数值 来决定。在多阵列中查看图像,有下面几种方式:独立显示每一帧 ,调用 imshow函数;同时显示所有的帧 ,调用 montage函数;将多帧阵列转换为动画电影,调用 immovie 函数。1) 单帧显示利用 MATLAB 标准的索引方法 指定帧号 ,调用 imshow函数 ,就可独立显示特定的帧。例:load mri imshow(D(:,:,:,7);其中: D为 MRI (磁共振图像)中的多帧图像阵列,调用imshow函数显示其中的第7 帧
37、。2) 多帧显示调用 montage函数可实现多帧显示,该函数的语法如下:montage(I) montage(BW) montage(X,map) montage(, )例:显示 MRI的所有帧的代码如下:load mri 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 31 页 - - - - - - - - - montage(D,map);3) 动画显示利用 immovie 函数 ,可以从多帧图像阵列中 创建 Matlab 电影动画 。值得注意的是:该函数 只能应
38、用于索引图像 ,所以,如果希望将其他类型的图像阵列转换为电影动画,则首先必须将该图像类型转换为索引类型。例:mov=immovie(D,map); colormap(map); movie(mov)(3) 图像上的区域缩放;利用 zoom命令可实现图像上的任意区域的缩放。在命令行中输入 下面的代码:zoom on 回车执行后, matlab 的图形窗口对象 进入区域缩放状态 。此时,按下鼠标左键,拖动鼠标指示,则图形窗口中将出现以虚线框表示的选择矩形。松开鼠标键后,则该选中的区域将被放大到整个图形窗口的显示空间。在放大区域中 单击鼠标右键 可将刚刚放大的图形 恢复到原来的状态 。如果命令行输入
39、下面的代码:zoom off 则可关闭 图形窗口的缩放功能。(4) 纹理映射在 Matlab 中,专门提供了一个 对图像进行纹理映射处理函数warp,使之显示在三维空间中。 Wrap函数的语法格式 如下:warp(X,map) warp(I,n) warp(BW) warp(RGB) warp(z, , ) warp(x,y,z, ) h=warp(, )在 Matlab 中,纹理映射 是利用双线性渐变算法 将图像映射到某个表面栅格上。*例:x,y,z=cylinder; I=imread(testpat1.tif); warp(x,y,z,I); %将 testpat1.tif映射到圆柱体表
40、面上 。有时图像可能不是按照所期望的形式进行纹理映射的,此时可以对纹理映射的外观进行修改,其方法之一就是修改坐标轴的Xdir 、Ydir 和 Zdir 属性值。(5) 显示多幅图像。MATLAB 没有对用户想要同时显示的图像数目进行限制,然而,由于受计算机硬件配置的影响,图像显示数目通常会存在一些系统限制。显示多幅图像 最简单的方法就是 在不同的图形窗口中显示它们。imshow函数 总是在当前窗口中显示一幅图像,如果想同时显示两幅图像,那么第二幅图像就会替代第一幅图像。为了避免图像在当前窗口中的覆盖现象,在调imshow函数之前可使用figure命令来创建一个新的空图形窗口。名师资料总结 -
41、- -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 31 页 - - - - - - - - - 例:imshow(I) figure,imshow(I2) figure,imshow(I3)当采用该方法时,创建的图形窗口初始化是空白的。如果使用的是 8 位显示系统,那么必须确保调色板人口的总数不超过 256。注意: 灰度图像总是使用调色板来进行显示的,所以这些图像所使用的颜色通道总数不能超过 256。为了避免产生 同时显示图像的 不正确的显示结果 :1)可采用对调色板进行操作的方法,使之使
42、用较少的颜色2)将图像转换为 RGB 格式再进行显示3)使用 ind2rgb 函数将索引图像转换为RGB 图像: imshow(ind2rgb(X,map) 4)简单使用 cat 命令将一幅 灰度图像 显示为一幅 RGB 图像 :imshow(cat(3,I,I,I)可以采用两种方法 将多幅图像显示在同一个单独的图形窗口中。联合使用 imshow函数和 subplot函数;联合使用 subimage 函数和 subplot函数;subplot函数将一个图形窗口划分为多个显示区域,其语法格式为:subplot(m,n,p) 这种格式将图形窗口 划分为 m n 个矩形显示区域 ,并激活第 p 个显
43、示区域 。例:如果希望 并排显示两幅图像 ,可使用以下语句:X1,map1=imread(forest.tif); X2,map2=imread(trees.tif); subplot(1,2,1),imshow(X1,map1); subplot(1,2,2),imshow(X2,map2); 若共享调色板 出现的显示结果 不令人满意 ,可以使用 subimage 函数来显示,也可以在装载图像时将所有图像映射到同一个调色板中,这个调色板不是共享调色板情况下所采用的某一幅图像的调色板,而是映射后包含所有图像调色板信息的一个新调色板。subimage 函数在显示图像之前首先将图像转换为RGB 图
44、像,因此不会出现调色板问题。该函数的语法格式为:subimage(X,map) % 在一个窗口里显示多个索引图像。subimage(I) % 在一个窗口里显示多个灰度图像。subimage(RGB) % 在一个窗口里显示多个真彩色图像。subimage(x,y, , ) % 将图像按指定的坐标系 (x,y) 显示。H=subimage(, ) % 返回图像对象的句柄,其中输入的图像可以是uint8 或 double 类型。以下代码将显示与上面同样的两幅图像,其程序清单为:X1,map1=imread(forest.tif); X2,map2=imread(trees.tif); subplot
45、(1,2,1),subimage(X1,map1); subplot(1,2,2),subimage(X2,map2); 3.3.3 图像显示中的常见问题(1)彩色图像显示为灰度图像名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 31 页 - - - - - - - - - 图像可能是一幅索引图像,这就意味显示这幅图像需要一个调色板。产生这个问题的原因可能是在装载索引图像时函数的调用方法不正确,正确调用格式如下:X,map=imread(filename.ext); 另
46、外,还有注意使用imshow函数的正确形式:imshow(X,map); (2)二值图像显示为全黑图像使用 islogical或 whos命令检查该图像矩阵的 逻辑标志是否置为on。 如果图像 是逻辑的 ,那么 whos命令将在类型头部单词array 后面显示 logical 。如果二值图像 是自己创建的 ,那么产生这个问题的原因可能是图像类型为uint8, 记住 uint8 类型有灰度图像变换范围是 0,255,而不是 0,1。(3)装载的是多帧图像,但是MATLAB 却仅仅显示一帧图像必须单独装载多帧图像的每一帧,可以使用一个 for 循环来实现 。可以先调用 imfinfo 函数获知图像
47、帧数和图像维数。3.4 图像运算3.4.1图像的点运算点运算 (对比度增强 、对比度拉伸 、灰度变换 ):是一种通过 对图像中的 每个像素 (即像素点上的灰度值 )进行计算 ,从而改善图像显示效果 的操作。点运算常用于改变图像的灰度范围及分布,是图像数字化及图像显示的重要工具。典型的点运算应用 包括:光度学标定 :通过对图像传感器的 非线性特性做出补偿 来反映某些物理特性 ,如光照强度、光密度等;对比度增强 :调整图像的亮度、对比度,以便观察;显示标定 :利用点运算使得图像 在显示时能够突出所有用户感兴趣的特征;图像分割 :为图像添加轮廓线 ,通常被用来辅助后续运算中的边界检测;图像裁剪 :将
48、输出图像的 灰度级限制在可用范围。MATLAB 图像处理工具箱 没有提供 对图像进行直接点运算的函数, 而将图像的点运算过程直接集成在 某些图像处理 函数组 中(如:直方图均衡化函数histeq 和 imhist) 。如果用户 仅仅是希望对图像 进行点运算 处理,那么可充分利 用 MATTAB 强大的 矩阵运算能力 ,对图像数据矩阵调用各种 MATLAB 计算函数进行处理。*例: 将灰度图像使用的 灰度变换函数 进行线性点运算的程序清单:rice=imread(rice.tif); I=double(rice); J=I*0.43+60; rice2=uint8(J); subplot(1,2
49、,1),imshow(rice); subplot(1,2,2),imshow(rice2);3.4.2 图像的代数运算图像的代数运算: 是图像的标准算术操作的实现方法,是两幅输入图像之间进行点对点的加、减、乘、除运算后得到输出图像的过程。MATLAB图像处理工具箱包含了一个能够实现所有非稀疏数值数据的算术操作的函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 31 页 - - - - - - - - - 集合。使用图像处理工具箱中的 图像代数运算函数无须再进行数据类
50、型间的转换,这些函数能够接受 8 位无符号类型 或 16 位无符号类型 数据,并返回相同格式的图像结果。值得注意的是:无论进行哪一种代数运算都要保证输入图像的大小相等,且类型相同。针对代数运算的结果很容易超出数据类型允许的范围,图像的代数运算函数使用了以下截取规则 使运算结果符合数据范围的要求: 超出范围的整数数据 将被截取为数据范围的极值,分数结果 将被四舍五入 。(1)图像的加法运算图像相加 一般用于 对同一场景 的多幅图像 求平均效果 (平均是指效果而言,并非算术平均) ,以便有效地 降低具有叠加性质的随机噪声。MATLAB中的 imadd 函数用于进行 两幅图像的加法 或给一幅图像加上