《图像处理基础》课件_第1页
《图像处理基础》课件_第2页
《图像处理基础》课件_第3页
《图像处理基础》课件_第4页
《图像处理基础》课件_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7讲Matlab图像处理基础主要介绍图像的数据类型及类型,图像和视频文件的读写与显示,图像的运和几何操作视频文件转换等。

Matlab图像处理工具箱———ImageProcessingToolbox提高图像质量,使模糊的图像变得清晰;提取图像的有效特征,以便进行模式识别;通过图像变换和有效编码来压缩其频带或数据,以便传输或存储。一、图像处理工具箱函数包含一百余个函数,按其内容划分为以下几类:⑴、图像显示函数;⑵、图像文件输入、输出函数;⑶、图像几何操作函数;⑷、图像像素值及统计函数;⑸、图像分析函数;⑹、图像增强函数;⑺、线性滤波函数;⑻、二维线性滤波器设计函数;⑼、图像变换函数;⑽、图像邻域及块操作函数;⑾、二值图像操作函数;⑿、基于区域的图像处理函数;⒀、颜色图操作函数;⒁、颜色空间转换函数;⒂、图像类型和类型转换函数。一、图像处理工具箱函数在缺省的情况下,Matlab将图像中的数据存储为双精度类型(double),即64bit浮点数。这种存储方法的优点在于,使用中不需要数据类型的转换,因为几乎所有的Matlab及其工具箱函数都可以使用double作为参数类型。然而对于图像存储来说,用64bit表示图像数据会导致巨大的存储量,Matlab还支持图像数据的另一种类型无符号整型(uint8),即图像矩阵中的每个数据占用1个字节。

Matlab及工具箱中的大多数操作及函数(比如最基本的矩阵相加)都不支持uint8类型。uint8的优势仅在于节省存储空间,在涉及运算时将其转换成double型。

二、图像和图像的数据类型图像数据类型转换函数im2double():将图像数组转换成double精度类型有效输入数据类型:logical,uint8,uint16,double

im2uint8():将图像数据转换成unit8类型有效输入数据类型:logical,uint8,uint16,double

im2uint16():将图像数组转换成unit16类型有效输入数据类型:logical,uint8,uint16,double图像处理工具箱所支持的图像类型图像处理工具箱支持5种图像类型真彩色图像(RGBimages)索引色图像(indeximages)灰度图像(intensityimages)二值图像(binaryimages)多帧图像组成的图像序列。图像类型1.真彩色图像

真彩色图像用R、G、B3个分量表示1个像素的颜色,所以对1个尺寸为m×n的真彩色图像来说,其数据结构就是一个m×n×3的多维数组。如果要读取图像中(100,50)处的像素值,可以查看三元组(100,50,1∶3).真彩色图像可用双精度存储,此时亮度值的范围是[0,1]。比较符合习惯的存储方法是用无符号整型存储,亮度值的范围为[0,255]。图1真彩色图像的结构2.索引色图像Matlab中的索引色图像包含2个结构,一个是调色板;另外一个是图像数据矩阵。调色板是一个有3列和若干行的色彩映像矩阵,矩阵的每行都代表一种色彩,通过3个分别代表红、绿、蓝颜色强度的双精度数,形成一种特定的颜色。需要注意的是Matlab中的调色板的色彩强度是[0,1]中的浮点数,0代表最暗,1代表最亮。图2索引色图像的结构图3.灰度图像

存储灰度图像只需要一个数据矩阵,数据类型可以是double,值域为[0,1],也可以是uint8,值域[0,255]。4.二值图像又称黑白图像,二值图像只需一个数据矩阵,每个像素只有2个灰度值。二值图像可以采用uint8或double类型存储,工具箱中以二值图像作为返回结果的函数都使用uint8类型。

图5是一幅二值图像的结构图5二值图像的结构5.图像序列图像处理工具箱支持将多帧图像连接成图像序列。图像序列是一个四维的数组,图像帧的序号在图像的长、宽、颜色深度之后构成第四维。比如一个包含了5幅400×300真彩色图像的序列,其大小为400×300×5。要将分散的图像合并成图像序列可以使用Matlab的cat函数,前提是各图像的尺寸必须相同,如果是索引色图像,调色板也必须是一样的。图像序列比如要将A1、A2、A3、A4、A5五幅图像合并成一个图像序列A,Matlab语句为

A=cat(4,A1,A2,A3,A4,A5)

也可以从图像序列中抽出1帧,比如语句

FRM3=MULTI(:、:、:、3)是将序列MULTI中的第3帧抽出来赋给矩阵FRM3。Matlab图像类型转换函数

