图像处理常用命令matlab
更新时间:2024-06-08 06:39:01 阅读量: 综合文库 文档下载
- 图像处理常用算法推荐度:
- 相关推荐
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的对比度。 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 (该图像是图像处理工具箱自带的图像) 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中减去 figure,imshow(I2)
4. 调节图像对比度
I3=imadjust(I2,stretchlim(I2),[0 1]); %调节图像的对比度 figure,imshow(I3);
5. 使用阈值操作将图像转换为二进制图像 level=graythresh(I3); bw=im2bw(I3,level); figure,imshow(bw)
6. 检查图像中的对象个数
[labeled,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')
%测量图像或者区域的属性,并返回一个结构数组。当用于一个标记图像时,%它还为每一个标记分量创建一个结构元素。
graindata(51).Area %显示第51个元素的属性
graindata(51).BoundingBox,graindata(51).Centroid %寻找最近的边缘和中心
allgrains=[graindata.Area]; %创建一个新的向量allgrains,其包含每个米粒的范围 allgrains(51) %查看第51个元素的范围
max(allgrains) %获取最大的米粒大小
biggrain=find(allgrains==404) %返回最大米粒的标记号
mean(allgrains) %获取米粒的平均大小
hist(allgrains,20) %绘制包含20个柱的直方图
图像格式:是存储图像采用的文件格式。不同的操作系统、不同的图像处理软件,所支持的图像格式都有可能不同。
在实际应用中经常会遇到的图像格式有:BMP、GIF、TIFF、PCX、JPEG、PSD、PCD、
WMF等。
*(1) BMP(Bitmap)文件 *(2)GIF文件 *(3)TIF文件 *(4)JPEG文件
图像类型:是指数组数值与像素颜色之间定义的关系,它与图像格式概念有所不同。 在MATLAB图像处理工具箱中,有五种类型的图像:
(1) 二进制图像
在一幅二进制图像中,每一个像素将取两个离散数值(0或1)中的一个,从本质上说,这两个数值分别代表状态“开”(on)或“关”(off)。
二进制图像仅使用unit8或双精度类型的数组来存储。
在图像处理工具箱中,任何返回一幅二进制图像的数组均使用unit8逻辑数组存储该图像,并且使用一个逻辑标志来指示unit8逻辑数组的数据范围。
若逻辑状态为“开”(on),数组范围为[0,1];若为“关”(off),则数组范围为[0,255]。
(2) 索引图像
索引图像:是一种把像素值直接作为RGB调色板下标的图像。
在MATLAB中,索引图像包含有一个数据矩阵X和一个颜色映射(调色板)矩阵map。数据矩阵:可以是unit8、unit16、双精度类型的;
颜色映射矩阵map:是一个m×3的数据矩阵,其中每个元素的值均为[0,1]之间的双精度浮点型数据,map矩阵的每一行分别表示红色、绿色和蓝色的颜色值。
索引图像可把像素值直接映射为调色板数值,每一个像素的颜色通过使用X的数值作为map的下标来获得,如值1指向矩阵map中的第一行,值2指向第二行,依此类推。
颜色映射通常与索引图像存储在一起,当装载图像时,MATLAB自动将颜色映射表与图像同时装载。
图像矩阵与颜色映射表之间的关系依赖于图像数据矩阵的类型。
如果图像数据矩阵是双精度类型,则数据1指向矩阵map中的第一行,数据值2将指向map中的第二行,依此类推;
如果图像矩阵是unit8或unit16类型时,将产生一个偏移,即数值0表示矩阵map中的第一行,数据值1将指向map中的第二行,依此类推。
(3) 灰度图像
灰度图像通常由一个unit8、unit16、双精度类型的数组来描述,其实质是一个数据矩阵I,该矩阵中的数据均代表了在一定范围内的灰度级,每一个元素对应于图像的一个像素点,通常0代表黑色,1、255、65 535(针对不同存储类型)代表白色。
(4) 多帧图像
多帧图像是一种包含多幅图像或帧的图像文件,又称为多页图像或图像序列。 在MATLAB中,它是一个四维数组,其中第四维用来指定帧的序号。
在一个多帧图像数组中,每一幅图像必须有相同的大小和颜色分量,每一幅图像还要使用相同的调色板。另外,图像处理工具箱中的许多函数(如:imshow)只能对多幅图像矩阵的前两维或三维进行操作,也可以对四维数组使用这些函数,但是必须单独处理每一帧。如果将一个数组传递给一个函数,并且数组的维数超过该函数设计的超作维数,那么得到的结果是不可预知的。
(5) RGB图像
RGB图像又称为真彩色图像,它是利用R、G、B三个分量表示一个像素的颜色,R、G、B分别代表红、绿、篮3种不同的颜色,通过三基色可以合成出任意颜色。所以对一个尺寸为n×m的彩色图像来说,在MATLAB中则存储为一个n×m×3的多维数据数组,其中数组中的元素定义了图像中的每一个像素的红、绿、篮颜色值。图形文件格式把RGB图像存储
为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)、RGB(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)图像颜色浓淡处理(图像抖动)
X=dither(RGB,map) %通过抖动算法将真彩色图像RGB按指定的颜色(调色板)map转换
成索引色图像X
X=dither(RGB,map,Qm,Qe)
%利用给定的参数Qm,Qe从真彩色图像RGB中产生索引色图像X。
%Qm表示沿每个颜色轴反转颜色图的量化(即对于补色各颜色轴)的位数, %Qe表示颜色空间计算误差的量化误差。
%如果Qe 注意: 输入图像可以是双精度类型或8位无符号类型,其他参数必须是双精度类型。 如果输出的图像是二值图像或颜色种类少于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) %按指定的灰度级数n和颜色图map,将灰度图像I转换成索引色 %图像X,n的默认值为64。 例:将灰度图像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(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)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图像转换为索引图像 [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参数来设置是否抖动。dither_option为dither表示使用抖动,以达到 %较好的颜色效果;缺省时为nodither,使用了新颜色图中最接近的颜色来画原图的颜色。 *例:将RGB图像flowers.tif转换为索引图像。 RGB=imread('flowers.tif'); figure(1);imshow(RGB) figure(2);Y=rgb2ind(RGB,128);imshow(Y) 例:imshow(I) figure,imshow(I2) figure,imshow(I3) 当采用该方法时,创建的图形窗口初始化是空白的。 如果使用的是8位显示系统,那么必须确保调色板人口的总数不超过256。 注意:灰度图像总是使用调色板来进行显示的,所以这些图像所使用的颜色通道总数不能超 过256。 为了避免产生同时显示图像的不正确的显示结果: 1)可采用对调色板进行操作的方法,使之使用较少的颜色 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个显示区域。 例:如果希望并排显示两幅图像,可使用以下语句: [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图像,因此不会出现调色板问题。该函数的语法格式为: 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(1,2,1),subimage(X1,map1); subplot(1,2,2),subimage(X2,map2); 3.3.3图像显示中的常见问题 (1)彩色图像显示为灰度图像 图像可能是一幅索引图像,这就意味显示这幅图像需要一个调色板。产生这个问题的原因可能是在装载索引图像时函数的调用方法不正确,正确调用格式如下: [X,map]=imread('filename.ext'); 另外,还有注意使用imshow函数的正确形式: imshow(X,map); (2)二值图像显示为全黑图像 使用islogical或whos命令检查该图像矩阵的逻辑标志是否置为on。如果图像是逻辑的,那么whos命令将在类型头部单词array后面显示logical。如果二值图像是自己创建的,那么产生这个问题的原因可能是图像类型为uint8,记住uint8类型有灰度图像变换范围是[0,255],而不是[0,1]。 (3)装载的是多帧图像,但是MATLAB却仅仅显示一帧图像 必须单独装载多帧图像的每一帧,可以使用一个for循环来实现。可以先调用imfinfo函数获知图像帧数和图像维数。 3.4 图像运算 3.4.1图像的点运算 点运算(对比度增强、对比度拉伸、灰度变换):是一种通过对图像中的每个像素(即像素点上 的灰度值)进行计算,从而改善图像显示效果的操作。 点运算常用于改变图像的灰度范围及分布,是图像数字化及图像显示的重要工具。 典型的点运算应用包括: ①光度学标定:通过对图像传感器的非线性特性做出补偿来反映某些物理特性,如光照强度、 光密度等; ②对比度增强:调整图像的亮度、对比度,以便观察; ③显示标定:利用点运算使得图像在显示时能够突出所有用户感兴趣的特征; ④图像分割:为图像添加轮廓线,通常被用来辅助后续运算中的边界检测; ⑤图像裁剪:将输出图像的灰度级限制在可用范围。 MATLAB图像处理工具箱没有提供对图像进行直接点运算的函数,而将图像的点运算过程直接集成在某些图像处理函数组中(如:直方图均衡化函数histeq和imhist)。如果用户仅仅是希望对图像进行点运算处理,那么可充分利用MATTAB强大的矩阵运算能力,对图像数据矩阵调用各种MATLAB计算函数进行处理。 *例:将灰度图像使用的灰度变换函数进行线性点运算的程序清单: rice=imread('rice.tif'); I=double(rice); J=I*0.43+60; rice2=uint8(J); subplot(1,2,1),imshow(rice); subplot(1,2,2),imshow(rice2); 3.4.2 图像的代数运算 图像的代数运算:是图像的标准算术操作的实现方法,是两幅输入图像之间进行点对点的加、减、乘、除运算后得到输出图像的过程。 MATLAB图像处理工具箱包含了一个能够实现所有非稀疏数值数据的算术操作的函数 集合。 使用图像处理工具箱中的图像代数运算函数无须再进行数据类型间的转换,这些函数能够接受8位无符号类型或16位无符号类型数据,并返回相同格式的图像结果。 值得注意的是:无论进行哪一种代数运算都要保证输入图像的大小相等,且类型相同。 针对代数运算的结果很容易超出数据类型允许的范围,图像的代数运算函数使用了以下截取规则使运算结果符合数据范围的要求:超出范围的整数数据将被截取为数据范围的极值,分数结果将被四舍五入。 (1)图像的加法运算 图像相加一般用于对同一场景的多幅图像求平均效果(平均是指效果而言,并非算术平均),以便有效地降低具有叠加性质的随机噪声。 MATLAB中的imadd函数用于进行两幅图像的加法或给一幅图像加上一个常数。该函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素之和作为输出图像。其调用格式为: Z=imadd(X,Y) 其中,X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。两幅图像的像素值相加时产生的结果很可能超过图像数据类型所支持的最大值(称为溢出),当数据发生溢出时,该函数将数据截取为数据类型所支持的最大值,这种截取效果称之为饱和,为了避免这种现象出现,在进行加法计算前最好将图像类型转换为一种数据范围较宽的数据类型。 例:两幅图像叠加 I=imread('rice.png'); J=imread('cameraman.tif'); subplot(1,3,1),imshow(I); subplot(1,3,2),imshow(J); K=imadd(I,J); subplot(1,3,3),imshow(K); 若不是两幅图像相加,而是给图像的每一个像素加上一个常数(使图像的亮度增加),同样可以采用imadd函数。 *例:RGB图像增加亮度 RGB1=imread('flower.tif'); RGB2=imadd(RGB1,50); subplot(1,2,1),imshow(RGB1); subplot(1,2,2),imshow(RGB2); RGB1=imread('rice.png'); RGB2=imadd(RGB1,50); subplot(1,2,1),imshow(RGB1); subplot(1,2,2),imshow(RGB2); (2)图像的减法运算 图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。 在MATLAB中,imsubtract函数用来将一幅图像从另一幅输入图像中减去或从一幅图像中减去一个常数。该函数将一幅图像的像素值从另一幅输入图像相应的像素值中减去,再将相应的像素值之差作为输出图像相应的像素值。该函数的调用格式为: Z=imsubtract(X,Y) 其中,Z是输入图像X与输入图像Y相减的结果。 减法操作时有时会导致某些像素变为一个负数,此时,该函数自动将这些负数截取为0。为了避免差值产生负值及像素值运算结果之间产生差异,可以调用imabsdiff函数,该函数将计算两幅图像相应像素差值的绝对值,其调用格式与imsubtract函数类似。 例:根据原始图像生成其背景亮度图像,然后再从原始图像中将背景亮度图像减去 rice=imread('rice.png'); background=imopen(rice,strel('disk',15)); rice2=imsubtract(rice,background); subplot(1,2,1),imshow(rice); subplot(1,2,2),imshow(rice2); 若希望从图像数据I的每一像素中减去一个常数,可以将上述调用格式中的Y替换为一个指定的常数值,如:Z=imsubtract(I,50) (3)图像的乘法运算 两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常称为缩放。缩放通常将产生比简单添加像偏移量自然得多的明暗效果。如果使用的缩放因数大于1,那么将增强图像的亮度,如果因数小于1,则会使图像变暗。 在MATLAAB中,使用immultiply函数实现两幅图形的乘法。该函数将两幅图像相应的像素值进行元素对元素的乘法,并将乘法的运算结果作为输出图像相应的像素值。其操作时将产生溢出现象,为了避免该现象产生,在执行前可将图像类型转换为一种数据范围较宽的数据类型。该函数的调用格式为: Z=immultiply(X,Y) 其中,Z=X*Y。 例:使用给定的缩放因数对moon.tif的图像进行缩放的程序清单: I=imread('moon.tif'); J=immultiply(I,1.2); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J); (4)图像的除法运算 图像除法运算又称为比率变换,给出的是相应像素值的变化比率,而不是每个像素的绝对差异,可用于校正成像设备的非线性影响。 在MATLAB中使用imdivide函数进行两幅图像的除法,该函数对两幅输入图像的所有相应像素执行元素对元素的除法操作,并将得到的结果作为输出图像的相应像素值。其调用格式为: Z=imdivide(X,Y) 其中,Z=X/Y。 例:将rice.tif的两幅图像进行除法运算的程序清单: rice=imread('rice.png'); background=imopen(rice,strel('disk',15)); rice2=imsubtract(rice,background); subplot(1,3,1),imshow(rice); subplot(1,3,2),imshow(rice2); Ip=imdivide(rice,rice2); subplot(1,3,3),imshow(Ip); (5)图像的四则代数运算 执行图像四则代数运算操作较好的一个办法是使用函数imlincomb,该函数按照双精度执行所有代数运算操作,而且仅对最后的输出结果进行截取,其调用格式为: Z=imlincomb(A,X,B,Y,C) 其中,Z=A*X+B*Y+C。MATLAB会自动根据输入参数判断需要进行的运算。 3.4.3 图像几何运算 在处理图像的过程中,有时需要对图像的大小和几何关系进行调整,如:对图像进行缩放及旋转,这时图像中每个像素的值都要发生变化。数字图像的坐标是整数,经过这些变换之后的坐标不一定是整数,因此要对变换之后的整数坐标位置的像素值进行估计。 MATLAB提供了一些函数实现这些功能。这些函数支持所有的图像类型,可实现对图像进行缩放、旋转、裁剪等几何操作。 (1)图像的插值 插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实曲线,用这个重建的函数便可求出任意的函数值。 设已知函数值为?1,?2,?,则未知点x的函数值通过插值可以表示为: f?x????ih?x?xi? i?1L其中h(?)为插值核函数,?i为权系数。插值算法的数值精度及计算量与插值核函数有关,插值核函数的设计是插值算法的核心。 MATLAB中的imresize函数和imrotate函数用于二维图像的插值。MATLAB影像处理工具箱提供了三种插值方法: ①最近邻插值(nearest neighbor interpolation) ②双线性插值(bilinear interpolation) ③双立方插值(bicubic interpolation) 1)最近邻插值:是最简单的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。该算法的数学表示为: 11f?x??f?xk??xk?1?xk??x??xk?xk?1? 22最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。对于索引图像来说,它是惟一可行的方法。不过,最近邻插值法的值核频域特性不好,从它的傅立叶谱上可以看出,它与理想低通滤波器的性质相差较大。当图像含有精细内容,也就是高频分量时,用这种方法实现倍数放大处理,在图像中可以明显看出块状效应。 2)双线性插值:该方法输出像素值是它在输入图像中2×2邻域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。 3)双立方插值:该种插值核为三次函数,其插值邻域的大小为4×4。它的插值效果比较好,但相应的计算量较大。 这三种插值方法的运算方式基本类似。对于每一种来说,为了确定插值像素点的数值,必须在输入图像中查找到与输出像素相对应的点。这三种插值方法的区别在于其对像素点赋值的不同。其中近邻插值输出像素的赋值为当前点的像素点;双线性插值输出像素的赋值为 时,图像块滑动。 B=im2col(A,[m n]) B=im2col(A,’index’,?) 它是用于对索引图像块排列成向量的操作。 3.5 图像分析 MATLAB的影像处理工具箱支持多种标准的图像处理操作,以方便用户对图像进行分析和调整。这些图像处理操作主要包括: ①获取像素值及其统计数据; ②分析图像,抽取其主要结构信息; ③调整图像,突出其某些特征或抑制噪声 3.5.1 像素值及其统计 MATLAB的影像处理工具箱提供了多个函数以返回与构成图像的数据值相关的信息,这些函数能够以多种形式返回图像数据的信息,主要包括: ①选定像素的数据值(pixval函数和impixel函数); ②沿图像中某个路径的数据值(improfile函数); ③图像数据的轮廓图(imcontour函数); ④图像数据的柱状图(imhist函数); ⑤图像数据的摘要统计值(mean2函数、std2函数和corr2函数); ⑥图像区域的特征度量(imfeature函数) (1)像素选择 影像处理工具箱中包含两个函数可返回用户指定的图像像素的颜色数据值。 1)pixval函数 当光标在图像上移动时,该函数以交互的方式显示像素的数据值。另外,该函数还可以显示两个像素之间的Euclidean距离。 2)impixel函数 impixel函数可以返回选中像素或像素集的数据值。用户可以直接将像素坐标作为该函数的输入参数,或用鼠标选中像素。 例:imshow canoe.tif; val=impixel 对于索引图像,pixel函数和impixel函数都将其显示为存储在颜色映像中的RGB值而不是索引值。 (2)强度描述图 在MATLAB影像处理工具箱中,提供了improfile函数用于沿着图像中一条直线段路径或直线路径计算并绘制其强度(灰度)值。 *例:imshow debyel.tif; improfile imshow canoe.tif; improfile *例:RGB=imread('flowers.tif'); figure(1);imshow(RGB); improfile (3)图像轮廓图 在灰度图的轮廓图显示时,可利用MATLAB影像处理工具箱中的imcontour函数。该函数类似于contour函数,与contour函数相比,其功能更全。它能够自动设置坐标轴对象,从而使得其方向和纵横比能够与所显示的图形相匹配。 *例:I=imread('rice.tif'); imshow(I); figure;imcontour(I) I=imread('rice.png'); imshow(I); figure;imcontour(I) (4)图像柱状图 图像柱状图可以用来显示索引图像或灰度图像中的灰度分布。可利用MATLAB影像处理工具箱中的imhist函数创建柱状图。 *例:以前面介绍的大米灰度图为例来创建该图的柱状图。其代码如下: I=imread('rice.tif'); imhist(I,64); I=imread('rice.png'); imhist(I,64); 3.5.2 图像分析 MATLAB中的图像分析技术可以提取图像的结构信息。例如,可以利用影像处理工具箱提供的edge函数来探测边界。这里所谓的边界,其实就是图像中包含的对象所对应的位置。下面介绍几种常见图像分析函数。 (1)灰度图像的边缘:edge函数 该函数的语法如下: BW=edge(I,method) 返回与I大小一样的二进制图像BW,其中元素I为发现I中的边缘。method为下列字符串之一: ‘sobel’:缺省值,用导数的sobel近似值检测边缘,那些梯度最大点返回边缘; ‘prewitt’:用导数的prewitt近似值检测边缘,在那些梯度最大点返回边缘; ‘roberts’:用导数的roberts近似值检测边缘,在那些梯度最大点返回边缘; ‘log’:使用高斯滤波器的拉普拉斯运算对I进行滤波,通过寻找0相交检测边缘。 ‘zerocross’:使用指定的滤波器对I滤波后,寻找0相交检测边缘。 BW=edge(I,method,thresh) 用thresh指定灵敏度阈值,所有不强于thresh的边缘都被忽略。 BW=edge(I,method,thresh,direction) 对于’sobel’和’prewitt’方法指定方向; direction为字符串:’horizontal’表示水平方向,’vertical’表示垂直方向,’both’两个方向(缺省值)。 BW=edge(I,’log’,thresh,sigma) 用sigma指定标准偏差。 [BW,thresh]=edge(?)。 (2)行四叉树分解:qtdecomp函数 将一块图像分成四块等大小的方块,然后判断每块是否满足同性质的标准,如果满足,则不再分解,否则,再进行细分成四块,并对每块应用测试标准,分解过程重复迭代下去,直到满足标准,结果可能包含不同大小的块。该函数的语法结构如下: S=qtdecomp(I) 对灰度图像I进行四叉树分解,返回四叉树结构的稀疏矩阵S。 S=qtdecomp(I,threshold) 如果块中元素最大值减去最小值大于threshold,则分解块。threshold为0到1之间的值。 S=qtdecomp(I,threshold,mindim) 如果块小于mindim就不再分解,无论其符合阈值条件与否 S=qtdecomp(I,threshold,[mindim maxdim]) 如果块小于mindim或大于maxdim就不再分解,maxdim/mindim必须为2 的幂。 S=qtdecomp(I,FUN) 使用函数FUN确定是否分解块。 S=qtdecomp(I,FUN,P1,P2,?) (3)获取四叉树分解块值:qtdgetblk函数 该函数的语法结构如下: [VALS,R,C]=qtdgetblk(I,S,dim) VALS中对应dim×dim块的值取代I的四叉树分解中的每个dim×dim块。S由qtdecomp函数返回的稀疏矩阵,包含四叉树结构;VALS是dim×dim×k数组,k是四叉树的分解的dim×dim块的数量。如果没有指定大小的块,则返回一个空矩阵。R和C为包含块左上角行列坐标的向量。 [VALS,IDX]=qtdgetblk(I,S,dim) 返回块左上角直线索引的向量IDX。 (4)设置四叉树分解块值:qtsetblk函数 J=qtsetblk(I,S,dim,VALS) 用VALS中对应dim×dim块的值取代I的四叉树分解中的每个dim×dim块。S由qtdecomp函数返回的稀疏矩阵,包含四叉树结构;VALS是dim×dim×k数组,k是四叉树的分解的dim×dim块的数量。 (5)实例 1)图像分析中的灰度边缘检测实例 %调入与显示RGB图像 *RGB=imread('flowers.tif'); isrgb(RGB); figure(1);imshow(RGB); RGB=imread('autumn.tif'); isrgb(RGB); figure(1);imshow(RGB); % RGB图像转换为灰度图像 I=rgb2gray(RGB); figure(2);imshow(I); colorbar('horiz'); isgray(I); % 边缘检测 ED=edge(I,'sobel',0.08); figure(3);imshow(ED); 2)Sobel边界探测器和Canny边界探测器在图像分析中的应用实例 操作的对象仍以前面提到rice.tif图像为例。其代码如下: I=imread('rice.tif'); I=imread('rice.png'); BW1=edge(I,'sobel'); BW2=edge(I,'canny'); figure(1);imshow(BW1); figure(2);imshow(BW2); 3.5.3 图像调整 MATLAB中的图像高速技术用于图像的改善。此处的“改善”有两个方面的含义,即:客观方面,例如提高图像的信噪比;主观方面,例如通过修正图像的颜色和强度(灰度)使其某些特征更容易辨识。 (1)对比度增强 在MATLAB中,有关函数有: 1)对比度调整函数:imadjust函数 该函数可用于调整灰度值或颜色图,其用法为: J=imadjust(I,[low high],[bottom top],gamma) 将灰度图像I转换为图像J,使值从low到high与从bottom到top相匹配。值大于high或小于low的被剪去,即小于low的值与bottom相匹配,大于high的值与top相匹配。使用该函数时可将[low high]或[bottom top]指定为空矩阵[ ],此时缺省值为[0 1]。Gamma用来指定描述I和J值关系曲线的形状;gamma < 1,越亮输出值越加强;gamma > 1,越亮输出值越减弱;缺省gamma=1,表示线性变换。 newmap=imadjust(map,[low high],[bottom top],gamma) 对索引图像的颜色图进行变换。如果[low high]和[bottom top]均为2×3矩阵,则gamma为1×3向量,imadjust函数分别调整红、绿、蓝成分,调整后的颜色图newmap大小与原来的map一样。 RGB=imadjust(RGB1,?) 对RGB图像RGB1的每个图像块进行调整。与调整颜色图一样,通过指定[low high]和[bottom top]均为2×3矩阵,gamma为1×3向量,对每个图像块可以使用不同的参数值。如果top < bottom,则图像颜色或灰度将倒置,即倒置变换,得到原图的底片。输入图像可以是uint8或双精度类型值,输出图像与输入图像类型一样。 2)函数:brighten函数 该函数的用法为:brighten(beta) 使现有颜色图变成更亮或更暗的图。如果0 < beta ≤1,则颜色图增亮;-1≤beta < 0,则颜色图变暗。brighten(beta)可以使用brighten(-beta)还原。 MAP=brighten(beta) 返回当前使用的颜色图的更亮或更暗变换后的颜色图MAP,但不改变现有的显示。 NEWMAP=brighten(MAP,beta) 返回指定颜色图MAP的更亮或更暗变换后的新颜色图NEWMAP,但不改变显示。 brighten(FIG,beta) 增强图FIG的所有物体。 3)直方图调整法 在MATLAB中,histeq函数用直方图均衡增强对比度。直方图均衡通过转换灰度图像亮度值或索引图像的颜色图值来增强图像对比度,输出图像的直方图近似与给定的直方图相匹配。 J=histeq(I,hgram) 转换灰度图像I,使输出图像J的直方图具有length(hgram)个条,近似与hgram相匹配。向量hgram包含等间隔条灰度值的整数计数个数。 J=histeq(I,N) 将灰度图像I转化成具有N个离散灰度级的灰度图像J,N缺省值为64。 [J,T]=histeq(I) 返回灰度级变换,使J的灰度级与I的灰度级相匹配。 NEWMAP=histeq(X,MAP,hgram) 变换索引图像X的颜色图,使索引图像(X,NEWMAP)的灰度级成分与hgram相匹配。返回变换后的颜色图NEWMAP,length(hgram)必须与size(MAP,1)一样。 输入图像可以是uint8或双精度类型。输出颜色图通常为双精度类型。输出T也是双精度类型。 (2)图像平滑 图像平滑主要用于受干扰而质量降低的图像,在MATLAB图像处理工具箱中有关图像噪声的函数有: 1)向图像增加噪声:imnoise函数 该函数的用法为:
正在阅读:
图像处理常用命令matlab06-08
实验室内审员资格测验题05-30
初二地理02-06
浅谈如何进一步加强机关中层干部队伍建设04-20
四年级排球单元计划及教案05-20
2019年山东省青岛市高考数学二模试卷含答案 Word(理科)09-21
民政局度工作总结汇报04-25
便携式蓄电池充放电机说明20090915(1) - 图文03-28
苏教版小学一年级数学上册《认识图形(一)》试卷及答案03-21
高级营销员资格考试试题(三)08-19
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 图像处理
- 命令
- 常用
- matlab
- 关于举办第十届“飞航杯”大学生科技节的通知
- 数车中级 - 图文
- 导学案 实施方案
- 电大行政法与行政诉讼法复习资料超全
- 《精密加工与特种加工》电火花加工,电解加工 重点简答题
- 中国电力投资集团公司科技进步奖励办法
- 西工大18春《钢结构》在线作业满分答案
- 人教部编版七年级语文下册第二单元《写作:学习抒情》写作指导
- 江苏省2016专转本 计算机真题(含答案)
- 上组煤总回风巷风桥施工安全技术措施
- 高职酒店管理专业目标教学管理模式的构建
- “十三五” 西南地区破碎机行业市场现状及投资可行性研究分析 13
- solidworks转 换dwg映射文件
- 河南省南阳市2017届高三数学第四次模拟试题 理
- 最新-2019—2019学年小学培养青年教师计划 精品
- 统计学练习题
- 北京2014中考数学二模分类汇编 - 第25题
- 如何审核合同1
- 河北会计从业《财经法规》1-2
- 北交大翻译硕士(MTI)考研复试辅导班如何分辨好坏