第3部分23:图像处理常用MATLAB函数.ppt

上传人:李司机 文档编号:6618097 上传时间:2023-11-18 格式:PPT 页数:91 大小:848KB
返回 下载 相关 举报
第3部分23:图像处理常用MATLAB函数.ppt_第1页
第1页 / 共91页
第3部分23:图像处理常用MATLAB函数.ppt_第2页
第2页 / 共91页
第3部分23:图像处理常用MATLAB函数.ppt_第3页
第3页 / 共91页
第3部分23:图像处理常用MATLAB函数.ppt_第4页
第4页 / 共91页
第3部分23:图像处理常用MATLAB函数.ppt_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《第3部分23:图像处理常用MATLAB函数.ppt》由会员分享,可在线阅读,更多相关《第3部分23:图像处理常用MATLAB函数.ppt(91页珍藏版)》请在三一办公上搜索。

1、第B3章 MATLAB在图像处理中的应用,7.1 概述 7.2 图像的读写和查询 7.3 图像的显示 7.4 图像的算术运算 7.5 图像的几何操作 7.6 线性滤波 7.7 图像的变换 7.8 图像分析和增强 7.9 基于区域的图像处理,7.1 概述,7.1.1 MATLAB中的图像和图像处理工具箱 MATLAB中大多数图像是用二维数组(矩阵)double(64位)浮点型,或uint8(8位无符号整数)、uint16(16位无符号整数)来存储的,矩阵中的每一个元素对应图像中的一个像素(pixel).例如:一幅由200行300列不同灰度值的点组成的图像可以用200X300的矩阵来存储。对于彩色

2、图像,如RGB图像,需要用三维数组来存储。,7.1.2 MATLAB中的图像类型,二值图像(Binary):图像的取值为0或1。索引图像(Indexed,pseudocolor):图像为mXn矩阵,矩阵元素的值指向颜色映像表(colormap)。灰度图像(intensity,gray scale,gray level):图像为mXn矩阵,矩阵元素的值指的是灰度值。对single or double矩阵取值范围:0,1,对 uint8矩阵取值范围:0,255,对uint16矩阵取值范围:0,65535,对int16矩阵取值范围:-32768,32767。真彩色图像(RGB):图像为mXnX3的矩

3、阵。,二值图像(Binary),索引图像(Indexed),灰度图像(Grayscale),真彩色图像(Truecolor),gray2ind:Convert a grayscale image to an indexed image.grayslice:Convert a grayscale image to an indexed image using multilevel thresholding.im2bw:Convert a grayscale image,indexed image,or truecolor image,to a binary imageind2gray:Conve

4、rt an indexed image to a grayscale image。,7.1.3 MATLAB中的图像类型之间的转换,ind2rgb:Convert an indexed image to a truecolor image.mat2gray:Convert a data matrix to a grayscale image,by scalingthe data.rgb2gray:Convert a truecolor image to a grayscale image.rgb2ind:Convert a truecolor image to an indexed image

5、.,im2uint8 rgb2=im2uint8(rgb1)im2uint16im2int16im2singleim2double,7.1.4 图像数据类型之间的转换,用N维数组来存储图像序列 mXnXp的数组表示p个二维图像,7.1.5 图像序列,mXnX3Xp 表示?,MATLAB支持下列图像文件格式:BMP(Microsoft Windows Bitmap 位图)HDF(Hierarchical Data Format 层次数据)JPEG(Joint Photographic Expert Group 静止图像压缩标准)PCX(Paintbrush 画刷格式)PNG(Portable N

6、etwork Graphics 可移植网络图像)TIFF(Tagged Image File Format 标记图像文件)XWD(X Window Dump)GIF(Graphics Interchange Format 图形交换),7.1.5 图像文件格式,7.2 图像的读写和查询,7.2.1 图像文件的读取A=imread(文件名,文件格式)X,map=imread(文件名,文件格式)文件名必须在MATLAB的搜索路径范围内,否则需要指出完整的路径。RGB=imread(football.jpg);X,map=imread(trees.tif);,7.2 图像的读写和查询,7.2.2 图像