工具箱中提供了许多图像类型转换的函数,从这些函数的名称就可以看出它们的功能。1.gray2ind函数功能:将灰度图像转换成索引图像。格式:[X,map]=gray2ind(I,n)Matlab图像类型转换2.grayslice函数功能:通过设定阈值将灰度图像转换成索引色图像。格式:X=grayslice(I,n)X=grayslice(I,v)3.imb2bw函数功能:将灰度图像、索引色图像和真彩色图像转化成二值图像。格式:BW=im2bw(I,level)BW=im2bw(X,map,level)BW=im2bw(RGB,level)Matlab图像类型转换

4.ind2gray函数功能:将索引图像转换成灰度图像。格式:I=Ind2gray(X,map)5.ind2rgb函数功能:将索引色图像转换成真彩色图像。格式:RGB=ind2rgb(X,map)Matlab图像类型转换6.mat2gray函数功能:将一个数据矩阵转换成一幅灰度图像。格式:I=mat2gray(A,[aminamax])I=mat2gray(A)

7.rgb2gray函数功能:将一幅真彩色图像转换成灰度图像。格式:I=rgb2gray(RGB)newmap=rgb2gray(map)8.rgb2ind函数功能:将真彩色图像转换成索引色图像。格式:RGB=rgb2ind(X,map)例:转换灰度图像为索引图像

clccloseallclearI=imread('tire.tif');X=grayslice(I,16);imshow(I)figure,imshow(X,jet(16))例:转换图像为二进制图像clccloseallclearloadtreesBW=im2bw(X,map,0.4);imshow(X,map)figure,imshow(BW)图像文件的读写和显示图像文件的读写图像文件的显示特殊的图像显示技术图像文件的读写和查询图形图像文件的读取

语法:A=imread(‘文件名’,’文件格式’)说明:读取图像语法:[M,N]=size(‘filename’)

说明:给出一幅图像的行数和列数图像文件的读写和查询X=imread('moon.tif');whosNameSizeBytesClassX537x358192246uint8arrayX1=imread('peppers','png');NameSizeBytesClassX537x358192246uint8arrayX1384x512x3589824uint8array2.图形图像文件的写入(保存)

利用imwrite函数可以完成图形图像文件的读取操作,其语法如下语法:imwrite(f,‘filename’)说明:保存图像当利用imwrite函数保存图像时,Matlab缺省的保存方式就是将其简化到uint8的数据格式。3.图形图像文件信息的查询

Matlab提供了imfinfo函数用于从图像文件中查询其信息。所获取的信息依文件类型的不同而不同。但是不管哪种类型的图像文件,至少包含下面的内容。文件名。(如果该文件不在当前路径下,还包含该文件的完整路径。)文件格式。文件格式的版本号。文件修改时间。文件的字节大小。图像的宽度(像素)。图像的长度(像素)。每个像素的位数。图像类型。即该图像是RGB(真彩)图像、灰度图像还是索引图像。imfinfo('moon.tif')

图像文件的显示在Matlab中,显示一幅图像可以用image函数,这个函数将创建一个图形对象句柄,语法格式为:

