资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.1 图像的点运算,3.1.1 概述,点运算,也称为对比度增强、对比度拉伸或灰度变换,是一种通过对图像中的,每个像素值,进行计算,从而改善图像显示效果的操作。,点运算常用于改变图像的灰度范围以及分布,是图像数字化及图像显示的重要工具。,1,图像的点运算,点运算不会改变图像内像素点之间的空间关系。设输入图像为A(x,y),输出图像为B(x,y),则点运算可表示为:,B(x,y)=f A(x,y),点运算完全由,灰度映射函数,f 决定。根据 f 的不同可以将图像的点运算分为线性点运算和非线性点运算两种。,2,3.1.2 线性点运算,灰度映射函数 f为线性函数时的运算。,用D,A,表示输入点的灰度值,,D,B,表示相应输出点的灰度值,则函数 f的形式如下:,f(,D,A,)=a,D,A,+b=,D,B,(P39 图3.1,线性点运算,),除了调节图像的对比度以外,还有一种典型的线性点运算的应用:灰度标准化。,(P39 公式3.2 3.3 3.4),3,3.1.4 MATLAB的点运算实现方法,MATLAB图像处理工具箱没有提供对图像进行点运算的函数,而将图像的点运算过程直接集成在某些图像处理函数中(例如,直方图均衡化函数histeq,imhist)。,如果希望对图像进行点运算处理,那么可以充分MATLAB强大的矩阵运算能力,对图像数据矩阵调用各种MATLAB计算函数进行处理。,NOTE:由于MATLAB不支持UINT8类数据的矩阵运算,所以首先要将图像数据转换为双精度类型,计算完成后再将其转换为UINT8类型。,6,function diffraction01(L,dx,Lxx,Lyy,theta)%rect diffraction 单缝衍射041025 is ok!,x,y=meshgrid(-L:dx:L);%L=125,dx=2,Lxx=8,Lyy=5,theta=45,n=length(x),f=zeros(n);,d=abs(x)Lxx,f(d)=1;,subplot(2,2,1),imshow(f),k=imrotate(f,theta,bilinear,crop);,subplot(2,2,3),imshow(k),F=fft2(f,256,256);,F=fftshift(F);,Fm=log(abs(F);,subplot(2,2,2),imshow(Fm,-1 5),colormap(jet),colorbar,K=fft2(k,256,256);,K=fftshift(K);,Km=log(abs(K);,subplot(2,2,4),imshow(Km,-1 5),%this is ok!,7,3.2 图像的代数运算,3.2.1 概述,图像的代数运算是图像的标准算术操作的实现方法,是两幅输入图像之间进行点对点的加、减、乘、除运算后得到输出图像的过程。,如果设输入图像为A(x,y)和B(x,y),输出图像为C(x,y),则图像的代数运算有如下四种形式:,8,C(X,Y)=A(x,y)+B(x,y),C(X,Y)=A(x,y)-B(x,y),C(X,Y)=A(x,y)*B(x,y),C(X,Y)=A(x,y)/B(x,y),9,图像的代数运算在图像处理中有着广泛的应用,它可以实现自身所需的算术操作,还能为许多复杂图像处理提供准备。,例如,图像减法就可以用来检测同一场景或物体生成的两幅或多幅图像的误差。,图像处理工具箱包含了一个能够实现所有非稀疏值数据的算术操作的函数集合。,P42 表3.1图像处理工具箱中的代数运算函数,NOTE:两幅输入图像的大小应相等,且类型相同。,10,3.2.2 图像的加法运算,图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。,直接采集的图像品质一般都较好,不需要进行加法处理,但是对于那些经过长距离模拟通讯方式传送的图像(如卫星图像),这种处理是比不可少的。,11,在MATLAB中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数(给图像的每一个像素加上一个常数可以使图像的亮度增加),可以调用imadd函数来实现。,调用格式:,Z=imadd(X,Y),其中,X,Y表示需要相加的两幅图像,返回值Z表示得到的结果。,12,3.2.3 图像的减法运算,图像的减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。图像的减法可以作为许多图像处理工作的准备步骤。,图像的减法与阈值化处理的综合使用往往是建立机器视觉系统最有效的方法之一。,13,Sanban02a.bmp,14,Sanban02a(3).bmp,15,%sanban jian d fft2,clf,a=imread(sanban02a.bmp);,a=rgb2gray(a);,a=double(a)/255;,a=a(1:200,1:200);,b=imread(sanban02a(3).bmp);,b=rgb2gray(b);,b=double(b)/255;,b=b(1:200,1:200);,g=b-a;,fg=fft2(g);,fg=fftshift(fg);,16,%fg=abs(fg);,dfg=max(max(fg),fgm=abs(fg/dfg);,fgm=sqrt(fgm);,figure(1),imhist(fgm),fgm1=imadjust(fgm,0,0.45,0 1);,figure(2),imshow(fgm1),%imhist(fgm1),figure(3),mesh(fgm1),ffg=fft2(fgm1);,ffg=fftshift(ffg);,17,dffg=max(max(ffg);,ffgm=ffg/dffg;,ffgm=abs(ffgm);,ffgm=sqrt(ffgm);,figure(4),ffgm=imadjust(ffgm,0 0.5,0 1,0.5);,imhist(ffgm),figure(5),imshow(ffgm),figure(6),n,m=size(ffgm);,ffgx=ffgm(:,m/2);,d=find(ffgx=0.35);,ffgx(d)=0;,plot(ffgx),pixval,18,在MATLAB中,使用函数imsubtract可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。,调用格式:,Z=imsubtract(X,Y),其中,Z是X-Y的结果。,Imabsdiff计算两幅图像相应像素差值的绝对值,返回结果不会产生负数。,19,3.2.4 图像的乘法,两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。,一幅图像乘以一个常数,被称为缩放,这是一种常见的图像处理操作。如果缩放因数大于1,图像亮度增强,如果小于1,图像亮度变暗。这种操作能够维持图像的相关对比度,比简单添加像素偏移量得到自然得多的明暗效果。,20,在MATLAB中,使用immultiply函数实现两幅图像的乘法。Immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作(MATLAB点乘),并将结果作为输出图像相应的像素值。,调用格式:,Z=immultiply(X,Y),其中,Z=X.*Y,21,3.2.5 图像的除法运算,除法运算可用于校正成像设备的非线性影响,这在特殊形态的图像(如断层扫描等医学图像)处理中常常用到。,图像除法也可以用来检测两幅图像间的区别。除法操作给出的是相应像素值的变化比率,而不是每一个像素的绝对差异,故图像除法也称为比率变换。,22,在MATLAB中,使用imdivide函数实现两幅图像的除法。Imdivide函数对两幅输入图像的所有相应像素执行元素对元素的出发操作(点除),并将结果作为输出图像的相应像素值。,调用格式:,Z=imdivide(X,Y),其中,Z=X./Y,23,3.2.6 图像的四则代数运算,可以综合使用多种图像代数运算函数来完成一系列的操作。,执行图像四则运算操作较好的方法,是使用函数imlincomb。,调用格式:,Z=imlincomb(A,X,B,Y,C),其中,Z=A.*X+B.*Y+C,MATLAB回自动根据输入参数的个数判断需要进行的运算。,24,3.3 图像的几何运算,3.3.1 几何运算与坐标系统,几何运算可以看成是,像素在图像内移动,过程,该移动过程可以改变图像中物体对象(像素)之间的空间关系。,完整的几何运算需要由两个算法来实现:,空间变换算法和灰度插值算法。,空间变换主要用来保持图像中曲线的连续性和物体的连通性。,25,空间变换,空间变换的一般定义:,g(x,y)=f(x,y)=f(a(x,y),b(x,y)),其中,f表示输入图像,g表示输出图像,坐标(x,y)空间变换后的坐标。,26,灰度级插值,灰度级插值主要是对空间变换后的像素赋予灰度值,使之恢复原位置处的灰度值。,在几何运算中,灰度级插值是比不可少的组成部分,因为图像一般用整数位置处的像素来定义。,27,图像的坐标系统,MATLAB图像处理工具箱主要采用两种坐标系统:像素坐标系统和空间坐标系统,像素坐标:图像被视为如图P48 3.14(a)所示的离散元素网格,网格按照从上到下,从左到右的顺序排列。,像素坐标与MATLAB矩阵下标一一对应,这种对应关系有助于理解图像数据矩阵与图像显示之间的关系。,28,空间坐标系统,任何像素中心点的空间坐标都与该像素的像素坐标一致。,但是,这两种坐标系统也存在着很重要的,区别,:在像素坐标中,图像的左上角位置是(1,1),而在空间坐标中,该位置缺省情况下为(0.5,0.5)。,像素坐标系统是离散系统,而空间坐标系统是连续的。,另外,在像素坐标系统中,左上角始终为(1,1),但是空间坐标系统中可以使用一个任意的起始点。,29,x,y,O,空间坐标:x=,0,N,-1;y=0,M,-1;,像素坐标:i=1,2,N;j=1,2,M,图一,30,像素坐标与空间坐标另一个容易混淆的地方在于,两个坐标系统的水平分量符号和垂直分量符号是一种逆转关系。像素坐标从左到右表示图像列的方向,而空间坐标从左到右相当于图像行的方向。,我们用r和c作为下标的函数采用的是像素坐标系统,而以x和y作为下标的函数采用的是空间坐标系统。,31,3.3.2 灰度级插值,灰度级插值是用来估计像素在图像像素间某一位置处取值的过程。,灰度级插值的方法有很多种,但是插值操作的方式都是相同的.,首先要找到与输出图像相对应的输入图像点,再通过计算该点附近某一像素集合的权平均值来指定的输出像素的灰度值.,像素的权是根据局像素到点的距离而定的,不同插值方法的区别就在于所考虑的像素集合不同.,32,邻域:在一定意义下,与该像素相邻的像素的集合,O,O,O,O,*,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,*,O,O,O,O,O,O,O,O,O,O,O,O,O,O,*,O,O,3,3,邻域,5,5邻域,O,O,O,O,*,O,O,O,O,4邻域N,4,(p),8邻域N,8,(p),3,3,邻域=(x+1,y),(x,y+1),(x-1,y),(x,y-1),5.像素间的相邻关系,N,D,(p)=N,8,(p)-N,4,(p):对角邻域,33,4邻接,设V是邻接性的像素集合.,前提:p,q都取V中值,q,N,4,(p),8邻接,q,N,8,(p),m邻接(混合邻接,),q,N,4,(p),q,N,D,(p)且N,4,(p),N,4,(q)无V值像素,q,N,4,(p),34,通路,4通路,8通路,m通路,闭合通路,p,q是连通的,连通分支,连通集,(是针对一个由像素组成的集合而言),区域的边界(边缘,轮廓:区域中的特殊像素的集合),(连通集叫区域),35,距离度量,欧氏距离:,D,e,(p,q)=(x-s),2,+(y-t),2,1/2,D,4,距离:,D,4,(p,q)=|x-s|+|y-t|,D,8,距离:,D,8,(p,q)=max|x-s|,|y-t|,p=(x,y),q=(s,t),习题:D8=De=D4?,36,放大和收缩数字图像,放大过采样,收缩欠采样,核心问题:,新像素的位置?新位置上的像素灰度值?,)实数倍与整数倍放大,)最近领域内插(0阶插值),)像素复制,)双线性内插(1阶插值),37,最近领域内插,(0,阶插值,),1.a=放大倍数,原图像f(x,y)的图幅参数为m*n,2.令M=am,N=an,3.令g(i,j)=f(x,y),(x,y):abs(i-ax)=min,abs(j-ay)=min,像素复制,1.a=整数,原图像f(x,y)的图幅参数为m*n,2.令M=am,N=an,3.令g(i,j)=f(x,y),(x,y):i a=x,ja=y,38,令,f,(x,y)在单位正方形顶点的值已知,可通过如下的双线性插值得到正方形内任意点的值.设,双线性方程,为,双线性内插,(1,阶插值,),注:此处的(x,y)是归一化坐标,39,3.3.3 空间变换,空间变换是将输入图像的像素位置映射到输出图像的新位置处,常用的,图像几何,操作技术(例如,调整图像大小、旋转或剪切)。,空间变换既包括可用数学函数表达的简单变换(例如,平移、拉伸等仿射变换),也包括依赖于实际图像而不易用函数形式描述的复杂变换。,P51图3.17 各种仿射变换的效果,40,MATLAB实现空间变换函数,首先创建一个所需空间变换的结构体TFORM,TFORM可以使用maketform函数建立。,其调用格式:,T=maketform(type,A),其中,A表示需要变换的图像,type是变换类型。,然后,再调用imtransform函数,B=imtransform(A,TFORM,INTERP),41,表3.2 maketform函数支持的空间变换类型,变换类型,描述,Affine,仿射变换,可能包括平移、旋转、尺度、拉伸和剪切等,Projective,透视变换,Box,对图像的每一维单独进行仿射变换的一种变换,Custom,用户定义的变换,composite,两种或多种变换的结合,42,3.3.4 几何运算的简单应用,1.改变图像大小,MATLAB使用imresize函数来改变一幅图像的大小。,调用格式:,B=imresize(A,M,METHOD),其中,A和M分别表示需要进行操作的图像和放大倍数,B表示大小改变后的图像。,调用imresize函数可以指定输出图像的真实大小。例如,以下命令将创建一幅100*150的输出图像:Y=imresize(X,100 150),43,几何运算的简单应用,2.图像旋转,使用imrotate函数来旋转一幅图像。,调用格式:,B=imrotate(A,ANGLE,METHOD,BBOX),其中,A表示需要旋转的图像,ANGLE 表示旋转的角度,METHOD的取值分别为:nearest、bilinear和bicubic。,44,几何运算的简单应用,3.图像剪切,使用imcrop函数可以从一幅图像中抽取一个矩形的部分,调用格式:X2=imcrop(X,MAP,rect)其中,X表示有待剪切的图像,不指定X时,imcrop将当前坐标轴中的图像作为待剪切的图像。MAP表示X为索引图像时的调色板,RECT定义剪切区的矩形坐标。,45,3.4 图像的邻域操邻域作,3.4.1 概述,邻域是指一个远远小于图像尺寸的形状规则的像素块。一幅图像所定义的所有邻域大小应相同。,邻域操作:输出图像中的每个像素值都是由对应的输入像素及其某个邻域内的像素共同决定的。,包括两种类型:滑动邻域操作和分离邻域操作。,46,3.4.2 滑动邻域操作,滑动邻域操作一次处理一个像素,输出图像的每一个像素都是通过对输入图像某邻域内的像素值采用某种代数运算得到的。,滑动邻域操作可以用来实现许多种类的滤波操作(例如,线性滤波的卷积操作)。,47,使用nlfilter函数可以实现多种滑动邻域操作。,调用格式:,B=nlfilter(A,index,M N,FUN,P1,P2,),其中,A表示输入图像,M N指定邻域大小,FUN是一个返回值为标量的计算函数,如果其需要参数,参数P1、P2将紧跟其后。返回值B是一个与输入图像相同大小的图像矩阵。nndex是可选参数,若存在,nlfilter函数将A作为索引图像来处理。,48,3.4.3 分离邻域操作,分离邻域是将矩阵划分m*n后得到的矩形部分。分离邻域从左上角开始覆盖整个矩阵,邻域之间没有重叠部分。,函数blkproc可以实现分离邻域操作。,blkproc函数首先从图像中抽取一个分离邻域,然后将该邻域传递给指定的计算函数,最后由blkproc函数将返回的邻域组装起来创建一个输出图像。blkproc函数的调用格式与nlfilter函数基本相似。,49,3.4.4 列处理,对于MATLAB语言来说,在进行图像处理之前将图像数据矩阵转换为矩阵列可以大大提高图像处理的速度。,可以使用colfilt函数来实现列处理操作。,调用格式:B=colfilt(A,M N,BLOCK-TYPE,FUN),其中,A为输入图像,M N 为指定邻域大小。BLOCK-TYPE如果取值为distinct,则表示分离块操作;如果取值为sliding,则表示滑动块操作。FUN为计算函数,B为输出图像。,50,
展开阅读全文