收藏 分销(赏)

基于MATLAB图像处理(第2版)讲稿.ppt

上传人:精*** 文档编号:10801382 上传时间:2025-06-16 格式:PPT 页数:209 大小:5.07MB 下载积分:25 金币
下载 相关 举报
基于MATLAB图像处理(第2版)讲稿.ppt_第1页
第1页 / 共209页
基于MATLAB图像处理(第2版)讲稿.ppt_第2页
第2页 / 共209页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,基于,MATLAB,的图像处理,于万波,关于图像等,图像研究有着重要的实际应用价值与理论研究价值,图像的研究正在继续,国际上有很多有关图像研究的期刊、专著;各种图像相关的产品不断问世,本书使用,MATLAB,作为工具讲解图像处理的基本原理与基本方法,学习时要坚持上机操作,坚持思考,第1章 图像,1.1,Matlab,的命令使用与程序设计,1.1.2,M-File,程序设计,1.1.3,Figure,窗口的图形操作功能,1.1.4 自定义函数,1.1.5,Matlab,的矩阵操作,1.1.6 多维数组与图像矩阵,1.2,图像的表示方法,1.2.1 图像的数字化,1.2.2 图像的读取与显示,1.2.3 图像的分类,2.,图像的数字化,在计算机中,图像被看作是一些数值构成的矩阵。例如图,1-7,所示数据就代表着图像,s=size(A),,则有,s=22 22 3,说明图像的长为22、宽为22,由3种颜色迭加而成。,下面是其红色阵的数据,(1到15列),2.图像数据的调用,既然图像数据是存储在数组中,那么调用图像数据就变成了操作数组元素。例如:,B=A(1:5,1:9,1),B=,221 221 221 221 221 221 221 221 221,221 234 234 234 234 234 234 234 234,221 234 234 234 234 234 234 234 234,221 234 234 234 234 234 4 4 4,221 234 234 234 234 4 0 0 0,调用红色阵的1到5行,1到9列,函数,imshow(),可以把任意的二维数组(矩阵)显示成为图像。,另外,函数,imview()、image()、imagesc(),也可以用来显示图像。,1.基于颜色表示的图像分类,(1)灰度图像,灰度图像对应着一个数据矩阵(二维数组),数组元素的值表示图像在该位置上的亮度值。一般常用数值0表示黑色,255表示白色,用0到255之间的数表示灰(亮)度。,下面程序使,用,getframe,函数装载这几幅图像,使用,movie,函数播放这几幅图像就是完成了一个动画制作。,for i=1:3,k=int2str(i);,k1=strcat(e:,k,.jpg);,a1=imread(k1);,image(a1);,m(:,i)=getframe;,end,movie(m,10),第2章 图像几何操作与代数运算,2.1,图像的缩放旋转与裁剪,2.2,图像的几何变换,2.3,图像的加减乘除运算,2.4,图像的特征值与奇异值,2.5,图像逻辑运算,2.1,图像的缩放旋转与裁剪,2.1.1 图像的裁剪,2.1.2 图像的缩放,2.1.3 图像的旋转,1.,imcrop,函数,该函数有两个参数,一个用来指定裁剪图像,一个用来定义裁剪矩形。,【例2-1】使用,imcrop,函数对图像进行裁剪。,编写如下程序:,A=imread(D:imageprocessIMG_7354.jpg);,A1=imcrop(A,190,100,290,220);,subplot(1,2,1),imshow(A);,subplot(1,2,2),imshow(A1),程序运行结果如图2-1所示。,imcrop,函数中的参数190,100,290,220的含义是以图像上的(190,100)点为裁剪矩形的左上角坐标,裁剪矩形的宽为290,高为220。,3.,Matlab,函数,roipoly,Matlab,中提供了定义多边形区域的函数,roipoly,,可以使用该函数定义多边形区域,然后实行裁剪操作。,【例2-2】使用,roipoly,函数选取图像块。,I=imread(D:125.jpg);,subplot(1,2,1),imshow(I),C1=10 30 80;,C2=20 100 68;,BW=roipoly(I,C1,C2);,subplot(1,2,2),imshow(BW),程序运行结果如图2-3所示。,2.1.2 图像的缩放,图像的缩放也是经常使用的一种操作。,在图像缩放过程中,涉及到图像数据的删除与增加。特别是图像放大的时候,需要考虑如何在扩大后的空隙中加入新的图像颜色数据。,增加颜色数据的主要方法是根据周围相近象素的颜色值进行插值计算。,1.,imresize,函数缩放图像,【例2-5】使用,imresize,函数缩小或放大图像。,下面程序把图像缩小到原来的0.5倍。,c=imread(D:earth.jpg);,c2=imresize(c,0.5);,imshow(c2),下面程序把原图像变成100行100列图像,行数增加,使用插值函数完成颜色的填补。,c=imread(D:earth.jpg);,c2=imresize(c,100,100);,imshow(c2),2.,三种插值方法,图像放大后,需要增加像素,计算新增加的像素颜色值一般使用插值的方法。常用的插值方法有:最近邻插值方法、双线性插值方法、双立方插值方法等。,Imresize,函数就使用这三种插值方法。,2.1.3 图像的旋转,Matlab,使用,imrotate,函数旋转图像。例如,使用下面命令段可以把图像逆时针旋转30度。,B=imread(saturn.tif);,imshow(B),figure,imrotate(B,30,crop),这几句命令绘制出图2-7(,a),与(,b),图。,参数,crop,是旋转的时候图像底板大小保持不变,图像大小也保持不变,【例2-10】使用,imrotate,函数旋转图像,制作动画效果。,编写如下程序,可以制作出动画效果。,I=imread(D:imageprocessLenaCircle.PNG);,for i=1:10,imrotate(I,36*i,crop);,end,随着,i,的每次增加,图像依次逆时针旋转36度、72度、,直到300度。旋转时的中间结果如图2-8所示。,2.2,图像的几何变换,2.2.1 画图软件中的图像扭曲,2.2.2 图像二维空间变换,【例2-11】使用,imtransform,函数实现图像平面扭曲功能。,T=maketform(affine,.5 0 0;.5 1 0;0 0 1);,I=imread(cameraman.tif);,I2=imtransform(I,T);,subplot(1,2,1),imshow(I),subplot(1,2,2),imshow(I2),程序的运行结果如图2-10所示。,2.3,图像的加减乘除运算,2.3.1 图像加减运算,2.3.2 图像的乘除运算,【例2-14】设计矩阵进行图像加减运算。,A=imread(D:0045.jpg);,s=size(A);%s(1),s(2),B=double(A);%,Q1=zeros(s(1),s(2);%Q1,大小与,A,一致,Q2=zeros(s(1),s(2);,for m=s(1):-1:1%,从,s(1),到1,每次减1,for n=s(2):-1:1,Q1(m,n)=m;,Q2(m,n)=n;,end,end,C(:,:,1)=B(:,:,1);,C(:,:,2)=B(:,:,2)-Q2;,C(:,:,3)=B(:,:,3)+Q1/3;,【例2-17】观察分析图像矩阵乘以或除以常数后图像亮度的改变。,设计下面程序,程序运行结果是图2-18。,A=imread(D:0010.jpg);,A1=double(A);A2=A1*1.5;A3=A1/1.5;,A2=uint8(A2);A3=uint8(A3);,subplot(1,3,1);imshow(A),subplot(1,3,2);imshow(A2),subplot(1,3,3);imshow(A3),图像矩阵与图像矩阵进行逐元素对应乘除运算,【,例2-18】,利用矩阵对应相乘把两个图像合成在一起。,A=imread(D:0045.jpg);B=imread(D:0041.jpg);,s=size(A);m=s(1),n=s(2);,B1=imresize(B,m n);,A=double(A);C=double(B1);D=A.*C/128;,D=uint8(D);,subplot(1,3,1);imshow(uint8(A),subplot(1,3,2);imshow(B),subplot(1,3,3);imshow(D),两个图像矩阵按照数学上定义的乘法进行运算,2.4,图像的特征值与奇异值,2.4.1 图像矩阵的特征值,2.4.2 图像矩阵的奇异值,1 图像矩阵特征值,矩阵特征值是这样定义的:设,A,是,n n,矩阵,如果数,与,n,维非零向量,X,满足方程,则称数,为矩阵,A,的特征值,称非零向量,X,为矩阵,A,的特征向量。,在计算数学中,一般用迭代的方法求取矩阵的特征值。,Matlab,提供了求取特征值的函数,eig(A),,其中,A,是参数,是要求取特征值的矩阵。,设计下面程序段:,A=imread(D:shizi1.bmp);,A1=rgb2gray(A);,A2=double(A1);,T=eig(A2);,T,运行程序后,得到灰度矩阵,A1,的特征值数据:,使用下面程序可以求出并且在命令窗口显示出图像的特征向量。,A=imread(D:shizi1.bmp);,A1=rgb2gray(A);,A2=double(A1);,G T=eig(A2);,G,变量,G,中存储的就是灰度图像,A1,的特征向量。,【,例2-23,】求图像矩阵的奇异值。,下面程序是求图像,shizi1.bmp,的灰度矩阵的奇异值。,A=imread(D:shizi1.bmp);,A1=rgb2gray(A);,A2=double(A1);,T=svd(A2);,T,2.5,图像逻辑运算,2.5.1 二值图像逻辑运算,【例2-27】对二值图像实施与、或、非、异或运算。,A1=imread(D:1.bmp);A2=imread(D:11.bmp);A3=imread(D:0.bmp);A4=imread(D:00.bmp);,B1=im2bw(A1);B2=im2bw(A2);,B3=im2bw(A3);B4=im2bw(A4);,C1=B1%,与操作,C2=B2|B3;%,或操作,C3=B1;%,非操作,C4=XOR(B3,B4);%,异或操作,subplot(2,4,1);imshow(B1)subplot(2,4,2);imshow(B2)subplot(2,4,3);imshow(B3)subplot(2,4,4);imshow(B4)subplot(2,4,5);imshow(C1)subplot(2,4,6);imshow(C2)subplot(2,4,7);imshow(C3)subplot(2,4,8);imshow(C4),程序运行结果如图2-28所示。,第3章 图像空间域处理与邻域操作,3.1,图像增强,3.2,图像的邻域操作,3.3,图像滤波函数及工作原理,3.4 图像膨胀与腐蚀,3.1,图像增强,3.1.1 灰度调整,3.1.2 灰度调整函数,3.1.3 彩色图像增强,统计每个颜色值的点的个数,即直方图,统计的目的是为了确定增强的参数设置,A=imread(pout.tif);,A1=floor(double(A);,s=size(A1);,N=zeros(256);,for i=1:s(1),for j=1:s(2),k=A1(i,j);,N(k+1)=N(k+1)+1;,end,end,bar(N),事实上,,Matlab,提供了函数,imadjust、histeq,、,adapthiteq、brighten,等进行灰度调整。可以在以后的研究工作中直接使用,Matlab,中这些函数调整图像灰度(颜色)对比度。,1.,imadjust,函数,函数,imadjust,可以将图像的灰度值调整到一个指定的范围,实现类似例3-3的功能,以增强图像的明暗对比。,【例3-4】使用函数,imadjust,对图像进行灰度调整。,编写如下程序:,A1=imread(pout.tif);,B1=imadjust(A1,0.2 0.5,0,1);,A2=imread(cameraman.tif);,B2=imadjust(A2,0,0.2,0.5,1);,subplot(1,4,1);imshow(A1),subplot(1,4,2);imshow(B1),subplot(1,4,3);imshow(A2),subplot(1,4,4);imshow(B2),程序的运行结果如图3-4所示。,2.,stretchlim,函数,函数,stretchlim(A),是用来计算灰度矩阵,A,的最佳输入区间,即,imadjust(I,LOW_IN HIGH_IN,LOW_OUT HIGH_OUT),中的第2个参数,LOW_IN HIGH_IN。,所谓最佳是指按照这个区间输入的话,图像的灰度对比度最大。,例如,使用该函数计算例3-3中使用的图像的最佳输入区间为0.3059 0.6314;,cameraman.tif,的最佳输入区间为0.0353 0.8039。而下面例题3-5中的图像,D:imageprocessIMG_7420.jpg,的最佳截取输入区间为0.1608 0.6941。,3.,histeq,函数,函数,histeq,能够自动完成图像灰度调整,一般用来增强图像的灰度对比度。,【例3-6】使用函数,histeq,增强图像灰度对比度。,使用下面程序能够得到图3-9所示效果。,I=imread(tire.tif);,J=histeq(I);,subplot(1,2,1);imshow(I),subplot(1,2,2);imshow(J),4.,brighten,函数,【例3-7】使用函数,brighten,增加灰度图像的亮度。,设计下面程序:,J=imread(D:imageprocessIMG_5943.jpg);,A=rgb2gray(J);imshow(A),figure,imshow(A)brighten(0.6),figure,imshow(A)brighten(-0.6),RGB,彩色图像增强,【例3-8】使用函数,imadjust,对,RGB,彩色图像进行颜色调整。,RGB1=imread(flowers.tif);,RGB2=imadjust(RGB1,.2 .3 0;.6 .7 1);,subplot(1,2,1)imshow(RGB1),subplot(1,2,2)imshow(RGB2),3.2,图像的邻域操作,3.2.1 邻域操作,3.2.2,Matlab,邻域操作函数,邻域操作指在图像处理时,输入要处理像素的某邻域内各个像素值,输出要处理的像素的新值。,邻域操作是图象处理(例如图像增强、图像滤波)时经常用到的方法。,使用该方法处理图像时一般使用算子模板逐行(或逐列)在图像上滑动,滑动的时候对模板经过区域进行运算,把计算的结果作为区域中心像素的新值,所以有时也称为滑动邻域操作。,邻域操作方法充分地利用了图像相邻像素间的颜色关系,利用相邻像素间的颜色分布对图像进行平滑、增强、边缘提取、滤波、恢复等,图像的腐蚀与膨胀操作也可以看作是邻域操作的一种。,【例3-11】对小狮子图像进行邻域操作,使小狮子图像的轮廓变得清晰。,编写如下程序,绘制出图3-15(,c),所示图形。,A1=imread(D:shizi1.bmp);A2=double(A1);,A3=floor(A2(:,:,1)+A2(:,:,2)+A2(:,:,3)/3);,C=-1 -1 -1,-1 8 -1,-1 -1 -1;,for i=2:15,for j=2:15,L=A3(i-1:i+1,j-1:j+1).*C;,A4(i,j)=sum(sum(L);,end,end,A4,imshow(A4),1.,nlfilter,函数,在,Matlab,中,,nlfilter,函数是最基本的邻域操作函数。该函数被调用的一般形式为:,B=nlfilter(A,M N,FUN),,其中,A,是被处理的图像,,M N,表示滑动块的高为,M、,宽为,N。FUN,是要对滑动覆盖区域进行操作的函数名,该函数可以是各种滤波算子,可以是任意定义的运算。,【例3-12】使,用,nlfilter,函数进行图像邻域操作。,编写下面程序,得到的结果显示在图3-17中。,A=imread(D:shizi.bmp);A1=rgb2gray(A);,subplot(1,2,1);imshow(A1);,fun=inline(median(x(:);,B=nlfilter(A1,3 3,fun);,subplot(1,2,2);imshow(B),colfilt,函数与,nlfilter,函数的另一个重要区别是,colfilt,函数在移动的时候可以在,sliding,与,distinct,两者中进行选择,而,nlfilter,函数只是执行,sliding,操作。,colfilt,函数在选择,distinct,时,滑动块不再逐象素滑动,而是逐块移动。看下面例题:,【例3-15】使用,colfilt,函数进行图像邻域,distinct,操作。,编写如下程序:,A=imread(D:shizi1.bmp);,A1=rgb2gray(A);,A2=double(A1);,f=inline(ones(16,1)*mean(x);,B=floor(colfilt(A2,4 4,distinct,f),程序中,distinct,操作每次从前一个4 4图像块移动到下一个4 4图像块,移动时不互相重叠。一共移动了16次,如图3-20所示。,图3-20 使用,colfilt,函数,distinct,操作示意图,3.3,图像滤波函数及工作原理,3.3.1 滤波函数,imfilter,3.3.2 滤波器的定义,函数,imfilter,是,Matlab,中使用较多的滤波函数,基本调用形式为:,B=IMFILTER(A,H,OPTION),其中,A,为要进行滤波的图像矩阵,可以为多维的彩色图像矩阵(数组);,H,是已经定义的滤波算子。,【例3-17】使用函数,imfilter,对图像进行滤波,同时,研究该函数,的边界参数的意义。,rgb=imread(D:125.jpg);,h=ones(5,5)/25;,rgb1=imfilter(rgb,h);,rgb2=imfilter(rgb1,h,replicate);,subplot(1,3,1),imshow(rgb),title(Original),subplot(1,3,2),imshow(rgb1),title(Filtered),subplot(1,3,3),imshow(rgb2),title(boundary replication),【例3-18】使用函数,imfilter,对图像进行滤波,观察滤波结果,分析几个滤波器的区别。,rgb=imread(D:003.bmp);,h1=0 0 0.0000 0.0021 0.0042,0.1958 0.1979 0.2000 0.1979 0.1958,0.0042 0.0021 0.0000 0 0;,h2=1 2 1;0 0 0;-1 -2 -1;,h3=0.1667 0.6667 0.1667,0.6667 -3.3333 0.6667,0.1667 0.6667 0.1667;,rgb1=imfilter(rgb,h1);,rgb2=imfilter(rgb,h2);,rgb3=imfilter(rgb,h3);,subplot(2,2,1),imshow(rgb),title(,原图像,),subplot(2,2,2),imshow(rgb1),title(,运动滤波,),subplot(2,2,3),imshow(rgb2),title(,水平边缘增强,),subplot(2,2,4),imshow(rgb3),title(,拉普拉斯滤波),可以使用,Matlab,中的函数,fspecial(T,P),产生一个由,T,指定的二维线性滤波器。参数,T,可以在下面选项中选取。,average,均值滤波器,disk,圆形均值滤波器,gaussian,高斯低通滤波器,laplacian,二维拉普拉斯滤波器,log,高斯拉普拉斯滤波器,motion,运动滤波器,prewitt Prewitt,水平边缘增强滤波器,sobel Sobel,水平边缘增强滤波器,3.4 图像膨胀与腐蚀,3.4.1 二值图像的膨胀与腐蚀运算,3.4.2 灰度图像的膨胀与腐蚀,3.4.3 开运算与闭运算,图像膨胀与腐蚀也叫做数学形态学运算。一般来说对于二值图像,膨胀运算后图像中物体,“,加长,”,或,“,变粗,”,;腐蚀运算后图像中物体,“,收缩,”,或,“,细化,”,。下面先通过一些例题观察分析膨胀与腐蚀后的效果,【例3-22】对二值图像实施膨胀运算。,A=imread(C:MATLAB6p5workbc.bmp);,B=A;M=1;1;1;N=1 1 0;,P=0 0 1;0 1 0;0 0 0;Q=0 0 1;0 0 0;1 0 0;,C1=imdilate(B,M);C2=imdilate(B,N);,C3=imdilate(B,P);C4=imdilate(B,Q);,subplot(1,5,1);imshow(B),subplot(1,5,2);imshow(C1),subplot(1,5,3);imshow(C2),subplot(1,5,4);imshow(C3),subplot(1,5,5);imshow(C4),【例3-24】对二值图像实施腐蚀运算,并且与膨胀运算进行比较。,A=imread(0370.bmp);B=im2bw(A);B=B;,M=strel(diamond,3);,C1=imerode(B,M);,C2=imdilate(B,M);subplot(1,3,1);imshow(B),subplot(1,3,2);imshow(C1),subplot(1,3,3);imshow(C2),第4章 图像变换,4.1,图像,Radon,变换,4.2,Hadamard,变换,4.1,图像,Radon,变换,4.1.1 函数,Radon,4.1.2 函数,Iradon,Matlab,中提供了函数,radon,用来完成图像,Radon,变换,该变换实质上是计算指定方向上图像矩阵的投影。,【例4-1】图像,Radon,变换。,A=imread(D:0371.bmp);,C,x1=radon(A,0);D,x2=radon(A,30);,subplot(1,3,1);imshow(A),subplot(1,3,2);plot(x1,C),subplot(1,3,3);plot(x2,D),读入图像,然后调用,radon,函数,变换后绘制出图4-1(,a)-(c),所示图形,为了更好地进行观察,绘制了二值图像0372.,bmp,,如图4-1(,d),所示。,使用上面程序,对0372.,bmp,进行变换,把程序中文件0371.,bmp,改为0372.,bmp,即可。得到的结果如图4-1(,e)、(f),所示。从这个结果能进一步直观的理解,Radon,变换。,上面是课后习题8中给出的关于,radon,变换的定义,从这个定义进一步理解,radon,变换。,Matlab,也提供了函数,iradon,用来进行逆,Radon,变换。,例4-2先利用函数,Radon,计算一组旋转角度下的,Radon,变换,C,C,是二维数组,记载着对应于每个角度的变换后的数据。然后利用,C,及旋转角度,使用函数,Iradon,重建图像。,见下一页,【例4-2】利用逆,Radon,变换复原图像。,设计如下程序,B=imread(D:0371.bmp);,T=0:10:180;,C,x=radon(B,T);%,进行了19次若当变换,D=iradon(C,T);,subplot(1,3,1);imshow(B),subplot(1,3,2);imagesc(T,x,C),subplot(1,3,3);image(D),程序运行结果见下页图4-2,4.3,离散余弦变换,4.3.1 离散余弦变换函数,4.3.2 离散余弦变换的数学表达,4.3.3 离散余弦变换矩阵与基函数,离散余弦变换(,DCT),将图像表示为具有不同振幅和频率的离散的余弦曲线或曲面的和。,Matlab,提供了函数,dct2,来计算图像的二维离散余弦变换。,一幅图像的大部分可视特征信息都可以用少量的,DCT,系数来表示,图像的,jpg,压缩格式主要是基于离散余弦变换方法。,函数,Dct2,【,例4-5】利用函数,dct2,对图像进行离散余弦变换。,A=imread(D:6.bmp);B=imread(D:7.bmp);,C=imread(D:a.jpg);,C1=im2bw(C);A1=dct2(A);,B1=dct2(B);C2=dct2(C1);,subplot(1,6,1);imshow(A),subplot(1,6,2);imshow(A1),subplot(1,6,3);imshow(B),subplot(1,6,4);imshow(B1),subplot(1,6,5);imshow(C1),subplot(1,6,6);imshow(C2),几个复杂图像,【例4-7】利用函数,idct2,对图像进行逆离散余弦变换。,D=imread(D:0066.jpg);D1=rgb2gray(D);,s=size(D1);D2=dct2(D1);D3=idct2(D2);,P=zeros(s);P1=P;P2=P;P3=P;,P1(1:10,1:10)=D2(1:10,1:10);,P2(1:30,1:30)=D2(1:30,1:30);,P3(1:60,1:60)=D2(1:60,1:60);,E1=idct2(P1);E2=idct2(P2);E3=idct2(P3);,subplot(2,3,1);imshow(D1);,subplot(2,3,2);imshow(D2);,subplot(2,3,3);image(D3),subplot(2,3,4);image(E1);,subplot(2,3,5);image(E2);,subplot(2,3,6);image(E3),图形见下页:,【例4-10】设计程序,使其能够实现函数,dct2,的功能。,A=imread(D:6.bmp);s=size(A);M=s(1);N=s(2);,ap0=sqrt(1/M);ap=sqrt(2/M);,aq0=sqrt(1/N);aq=sqrt(2/N);,for p=1:M-1,for q=1:N-1,k=0;,for m=0:M-1,for n=0:N-1,k=A(m+1,n+1)*cos(pi*(2*m+1)*p/(2*M)*cos(pi*(2*n+1)*q/(2*N)+k;,end,end,B(p+1,q+1)=ap*aq*k;,end,end,【例4-11】设计程序生成离散余弦变换的变换矩阵。,设计下面程序:,M=14;,for i=2:M,for j=1:M,P(i,j)=sqrt(2/M)*cos(i-1)*(2*j-1)*pi)/(2*M);,end,end,P(1,:)=sqrt(1/M);,P14=P,运行程序能够得到14 14大小的变换矩阵,P14。,如何使用矩阵形式编写程序实现离散余弦变换?,【例4-12】编制程序实现逆离散余弦变换。,程序较长,参考教材:,程序的难点在于循环语句嵌套在一起,中间又有分支语句。分支语句是为了解决分别有两个值的问题。,程序利用分支语句把各种情况都考虑进来,把第一行第一列都计算出来,是一个比较完整的程序。,1.离散余弦变换矩阵生成函数,dctmtx,Matlab,提供了函数,dctmtx,来生成离散余弦变换矩阵,相当于例4-11实现的功能。,【例4-13】利用函数,dctmtx,生成离散余弦变换矩阵,然后使用该变换矩阵对图像进行离散余弦变换。,A0=imread(D:a.jpg);,A=im2bw(A0);,s=size(A);,M=s(1);N=s(2);,P=dctmtx(M);,Q=dctmtx(N);,B=P*A*Q,;,实验结果显示与例4-5中得到的,C2,结果相同。,(即语句,C2=dct2(C1);,得到的结果一样),3.离散余弦变换基函数,基函数是数学上一个非常重要的概念。1、,x,、,x,2,、,x,3,乘以系数加到一起能够组合成任意的多项式,1、,x,、,x,2,、,x,3,就是一组基函数。简单有规律的基函数可以构造出一个函数集合或者函数空间。,离散余弦变换可以用它的基函数组合而成。,下面4-4式就表示离散余弦变换的基函数,一共,M*N,个。,下面是用图像显示的8*8的离散余弦变换的基函数:,上机或者课后作业:,1修改例4-10中的程序,使其也能够计算出变换后第一行与第一列的值。,2修改例4-11中的程序,把该程序修改成为函数,使其输入参数,M,,就能够计算出,M,阶的离散余弦变换的变换矩阵。,第5章 图像分析,5.1,图像的灰度统计特性,5.2,图像的轮廓提取与区域分割,5.3,图像的四叉树分解,5.4,图像的纹理分析,5.5,图像的图形化,5.6,视频图像,5.1,图像的灰度统计特性,5.1.1 图像的象素操作,5.1.2 图像的区域属性度量,5.1.3 图像的颜色直方图,5.1.4 图像的方差及相关系数,其实对图像进行的最基本操作是对图像进行像素操作。在目前的计算方式下,对图像进行的一切操作本质上都是从像素开始的。与很多语言一样,,Matlab,也提供了图像(图形)像素操作功能。,Matlab,的像素操作函数有,pixval,与,impixel,等。,1.,pixval,函数,pixval,函数可以交互显示图像上像素的颜色值。该函数还可以显示两个像素点之间的欧氏距离。,【例5-1】,pixval,函数的使用。,A=imread(D:0059.jpg);A1=rgb2gray(A);,A2=dct2(A1);A3=fft2(A1);,subplot(1,4,1);imshow(A),subplot(1,4,2);imshow(A1),subplot(1,4,3);imshow(A2),subplot(1,4,4);imshow(A3),pixval;,交互取点情况见下图,【例5-2】,impixel,函数的使用。,A=imread(D:0059.jpg);A1=rgb2gray(A);,A2=dct2(A1);A3=fft2(A1);,subplot(1,4,1);imshow(A);x1,y1,B1=impixel,subplot(1,4,2);imshow(A1);x2,y2,B2=impixel,subplot(1,4,3);imshow(A2),subplot(1,4,4);imshow(A3),程序运行后,先显示第一个子图,然后等待选取。单击要选取的位置,再右击,该位置的坐标以及该点的颜色值被存储在,x1,y1,B1,中。同时,第二个子图出现,同样操作后,坐标以及颜色值被存储在,x2,y2,B2,中。,图像的区域属性有面积值、图像中的洞孔数目、图像的质心等。本节先分别使用函数,bwarea(),与,bweuler(),计算二值图像的前景面积与图像中的洞孔数目。然后自编程序计算图像质心,接着介绍,Matlab,的特征计算函数,imfeature()。,最后使用这些函数编写几个程序解决实际问题。,1.区域面积,【例5-4】使用,bwarea,函数计算二值图像的前景面积。,A=imread(D:6.bmp);%A、B、C、D,都是二值图像,B=imread(D:0.bmp);,C=imread(D:shouxieshuzi.bmp);,D=imread(D:0371.bmp);,E0=imread(D:0059.jpg);E=im2bw(E0);,k(1)=bwarea(A);k(2)=bwarea(B);,k(3)=bwarea(C);k(4)=bwarea(D);,k(5)=bwarea(E);,subplot(1,5,1);imshow(A),subplot(1,5,2);imshow(B),subplot(1,5,3);imshow(C),subplot(1,5,4);imshow(D),subplot(1,5,5);imshow(E),k,%,图在下面,k=1.0e+005*,0.0076 0.0254 0.1487 0.1669 1.8463,因为图像大小不同,在,Matlab,的,subplot,中显示为一样大小。但实际上数据是准确的。,【例5-5】使用,bweuler,函数计算二值图像的欧拉数。,设计下面程序:,A=imread(D:shouxieshuzi.bmp);,A1=A;,B=imread(D:003.bmp);,B=im2bw(B);,B1=B;,ka=bweuler(A1),kb=bweuler(B1),subplot(1,2,1);imshow(A1),subplot(1,2,2);imshow(B1),程序的运行结果是:,ka=9,kb=-2。,【例5-8】函数,imfeature,的调用方法。,A=imread(D:8.bmp);,L=bwlabel(A);,sta=imfeature(L,Area,Centroid),程序运行结果是:,sta=,Area:3155,Centroid:37.6019 67.2447,在使用函数,imfeature(L,P,),时,可以在参数,P,的位置写入,Area、Centroid、BoundingBox,等,能够直接计算出相应的特性。,图像8.,bmp,只有一个连通区域,所以只计算出一个面积,一个质心。,5.图像区域特性计算应用实例,【例5-10】计算数字的欧拉数识别数字8。,使用,Windows,的画图书写印刷体数字如图5-8所示,以二值方式存储在,D,盘,文件名为,shibie8yi.bmp。,编写下面程序:,A=imread(D:shibie8yi.bmp);,L=bwlabel(A);,e=imfeature(L,EulerNumber);,for i=1:25,e(i),end,imshow(A),欧拉数为,-1,的就是数字,8,。,下面是一个完整的程序,能够计算出图5-8中图像的8在第几个区域。,A=imread(D:shibie8yi.bmp);,L=bwlabel(A);,e=imfeature(L,EulerNumber);,imshow(A),for i=1:25,if e(i).EulerNumber=-1,i,end,end,计算结果是打印出8、16、19。即第8个、第16个、第19个数字。,1.灰度图像直方图,【例5-12】求灰度图像直方图。,A=imread(D:0067.jpg);,B0=rgb2gray(A);B=double(B0);s=size(B);,h=zeros(1,256);,for i=1:s(1),for j=1:s(2),k=B(i,j);,k=floor(k);,h(k+1)=h(k+1)+1;,end,end,subplot(1,3,1);imshow(B0),subplot(1,3,2);imhist(B0),subplot(1,3,3);plot(h),程序的运行结果如图5-9所示。,(,a),原图像(,b)imhist,函数绘制的直方图(,c),自编程序语句绘制的直方图,图5-9 计算并绘制图像的直方图,【例5-15】
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服