image(C)image(x,y,C)image(′PropertyName′,PropertyValue,image(′PropertyName′,PropetyValue,…)handle=image(…)

其中,x,y分别表示图像显示位置的左上角坐标,C表示所需显示的图像。图像文件的显示>>X1=imread('peppers','png');>>image(X1)图像文件的显示loadclownimage(10,10,X)colormap(map)用image函数显示的一幅小丑图像,图像的左上角坐标为(10,10)。图像文件的显示Matlab图像处理工具箱提供了一个高级的图像显示函数imshow。其语法格式为语法:imshow(f,G)imshow(f,[lowhigh])imshow(f,[])说明:G是显示该图像的灰度级数;小于或等于low的值都显示为黑色,大于或等于high的值都显示为白色。[]自动将变量low设置为f的最小值,将high设置为f的最大值。图像文件的显示例如:

I=imread(′rice.png′)J=filter2([12;-1-2],I)%用模板[12;-1-2]对图像滤波

imshow(I)figure,imshow(J,[])用imshow显示滤波前后的图像图像读取显示

clcclearcloseallf=imread('tire.tif');[M,N]=size(f);g=imread('trees.tif');imshow(f);figure,imshow(g);imwrite(f,'s2.jpg')图像读取显示图像读取显示使用图像浏览器显示imview()>>A=imread('moon.tif');>>imview(A)特殊图像显示技术添加颜色条colorbar()A=imread('moon.tif');imview(A,[]);colorbar('vert')colorbar('horz')不同类型的图像显示方法索引图像及其显示1、显示一幅索引图像:

image(X)colormap(map)

颜色映像表通常和索引图像保存在一起。当用户调用函数imread时,Matlab自动同时加载颜色映像表与图像。2、使用imshow命令显示索引图像

imshow(X,map)灰度图像及其显示1、灰度图像显示最基本的调用格式如下:

imshow(I)多数情况下,灰度图像很少和颜色映像表一起保存,但在显示灰度图像时,Matlab仍然在后台使用系统预定义的缺省灰度颜色映像表。imshow函数通过将灰度值标度为灰度级调色板的索引来显示图像。如果I是double型,若像素值为0.0,则显示为黑色,1.0则显示为白色,0.0和1.0之间的像素值将显示为灰影。如果I为uint16类型,则像素值为65535将被显示为白色。灰度图像及其显示(2)imagesc函数显示灰度图像下面的代码是用具有两个输入参数的imagesc函数显示一幅灰度图像。

imagese(1,[01]);colormap(gray);imagesc函数中的第二个参数确定灰度范围。灰度范围中的第一个值(通常是0),对应于颜色映像表中的第一个值(颜色),第二个值(通常是1)则对应于颜色映像表中的最后一个值(颜色)。灰度范围中间的值则线性对应于颜色映像表中剩余的值(颜色)。灰度图像及其显示

例如,用系统缺省的灰色显示一幅灰度图像loadclownclims=[1060];imagesc(X,clims)colormap(gray)

而使用浅蓝绿色显示该图像则是另外一番效果

loadclownclims=[1060];imagesc(X,clims)colormap(winter)RGB图像及其显示1、用image函数显示RGB图像image(RGB)2、用imshow函数显示RGB图像imshow(RGB)

4.二进制图像及其显示显示二进制图像

BW=imread(‘circles.png’);imshow(BW);在Matlab中,二进制图像是一个逻辑类,仅包括0和1两个数值,像素0显示为黑色,像素1显示为白色。在显示时,也可以通过NOT(~)命令,对二进制图像进行取反,使数值0显示为白色,1显示为黑色。

imshow(~BW);二进制图像显示效果图像运算图像的代数操作图像的空间域和变换操作图像的邻域和块操作图像代数运算相加运算相减运算绝对值差运算乘法运算除法运算求补运算线性组合运算相加运算imaddZ=imadd(X,Y)两幅图像叠加或一幅图像加上一个常数X和Y必须是实数值,非稀疏矩阵,具有相同的维数和数据类型I=imread('rice.png');J=imread('cameraman.tif');K=imadd(I,J,'uint16');imshow(K,[])相加运算图像整体亮度增加加法运算:增加亮度值RGB=imread(‘rice.png');RGB2=imadd(RGB,50);RGB3=imadd(RGB,100);subplot(3,1,1),imshow(RGB);subplot(3,1,2),imshow(RGB2);subplot(3,1,3),imshow(RGB3);减法运算imsubtractZ=imsubtract(X,Y)两幅图像相减X和Y必须是实数值,非稀疏矩阵,具有相同的维数和数据类型示例:X=uint8([2551075;44225100]);Y=uint8([505050;505050]);Z=imsubtract(X,Y)Z=205025017550减法运算图像相减I=imread('rice.png');background=imopen(I,strel('disk',15));Ip=imsubtract(I,background);imshow(Ip,[])图像整体亮度减小rice=imread('rice.png');rice2=imsubtract(rice,50);subplot(1,2,1),imshow(rice);subplot(1,2,2),imshow(rice2);绝对值差运算imabsdiffZ=imabsdiff(X,Y)计算图像插值的绝对值X和Y必须是实数值,非稀疏矩阵,具有相同的维数和数据类型示例:X=uint8([2551075;44225100]);Y=uint8([505050;505050]);Z=imabsdiff(X,Y)Z=205402561755绝对值差运算绝对值差clcclearcloseallI=imread('a1.tif');J=imread('a2.tif');K=imabsdiff(I,J);imshow(K,[])乘法运算immultiplyZ=immultiply(X,Y)亮度缩放,用于两幅图像相乘,或一幅图像乘以一个常数i=imread(‘pears.png');j=immultiply(i,1.2);k=immultiply(i,2);subplot(1,3,1),imshow(i);subplot(1,3,2),imshow(j);subplot(1,3,3),imshow(k);乘法运算除法运算imdivide()Z=imdivide(X,Y)用于两幅图像相除,或一幅图像除以一个常数X和Y必须是实数值,非稀疏矩阵,具有相同的维数和数据类型示例:I=imread('rice.png');background=imopen(I,strel('disk',15));Ip=imdivide(I,background);imshow(Ip,[])除法运算除以常数clcclearcloseallI=imread('rice.png');J=imdivide(I,2);subplot(1,2,1),imshow(I)subplot(1,2,2),imshow(J)图像求补运算imcomplement()IM2=imcomplement(IM)计算图像IM的补IM可以是二值、灰度或者彩色图像IM为二值图像时,0变成1,1变成0IM为灰度或者彩色图像,每个像素值与该类型支持的最大值相减,输出插值示例:X=uint8([2551075;44225100]);X2=imcomplement(X)X2=024518021130155图像求补运算clcclearcloseallw=imread('text.png');bw2=imcomplement(bw);subplot(1,2,1),imshow(bw)subplot(1,2,2),imshow(bw2)线性组合运算imlincomb()用于多幅图像进行线性组合Z=imlincomb(K1,A1,K2,A2,...,Kn,An)计算Z=K1*A1+K2*A2+...+Kn*AnZ=imlincomb(K1,A1,K2,A2,...,Kn,An,K)计算Z=K1*A1+K2*A2+...+Kn*An+kA1,A2,An为实数值,非稀疏矩阵,具有相同的维数和数据类型k1,k2,kn为实值标量线性组合运算线性组合实现图像的叠加功能clcclearcloseallI=imread('rice.png');J=imread('cameraman.tif');K=imlincomb(1,I,1,J,'uint16');figure,imshow(K,[])图像的几何操作图像的缩放图像的旋转图像的剪切图像的二维空间变换图像的缩放imresize按指定的插值方法进行图像的放大和缩小插值方法有:nearest,bilinear,bicubicB=imresize(A,m,method)按method指定的方法,将图像A放大或缩小至原来的m倍。B=imresize(A,[mrowncols],method)按method指定的方法,将图像A调整为mrow*ncols的图像。图像的缩放clcclearcloseallI=imread('circuit.tif');I2=imresize(I,0.6,'bilinear');imshow(I);figureimshow(I2);图像旋转imrotate()按指定的插值方法对图像进行旋转B=imrotate(A,angel,method)B=imrotate(A,angel,method,’crop’)Method为nearest,bilinear,bicubicangel旋转角度crop表示旋转后是否实现裁剪图像旋转clcclearclosealli=imread('eight.tif');j=imrotate(i,60,'bilinear');j1=imrotate(i,60,'bilinear','crop');subplot(1,3,1),imshow(i);subplot(1,3,2),imshow(j);subplot(1,3,3),imshow(j1);图像裁剪imcrop()实现对图像的裁剪I=imcrop(A)I2=imcrop(RGB)X2=imcrop(X,map)对灰度图像、真彩图像和索引图像的剪切I=imcrop(A,rect)I2=imcrop(RGB,rect)X2=imcrop(X,map,rect)rect是一个四元向量[xminymaxwidthheight]旋转角度图像裁剪clcclearcloseallI=imread('circuit.tif');I2=imcrop(I,[7568130112]);imshow(I);figure;imshow(I2)图像的二维空间变换imtransform()对图像进行空间变换,包括放射变换和透视投影变换。B=imtransform(A,TFORM)B=imtransform(A,TFORM,INTERP)A为待变换图像B为图像的变换结果TFORM由makeform函数定义变换类型,INTERP

为插值类型包括nearest,bilinear,bicubic图像的二维空间变换放射变换示例:clcclearcloseallI=imread('cameraman.tif');tform=maketform('affine',[100;.510;001]);J=imtransform(I,tform);imshow(I),figure,imshow(J)图像的二维空间变换透视投影变换示例:clcclearcloseallI=imread('cameraman.tif');udata=[01];vdata=[01];%inputcoordinatesystemtform=maketform('projective',[00;10;11;01],...[-42;-8-3;-3-5;63]);[B,xdata,ydata]=imtransform(I,tform,'bicubic',...'udata',udata,...'vdata',vdata,...'size',size(I),...'fill',128);subplot(1,2,1),imshow(udata,vdata,I),axisonsubplot(1,2,2),imshow(xdata,ydata,B),axison图像的邻域和块操作块操作邻域操作块操作blkproc()实现对图像的分块处理B=blkproc(A,[mn],fun)将A分成m*n的互不重叠矩形块,若A不能被m和n整除,则补充0然后对每个块按函数fun进行处理示例:I=imread('cameraman.tif');fun=@dct2;J=blkproc(I,[88],fun);imshow(J)邻域操作nlfilter()实现对图像的滑块邻域操作B=nlfilter(A,[mn],fun)一次运算只处理图像的一个像素输出图像的像素值由其对应输入图像像素点的邻域内的像素采用有关运算来决定当操作从一个元素移动到另一个元素时,矩阵块也以相同的方向移动邻域操作clcclearcloseallA=imread('cameraman.tif');fun=@median;B=nlfilter(A,[33],fun);imshow(A),

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论