7、文件的写入 imwrite(A,filename,fmt):写图像A到文件名filename中,格式为fmtimwrite(X,map,filename,fmt):写索引图像X和它相连的颜色映像表map到文件名filename中,格式为fmt 例如:imwrite(A,myfile.jpg,Quality,100);写图像矩阵到文件名为myfile.jpg的文件中,参数Quality,100是控制存入时压缩比的。,7.2 图像的读写和查询,7.2.3 图像文件信息的查询 info=imfinfo(filename):从图像文件中查询其信息,包括文件名、路径、格式、版本号、文件修改时间、文件大小

8、、图像宽度和长度、每个像素的位数、图像类型等。例如:info=imfinfo(football.jpg),7.3 图像的显示,7.3.1 标准图像显示imshow(I,n)imshow(I,low high)imshow(X,map)参考MATLAB帮助moon=imread(moon.tif);imshow(moon);或者:imshow(moon.tif);moon=getimage,7.3 图像的显示,7.3.2 图像的特殊显示技术添加颜色条显示多帧图像阵列多图的显示纹理映射,7.3 图像的显示,7.3.2 图像的特殊显示技术添加颜色条 RGB=imread(saturn.png);I=

9、rgb2gray(RGB);h=1 2 1;0 0 0;-1-2-1;I2=filter2(h,I);imshow(I2,),colorbar,7.3 图像的显示,7.3.2 图像的特殊显示技术显示多帧图像阵列多帧的单帧显示多帧的一次性显示将多帧阵列转化为电影,多帧的单帧显示 load mri imshow(D(:,:,:,7)多帧的一次性显示 load mri montage(D,map)将多帧阵列转化为电影 load mri mov=immovie(D,map);movie(mov),7.3 图像的显示,7.3.2 图像的特殊显示技术多图的显示 例1.多幅图像在不同窗口显示X1,map1=

10、imread(forest.tif);X2,map2=imread(trees.tif);imshow(X1,map1),figure,imshow(X2,map2),7.3 图像的显示,7.3.2 图像的特殊显示技术多图的显示 例2.多幅图像在同一窗口显示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可以改变这一情况,7.3 图像的显示,7.3.2

11、图像的特殊显示技术多图的显示 例3.多幅图像在同一窗口显示X1,map1=imread(forest.tif);X2,map2=imread(trees.tif);subplot(1,2,1),subimage(X1,map1)subplot(1,2,2),subimage(X2,map2)subimage在显示之前,将图像转换为真彩色,因此避免了colormap的共享问题。,7.3 图像的显示,7.3.2 图像的特殊显示技术纹理映射:将图像显示在一个特定的参数曲面上 warp:MATLAB中利用插值算法将图像映射到曲面网格上 例.将peppers.png图像纹理映射到圆柱面和球面 x,y,z

12、=cylinder;I=imread(peppers.png);subplot(1,2,1),warp(x,y,z,I);x,y,z=sphere(50);subplot(1,2,2),warp(x,y,z,I);,7.4 图像的算术运算,图像的加法 imadd图像的减法 imsubtract图像的乘法 immultiply图像的除法 imdivide图像的补 imcomplement图像的绝对值的差 imabsdiff图像的线性组合 imlincomb,7.4 图像的算术运算,I=imread(rice.png);I2=imread(cameraman.tif);K=imdivide(ima

13、dd(I,I2),2);%not recommendedK=imlincomb(.5,I,.5,I2);%recommended,7.5 图像的几何操作,图像的缩放 imresize图像的旋转 imrotate图像的剪裁 imcrop图像的一般几何变换 imtransform,7.5.1 图像的插值运算,最近邻插值方法(Nearest neighbor)双线性插值方法(Bilinear)双三次插值方法(Bicubic),7.5.2 图像的缩放和旋转,B=imresize(A,m,method)B=imresize(A,mrows ncols,method),I=imread(circuit.t

14、if);J=imresize(I,1.25);imshow(I)figure,imshow(J),I=imread(circuit.tif);J=imresize(I,100 150,bilinear);imshow(I)figure,imshow(J),7.5.2 图像的缩放和旋转,B=imrotate(A,angle,method,crop),I=imread(circuit.tif);J=imrotate(I,35,bilinear);imshow(I)figure,imshow(J)如果:J=imrotate(I,35,bilinear,crop);结果的区别?,7.5.3 图像的剪裁

15、,B=imcrop(A)B=imcrop(X,map)用户可以用鼠标选取区域,也可以在函数中定义图像的矩形区域参数,I=imread(circuit.tif);J=imcrop(I);figure,imshow(J)上面剪切图像J也可以用:J=imcrop(I,60 40 100 90);其中位置矢量表示为:xmin ymin width height.,7.5.4 图像的一般几何变换,B=imtransform(A,TFORM,INTERP)它根据变换结构(TFORM)变换二维图像A,变换结构TFORM是由maketform函数或cp2tform函数返回的,INTERP可以取nearest,

16、bilinear(默认值)或bicubic,7.5.4 图像的一般几何变换,B=imtransform(A,TFORM,INTERP)I=imread(cameraman.tif);tform=maketform(affine,1 0 0;0.5 1 0;0 0 1);J=imtransform(I,tform);imshow(J),figure,imshow(J),7.6 图像的线性滤波,滤波是一种图像修正或增强技术。可以突出图像的某些特征,也可以删除另一些特征。图像滤波的本质是一种邻域操作,输出图像的任一个像素值都是通过输入图像对应的像素邻域内的像素值利用一定的算法得到的。图像的线性滤波就

17、是输出图像任一个像素值都是通过输入图像对应的像素邻域内的像素值线性组合得到的。图像的线性滤波是通过卷积来完成的。,7.6 图像的线性滤波,二维卷积函数 conv2滤波函数 filter2图像滤波 imfilter预定义滤波器 fspecial,7.6.1 二维卷积函数 conv2,A=17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9,h=8 1 6 3 5 7 4 9 2,C=conv2(A,h),卷积步骤:,关于卷积核的中心,旋转卷积核180度。滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。将旋转后的卷积

18、核作为权重,乘以对应的矩阵元素求加权和,计算卷积输出(2,4),C=conv2(A,B)C=conv2(A,B,shape)A:输入图像,B:卷积核,C:输出图像,若A大小为mana,B大小为mbnb,则C大小为(ma+mb-1)(na+nb-1)shape指定卷积运算的范围:shape=full(the default),返回全部二维卷积结果shape=same,返回与A同样大小的卷积中心部分shape=valid,不考虑边界补零,返回C大小为(ma-mb+1)(na-nb+1),7.6.2 相关运算实现滤波:filter2,相关运算(correlation)滑动相关核,将相关核的中心位于图

19、像矩阵的每一个元素。将相关核作为权重,乘以对应的矩阵元素求加权和用相关运算实现滤波的函数是filter2B=filter2(h,A),计算相关输出(2,4),7.6.3 图像的线性滤波,imfilterB=imfilter(A,H,option1,option2,)A:多维图像阵列,H:多维滤波器,option1,option2决定边缘上的处理方法,输出图像大小,采用与filter2相同的方法还是卷积的方法。,例:利用imfilter函数实现均值滤波,I=imread(coins.png);h=ones(5,5)/25;I2=imfilter(I,h);imshow(I),title(Orig

20、inal Image);figure,imshow(I2),title(Filtered Image),imfilter输入输出的数据类型是一样的,A=magic(5)h=-1 0 1;imfilter(A,h)可以看到输出有负值,所以有时候在imfilter 前用类型转换,避免这种情况。A=uint8(magic(5)imfilter(A,h),option:相关和卷积,imfilter既可以用相关,也可以用卷积实现滤波操作,缺省是相关。A=magic(5);h=-1 0 1imfilter(A,h)%filter using correlationimfilter(A,h,conv)%fi

21、lter using convolution,option:边界补零(zero-padding)和边界复制(border replication),边界补零(zero-padding):缺省,option:边界补零(zero-padding)和边界复制(border replication),边界补零(zero-padding):缺省I=imread(eight.tif);h=ones(5,5)/25;I2=imfilter(I,h);imshow(I),title(Original Image);figure,imshow(I2),title(Filtered Image with Blac

22、k Border)缺点:滤波得到的图像边缘有一个dark band,option:边界补零(zero-padding)和边界复制(border replication),边界复制(border replication),option:边界补零(zero-padding)和边界复制(border replication),边界复制(border replication)I3=imfilter(I,h,replicate);figure,imshow(I3);title(Filtered Image with Border Replication)imfilter还有其他的边界补充选项,参考imf

23、ilter的帮助,多维滤波,imfilter既可以处理多维图像,也可以处理多维滤波器。用一个二维滤波器对一个三维图像滤波,相当于对三维图像的每个平面进行二维滤波。例:用同样的滤波器对一个真彩色图像的每个颜色平面进行滤波。,%Read in an RGB image and display itrgb=imread(peppers.png);imshow(rgb);%Filter the image and display it.h=ones(5,5)/25;rgb2=imfilter(rgb,h);figure,imshow(rgb2),imfilter与filter2、conv2的关系:,f

24、ilter2、conv2、convn:将输入转换为double类型,输出也是double的,输入总是补零(zero padded),不支持其他的边界补充选项。imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项,7.6.4 预定义滤波器,h=fspecial(type,parameters)例:应用“unsharp masking”滤波器对图像进行滤波I=imread(moon.tif);h=fspecial(unsharp);I2=imfilter(I,h);imshow(I),title(Original Image)figure,imshow(I2),t

25、itle(Filtered Image)关于fspecial的参数选择参见help,7.7 图像的变换,图像的一般数学表示是用两个空域变量的函数表示,(x,y)表示一个特定点的位置,f(x,y)表示(x,y)处的图像灰度值。图像的变换就是把图像表达成另一种表示方法。例如傅立叶变换是把图像表示为变化的频率、相位和振幅的复指数的和,这就是频率域。图像的变换在图像的分析、增强、特征提取、图像压缩等许多领域被广泛应用。,7.7 图像的变换,傅立叶变换(Fourier Transform)离散余弦变换(Discrete Cosine Transform),7.7.1 傅立叶变换(Fourier Tran

26、sform),f(m,n)是一个二维离散空域变量(m,n)的函数,那么f(m,n)的二维离散傅立叶(DFT)定义为:,二维离散傅立叶的逆变换(IDFT)为:,7.7.1 傅立叶变换(Fourier Transform),二维离散傅立叶(DFT)变换的系数:,离散傅立叶(DFT)的计算:,fft、fft2、fftn:分别实现一维、二维和n维离散快速傅立叶变换(DFT)ifft、ifft2、ifftn:分别实现一维、二维和n维离散快速傅立叶逆变换(IDFT),例:图像傅立叶变换和幅值,1.产生图像矩阵,包括一个矩形区域f=zeros(30,30);f(5:24,13:17)=1;imshow(f,

27、InitialMagnification,fit)2.计算和显示f的傅立叶变换F=fft2(f);F2=log(abs(F);figure,imshow(F2,-1 5,InitialMagnification,fit);colormap(jet);colorbar,上图:傅立叶变换的取样很粗,且零频率系数不像传统的那样显示在图像中心,而是显示在左上角。为获得傅立叶变换较精细的取样,采用补零的方法。3.补零和计算f的傅立叶变换F=fft2(f,256,256);F2=log(abs(F);figure,imshow(F2,-1 5,InitialMagnification,fit);color

28、map(jet);colorbar,4.将零频系数移动到图像中心F=fft2(f,256,256);F2=fftshift(F);figure,imshow(log(abs(F2),-1 5,InitialMagnification,fit);colormap(jet);colorbar,傅立叶变换的应用:,线性滤波器的频率响应线性滤波器的脉冲响应的傅立叶变换给出该滤波器的频率响应。freqz2计算和显示滤波器的频率响应。例:显示高斯滤波器的频率响应h=fspecial(gaussian);freqz2(h),傅立叶变换的应用:,快速卷积两个空域函数卷积的傅立叶变换等于这两个函数傅立叶变换的乘

29、积。例:A=magic(3);B=ones(3);A(8,8)=0;B(8,8)=0;C=ifft2(fft2(A).*fft2(B);C=C(1:5,1:5);C=real(C),傅立叶变换的应用:,图像特征识别例:在一幅包含文字的图像中查找字母a1、Read in the sample imagebw=imread(text.png);2、Create a template for matching by extracting the letter a from the imagea=bw(32:45,88:98);imshow(bw);figure,imshow(a);,傅立叶变换的应用

30、:,3、Compute the correlation of the template image with the original image by rotating the template image by 180o and then using the FFT-based convolution techniqueC=real(ifft2(fft2(bw).*fft2(rot90(a,2),256,256);figure,imshow(C,)%Scale image to appropriate display range.,傅立叶变换的应用:,4、find the maximum

31、pixel value and then define a threshold value that is less than this maximum.The locations of these peaks are indicated by the white spots in the thresholded correlation image.max(C(:)ans=68.0000thresh=60;%Use a threshold thats a little less than max.figure,imshow(C thresh)%Display showing pixels ov

32、er threshold.,7.7.2 离散余弦变换(Discrete Cosine Transform),通常对于一幅图像的DCT,其重要的可视信息集中在DCT的少数系数上。正是基于这一特性,DCT经常被用于图像压缩应用。例如,DCT是国际标准有损图像压缩算法JPEG的核心。,7.7.2 离散余弦变换(Discrete Cosine Transform),一个MN矩阵A的DCT定义为:,7.7.2 离散余弦变换(Discrete Cosine Transform),DCT的逆变换:,7.7.2 离散余弦变换(Discrete Cosine Transform),MATLAB中计算DCT:dc

33、t2函数使用dct变换矩阵,由dctmtx返回,7.7.2 离散余弦变换(Discrete Cosine Transform),MATLAB中计算DCT:dct2,idct2函数使用dct变换矩阵,由dctmtx返回,7.8 图像分析和增强,7.8.1 图像的像素值及其统计1、提供特定像素的数据值(灰度值或颜色值)pixval:交互显示像素数据值 imshow canoe.tif pixvalimpixel:返回被选中点或选中区域像素的数据值,用户可在参数中提供像素坐标,也可通过鼠标选取。imshow canoe.tif vals=impixel,7.8 图像分析和增强,7.8.1 图像的像素

34、值及其统计2、图像像素值剖面图形improfile:沿着图像中一条直线或折线段计算和绘制图像像素值的图形。C=improfileC=improfile(I,xi,yi)imshow peppers.png improfile,7.8 图像分析和增强,7.8.1 图像的像素值及其统计3、图像轮廓图imcontour:显示一幅灰度图像的轮廓图。I=imread(rice.png);imshow(I)figure,imcontour(I,3),7.8 图像分析和增强,7.8.1 图像的像素值及其统计4、图像直方图imhist:显示灰度图像或索引图像的灰度分布,创建图形窗口绘制出每一灰度级对应像素个数

35、的 柱状图。I=imread(rice.png);imshow(I)figure,imhist(I),7.8 图像分析和增强,7.8.1 图像的像素值及其统计5、样本统计量和有关区域属性的一些量标准的图像统计函数:mean2 std2 corr2分别计算图像矩阵元素的均值、标准差和两个相同矩阵的相关系数。选定图像区域的有关属性:regionprops参看help,7.8 图像分析和增强,7.8.2 图像分析(提取图像的结构信息)边缘检测edge:检测图像边缘。BW=edge(I,method,thresh)参看help,I=imread(coins.png);imshow(I)BW1=edge

36、(I,sobel);BW2=edge(I,canny);imshow(BW1)figure,imshow(BW2),7.8 图像分析和增强,7.8.3 图像的灰度值调整(改善图像质量)灰度调整imadjust:检测图像边缘。J=imadjust(I,low_in high_in,low_out high_out,gamma)参看help,X,map=imread(forest.tif);I=ind2gray(X,map);J=imadjust(I,0.5);imshow(I)figure,imshow(J),7.8 图像分析和增强,7.8.3 图像的灰度值调整(改善图像质量)直方图均衡化his

37、teq:灰度值自动调整,变换输入图像的灰度值近似匹配一个特别的直方图作为输出灰度值。参看help,7.8 图像分析和增强,7.8.4 图像去噪MATLAB提供了一个能加多种噪声的函数imnoise:参看help,7.8 图像分析和增强,7.8.4 图像去噪线性滤波fspecial imfilter 中值滤波B=medfilt2(A,m,n)自适应滤波J=wiener2(I,m,n),I=imread(eight.tif);imshow(I)J=imnoise(I,salt figure,imshow(L),RGB=imread(saturn.png);I=rgb2gray(RGB);J=imn

38、oise(I,gaussian,0,0.025);imshow(J)K=wiener2(J,5 5);figure,imshow(K),7.9 基于区域的图像处理,7.9.1 区域的选择BW=roipoly(I,c,r):设定感兴趣的多边形区域 roicolor:用来在颜色或灰度范围内定义感兴趣的区域BW=roicolor(I,128,255),7.9 基于区域的图像处理,7.9.2 区域滤波J=roifilt2(h,I,BW):对输入图像滤波,返回的图像是对模板为“1”的像素进行过滤波,而对模板为“0”的像素没有滤波,这种运算也成为模板滤波。J=roifill(I,c,r)J=roifill(I,BW),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号