您好,欢迎访问三七文档
1第二章图像的几何变换图像几何变换是指用数学建模的方法来描述图像位置、大小、形状等变化的方法。在实际场景拍摄到的一幅图像,如果画面过大或过小,都需要进行缩小或放大。如果拍摄时景物与摄像头不成相互平行关系的时候,会发生一些几何畸变,例如会把一个正方形拍摄成一个梯形等。这就需要进行一定的畸变校正。在进行目标物的匹配时,需要对图像进行旋转、平移等处理。在进行三维景物显示时,需要进行三维到二维平面的投影建模。因此,图像几何变换是图像处理及分析的基础。本章在讲授图像几何变换的基础上,对图像的位置变换(平移、镜像、旋转)、形状变换(比例缩放、错切)和复合变换进行阐述。2.1几何变换基础2.1.1齐次坐标数字图像是把连续图像在坐标空间和性质空间离散化了的图像。例如,一幅二维数字图像可以用一组二维(2D)数组,),(yxf来表示,其中x和y表示2D空间xy中一个坐标点的位置,),(yxf代表图像在点),(yx的某种性质的数值。如果所处理的是一幅灰度图,这时),(yxf表示灰度值,此时),(yxf,x,y都在整数集合中取值。因此,除了插值运算外,常见的图像几何变换可以通过与之对应的矩阵线性变换来实现。图2.1.1图像的平移变换示意图现设点),(00yx0P进行平移后,移到),(yxP,其中x方向的平移量为xΔ,y方向的平移量为yΔ。如图2.1.1所示,那么,点),(yxP的坐标为:0xOxxyy0y)(yxP,)(000yxP,2⎩⎨⎧Δ+=Δ+=yyyxxx00(2.1.1)这个变换用矩阵的形式可以表示为:⎥⎦⎤⎢⎣⎡ΔΔ+⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡yxyxyx00(2.1.2)对式(2.1.2)进行简单变换可得:⎥⎦⎤⎢⎣⎡ΔΔ+⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡yxyxyx001001 (2.1.3)对式(2.1.3)进行进一步变换可得:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎦⎤⎢⎣⎡ΔΔ=⎥⎦⎤⎢⎣⎡1100100yxyxyx (2.1.4)式(2.1.4)等号右侧左面的矩阵的第1、2列构成单位矩阵,第3列元素为平移常量。该矩阵是点),(00yx0P平移到),(yxP的平移矩阵,即为变换矩阵。该变换矩阵是2×3阶的矩阵,为了符合矩阵相乘时要求前者列数与后者行数相等的规则,需要在点的坐标列矩阵[]T00yx中引入第3个元素,增加一个附加坐标,扩展为3×1的列矩阵[]T001yx。这样式(2.1.3)同式(2.1.4)表述的意义完全相同。为了使式(2.1.4)左侧表示成矩阵[]T1yx的形式,可用三维空间点)1(, ,yx表示二维空间点)(yx,,即采用一种特殊的坐标,可以实现平移变换,变换结果如下:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡ΔΔ=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11001001100yxyxyx (2.1.5)现对式(2.1.5)中的各个矩阵进行定义:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡ΔΔ=1001001yxT为变换矩阵;⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=1yxP为变换后的坐标矩阵;3⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=1000yxP为变换前的坐标矩阵;则有:0PTP•=(2.1.6)从式(2.1.6)可以看出,引入附加坐标后,扩充了矩阵的第3行,但并没有使变换结果受到影响。这种用1+n维向量表示n维向量的方法称为齐次坐标表示法。2.1.2齐次坐标的一般表现形式及意义1.齐次坐标的一般表现形式式(2.1.6)给出了图像经过平移后齐次坐标的特殊形式,齐次坐标的一般形式可表示为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=HHyHxP(2.1.7)式中,H为非零的实数。当1=H时,[]T1yx=P称规范化齐次坐标。由点的齐次坐标()HyHx,,H,求点的规范化齐次坐标)1(, ,yx。可按如下公式进行:HHxx=HHyy=(2.1.8)2.齐次坐标的意义齐次坐标的几何意义相当于点)(yx,落在3D空间1=H的平面上,如图2.1.2所示。如果将xy平面内的三角形abc的各顶点表示成齐次坐标)1(, ,iiyx)321(, , =i的形式,就变成1=H平面内的三角形1a1b1c的各顶点。4图2.1.2齐次坐标的几何意义2.1.3二维图像几何变换的矩阵为了将式(2.1.6)写成一般形式,对包括平移在内的所有几何变换都适用,对P,T,0P进行重新定义,齐次坐标为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=HHHHyHyHyHxHxHxnn2121P(2.1.9)当1=H时,规范化的齐次坐标为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=1112121nnyyyxxxP(2.1.10)变换矩阵T为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=smlqdcpbaT(2.1.11)⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=11100201002010nnyyyxxxP(2.1.12)则上述变换可以用公式表示为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⋅=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11111100201002012121nnnnyyyxxxyyyxxx T(2.1.13)xyzOabc1a1b1c1=H5引入齐次坐标后,表示2D图像几何变换的3×3矩阵的功能就完善了,可以用它完成2D图像的各种几何变换。下面讨论3×3阶变换矩阵中各元素在变换中的功能。几何变换的3×3矩阵的一般形式如式(2.1.11)所示。3×3阶矩阵T可以分成4个子矩阵:22×⎥⎦⎤⎢⎣⎡dcba子矩阵可使图像实现恒等、比例、镜像、错切和旋转变换;[]Tqp列矩阵可以使图像实现平移变换;[]ml行矩阵可以使图像实现透视变换,但当00==ml,时它无透视作用;s这一元素可以使图像实现全比例变换。例如将图像进行全比例变换,即:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡110001000100iiiiyxyxs (2.1.14)由式(2.1.14)可知,该等号在s≠1时,等式两端不等,若想使等式成立,将式(2.1.14)变为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡ssysxyxsiiii10001000100 (2.1.15)齐次坐标规范化后得:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡110001000100iiiiyxssysxs (2.1.16)由式(2.1.16)可见,当1s时,图像按比例缩小,如2=s,20xx=,20yy=,图像缩小到原来的l/2;当10s时,整个图像按比例放大,如2/1=s,02xx=,02yy=,图像放大到原来的2倍;当1=s时,0xx=,0yy=,图像大小不变。2.2图像的位置变换图像的位置变换主要包括图像平移变换、图像镜像变换和图像旋转变换等。2.2.1图像平移变换1图像平移变换6Δx坐标原点X),(00yx0PΔy),(yxPY图2.1.1像素平移示意图平移(Translation)变换是几何变换中最简单的一种变换,是将一幅图像上的所有点都按照给定的偏移量在水平方向沿x轴、在垂直方向沿y轴移动,如图2.1.1所示。设点),(00yx0P进行平移后移到),(yxP,其中x方向的平移量为xΔ,y方向的平移量为yΔ。那么,点),(yxP的坐标为:⎩⎨⎧Δ+=Δ+=yyyxxx00(2.2.1)利用齐次坐标,变换前后图像上的点),(00yx0P和),(yxP之间的关系可以用如下的矩阵变换表示:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡ΔΔ=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11001001100yxyxyx (2.2.2)对变换矩阵求逆,可以得到式(2.2.2)的逆变换:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡Δ−Δ−=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11001001100yxyxyx (2.2.3)⎩⎨⎧Δ−=Δ−=yyyxxx00(2.2.4)2平移变换的几点说明①平移后图像上的每一点都可以在原图像中找到对应的点。例如,对于新图中的(0,0)像素,代入式(2.2.4)所示的方程组,可以求出对应原图中的像素()yxΔ−Δ−。如果xΔ或yΔ大于0,则点()yxΔ−Δ−不在原图像中。对于不在原图像中的点,可以直接将它的7像素值统一设置为0或者255(对于灰度图就是黑色或白色)。设某一图像矩阵F如式(2.2.5)所示。图像平移后,一方面可以将对于不在原图像中点的像素值统一设置为0,如式(2.2.6)所对应的矩阵G;另一方面,也可以将对于不在原图像中的点,将它的像素值统一设置为255,如式(2.2.7)所对应的矩阵H。图像平移结果如图2.2.1所示。⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=−−−nnnnnnnnnnffffffffffff12121222211111211####F(2.2.5)⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=−−−12111222211112110000000nnnnnnfffffffff####G(2.2.6)⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=−−−1211122221111211255255255255255255255nnnnnnfffffffff####H(2.2.7)②若图像平移后并没被放大,说明移出的部分被截断,原图像中有点被移出显示区域。式(2.2.6)所对应的矩阵G和式(2.2.7)所对应的矩阵H,是式(2.2.5)所对应的矩阵F平移的结果。由于平移后图像没有被放大,使得移出的部分丢失。图像平移结果如图2.2.2所示。③若不想丢失被移出的部分图像,并将新生成的图像扩大,如图2.2.3所示,则:⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=−−−nnnnnnnnnnffffffffffff#####21121112222111121100000000G(2.2.8)图2.2.1图像的平移图2.2.2移动后图像大小不变8图2.2.3移动后图像被放大3程序实现(1)具体步骤(1)取得原图的数据区指针。(2)通过对话框输入偏移量Δx,Δy。(3)开辟一个同样大小的缓冲区。(4)对原图依次循环每个像素,每读入一个像素点),(00yx0P,根据它的坐标找到目标图像的位置⎩⎨⎧Δ+=Δ+=yyyxxx00,将像素00(,)xy处的颜色值赋给新图中的(,)xy。(2)程序代码/***************************************************************函数名称:PingYi()*函数类型:void***************************************************************/voidJiHeBianHuanDib::PingYi(intm_Xmove,intm_Ymove){//指向源图像的指针LPBYTElpSrc;LPBYTEp_data;//指向要复制区域的指针LPBYTElpDst;//指向复制图像的指针LPBYTEtemp;//循环变量LONGi;//图像的高和宽LONGwide,height;//图像每行的字节数LONGlLineBytes;p_data=GetData();wide=GetWidth();height=GetHeight();//计算图像每行的字节数lLineBytes=(((wide*8)+31)/32*4);//暂时分配内存,以保存新图像9temp=newBYTE[lLineBytes*height];//初始化新分配的内存,设定初始值为255lpDst=(LPBYTE)temp;memset(lpDst,(BYTE)255,lLineBytes*height);//每行for(i=0;iwide;i++){//每列for(intj=0;jheight;j++){//计算该像素在源DIB中的坐标lpSrc=(LPBYTE)p_data+lLineBytes*(height-1-j)+i;inti0,j0;//计算该像素在新DIB中的坐标i0=i+m_Xmove;j0=j+m_Ymove;//判断是否在新图范围内if((i0=0)&&(i0wide)&&(j0=0)&&(j0height)){lpDst=(LPBYTE)temp+lLineBytes*(height-1-j0)+i0;//复制像素*lpDst=*lpSrc;}else{//对于源
本文标题:图像的几何变换
链接地址:https://www.777doc.com/doc-7700141 .html