版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.1概论
5.2灰度插值5.3几何变换
5.4空间变换的MATLAB实现5.5空间变换演示习题
第5章MATLAB图像空间变换
5.1概论
5.1.1空间变换描述图像的空间变换(又称几何变换)是对图像数据进行几何运算。几何运算与点运算不同,它可改变图像中物体(像素)之间的空间关系。这种运算可以看成是各像素点在图像内移动的过程。可表达为
(5.1)其中,g(x,y)表示输出图像,(x,y)表示变换前的坐标,(x',y')表示变换后的坐标,a(x,y)和b(x,y)分别表示图像在x-y坐标系中空间变换函数。若这两个变换函数是连续的,则将保持图像中的连通关系。空间变换通常叫做橡皮片变换,这是由于它可以看做是在一片橡皮片上打印图像,然后根据预先确定的规则拉伸这个橡皮片的过程。从图像类型来分,图像的空间变换有二维平面图像的空间变换和三维图像的空间变换以及由三维向二维平面投影变换等。从变换的性质分,图像的空间变换有平移、比例缩放、旋转、反射和错切等基本变换,透视变换等复合变换,以及插值运算等。5.1.2主要问题图像的空间变换过程需要有两个独立的算法:空间变换和灰度级插值算法,如图5.1所示。首先,需要一算法来完成图像的空间变换。该算法描述了每个像素从其初始位置移动到终止位置的过程。通过这一计算,可以知道变换后像素的位置。同时,还需要一个灰度级插值算法来处理空间变换后图像中像素灰度级的赋值问题。图5.1图像空间变换示意图几何运算中灰度级插值是必不可少的部分,因为图像一般用整数位置处的像素来定义,而几何变换中,输出图像g(x,y)的灰度值一般由处在非整数坐标上的输入图像f (x,y)的灰度值来确定,即产生“空穴”,即输出图像中的一个像素的位置一般对应于输入图像中的几个像素之间的位置,即输入图像中的一个像素往往被映射到输出图像中的几个像素之间的位置。所以,在进行图像的空间变换时,除了要进行空间变换外,还要进行灰度级插值。5.1.3空间变换的应用
1.几何校正(calibration)空间变换一个重要的应用是消除由于相机固有缺陷引起的图像的几何畸变。当需要从数字图像中得到定量的空间测量数据时,几何校正被证明是十分重要的。例如从卫星上或者飞机侧视雷达上得到的图像,都有相当严重的二级核变形,这些图像必须经过几何校正,然后才能对其内容做出解释。一些图像系统使用非矩形的像素坐标,例如,极坐标、柱坐标、球面坐标等,用普通的显示设备观察这些图像时,必须先对它们进行校正,也就是说,将其转换为矩形像素坐标。例如,在油(水)井套管缺陷识别中,有时需要将极坐标系中的内窥镜图像转换为直角坐标系中的图像,然后进行分析与处理。有时机器人的鱼眼透镜拍摄的一幅严重变形的图像,也可以设计一个适当的空间变换将其校正到矩形坐标系中,这样,就可用立体视觉测距技术对机器人周围的物体进行三维空间定位。
2.地图投影空间变换的另一个主要应用是地图绘制中的图像投影。例如,在利用从宇宙飞船上传回来的图像拼成地球、月球以及行星的航片镶嵌地图时,可以利用空间变换技术。宇宙飞船摄像机图像的矩形边框被投影到行星的表面上,形成一个有四条曲线边的“脚印”。行星的球状表面则被投影到一个平面上以得到一张地图。“脚印”也被投影到地图上,形成一个再次变形的四边形图。空间变换可以把宇宙飞船上的摄像机所拍摄的图像转换成地图所要求的形式。多幅图像按这种方法处理,可组合成行星的航片镶嵌地图,这就要求为一个给定的图像投影确定控制点。为了产生输入和输出控制栅格,程序必须能设置宇宙飞船观测几何参数,以及所选用的制图投影方法的参数。用于太空项目的软件是通过从输出图像到输入图像的反向计算步骤来解决这一问题的。指定的制图投影技术定义了输出图像的点与行星表面上的点之间的关系。宇宙飞船的观测几何决定了行星表面上的点与拍摄图像中像素位置之间的空间关系。程序在输出图像上覆盖一个矩形控制网格,并根据制图投影和宇宙飞船观测几何将它映射回去覆盖到输入图像上。
3.图像配准图像配准是将不同时间、不同波段、不同遥感器系统所获得的同一地区的图像(数据),经几何变换使同名像点在位置上和方位上完全叠合的操作。图像配准(或图像匹配)是评价两幅或多幅图像的相似性以确定同名点的过程。图像配准和几何配准属于同一个意义。图像配准算法就是设法建立两幅图像之间的对应关系,确定相应几何变换参数,对两幅图像中的一幅进行几何变换的方法。几何校正注重的是对数据本身的处理,目的是对数据进行一种真实性的还原;而几何配准注重的是图和图(数据)之间的一种几何关系,其目的是与参考数据达成一致,不论参考数据的坐标是否标准,是否正确。几何校正和几何配准最本质的差异在于参考的标准。另外,几何校正更像前期数据处理,几何配准更像后期处理。
4.图像变形(Morphing)在电影和电视工业中,越来越多的特技是通过几何变换来实现的。变形(Morphing)就是一种可以使一个物体逐渐转变成另一个物体的技术。假设有两幅图像,我们希望利用这两幅图像得到一系列电影画面,画面系列将第一个场景的物体逐步向第二个场景中的物体变换,比如将一张猫脸转变为一张老虎脸。在渐隐(dissolve)技术中,第一幅图像逐渐“淡出”,第二幅则逐渐“淡入”,这种方法很少产生逼真的视觉转换。若在渐隐的同时使用变形技术,让物体上的点从它们的起始位置逐渐移向终止位置,则可产生更为生动的效果。在变形的过程中,最初的和最终的图像都要进行卷绕使它们的控制点能映射到介于初始位置和终止位置之间位置上,从而产生两个图像序列。图像中的显著特征逐渐从初始位置移向最终位置,同时在两个图像序列之间进行渐隐,以完成变形运算。变形处理也可在两个电影序列之间进行。这时物体在运动,因而对应的控制点必须在每一帧图像中标出。最为常用的办法是仅为小部分帧指定控制点,其余的帧用空间插值求解得到。对于序列中的每一帧,在两幅对应图像之间要进行卷绕变换,以使它们的控制点对准。一对控制点所映射的位置从靠近初始图像位置的地方逐渐移动向终点图像位置。在实际应用中,常常是背景保持不变,而只是对场景中的一个对象物体进行变形。这时感兴趣的对象要在暗背景下拍摄。然后,将经过变形处理后的对象序列插入到包含有适当背景的场景中。5.2灰度插值从输入图像和变换信息得到变换后图像各像素点的灰度值的过程叫做灰度插值。灰度插值一般分为向前映射法和向后映射法,下面分别对这两种方法进行简要介绍。
(1)向前映射法。将图像的空间变换想象成将输入图像的灰度值一个一个地转移到输出图像中,如果一个输入像素被映射到四个输出像素之间的位置,则其灰度值就按插值算法在四个输出像素之间进行分配。这种方法称为像素移交(pixelcarry-over)或向前映射法。图5.2给出了该方法的示意图。图5.2向前映射法示意图
(2)向后映射法。另一种方法能更有效地达到目的,即像素填充(pixelfilling)向后映射算法,如图5.3所示。在该算法中,输出像素逐次逐个地映射到输入图像中,以便确定其灰度级。如果一个输出像素被映射到四个输入像素之间,则其灰度值由这四个像素的灰度插值决定,向后映射算法是向前映射算法的逆变换。图5.3向后映射法示意图由于许多输入像素可能映射到输出图像的边界之外,故向前映射变换计算中存在浪费。而且,每个输出像素的灰度值可能要由许多输入像素的灰度值来决定,因而要涉及到多次计算。如果空间中包括缩小变换,则会有四个以上的输入像素来决定一个输出像素的灰度值。如果包括放大变换,则一些输出像素可能会被漏掉。而向后映射算法是逐像素、逐行地产生输出图像,每个像素的灰度值由最多四个像素参与的插值唯一决定。当然,输入图像必须允许按空间变换所定义的方法随机访问。该方法有些复杂,但在实际应用中更为切实可行。在向前映射算法中,每个输出图像的灰度要经过多次运算;而在向后映射算法中,每个输出图像的灰度只要经过一次运算。实际应用中,经常采用向后映射法。下面讨论向后映射方案中根据四个输入像素的灰度值确定输出像素的灰度值的各种插值方法,包括最接近点方法、双线性插值方法和高次插值方法等。5.2.1最接近点最为简单的插值方法就是所谓的零阶插值或者称为最接近点插值。即令输出像素的灰度值等于距它所映射位置最近的输入像素的灰度值。最接近点插值方法计算简单,在许多情况下,其结果也是可以接受的。然而,当图像中包含像素之间灰度级有变化的细微结构时,最接近点方法会在图像中产生人工的痕迹,比如会出现锯齿形的边缘,从而影响输出图像的品质。5.2.2双线性插值要使变换后像素的灰度值能够更精确地反映原始图像的信息,必须提高像素插值的阶数。平面一阶插值(双线性插值)与零阶插值相比,插值处理效果更令人满意。由于通过四点确定一个平面函数属于过约束问题,所以在一个矩形栅格上进行的一阶插值需要用到双线性函数。图5.4为矩形栅格上的双线性插值示意图。图5.4双线性插值示意图令f (x,y)在单位正方形顶点的值已知,假设我们希望通过插值得到正方形内任意点
(x,y)的灰度值f (x,y),可以令双线性方程为
f (x,y) = ax + by + cxy + d(5.2)将相邻四点的值代入上式求出系数即可得到一个双线性插值函数。但这种方法计算繁琐,另有一个简单的算法可以产生一个双线性插值函数,并使之与四个顶点的f (x,y)值拟合。首先,我们对上端的两个顶点(0,0)、(1,0)进行线性插值,可得f (x,0) = f (0,0) + x[f (1,0) - f (0,0)]
(5.3)类似地,对底端两个顶点(0,1)、(1,1)进行线性插值:f (x,1) = f (0,1) + x[f (1,1) - f (0,1)]
(5.4)最后作垂直方向的线性插值:f (x,y) = f (x,0) + y[f (x,1) - f (x,0)]
(5.5)将式(5.3)和式(5.4)代入上式可得:
(5.6)当使用双线性等式对相邻的四个像素进行插值时,所得表面在邻域边界处是吻合的,但斜率却不吻合。这样,一个由分段双线性插值得到的表面是连续的,但其导数在邻域边界处通常是不连续的。5.2.3高次插值双线性插值简单易行,且效果也较佳。但双线性插值可能会使图像的细节产生退化,尤其是在进行放大处理时,这种情况将更为明显。在其他应用中,双线性插值的斜率不连续会产生不希望的效果。这两种情况都可通过高阶插值得到修正。高阶插值需要更多相邻输入像素点,当然这会增加计算量。如果系数的个数与像素点的个数相等,则插值表面可与所有点吻合。如果点的个数多于系数的个数,则可使用曲面拟合或最小误差方法。用于高阶插值的函数有三次样条,Legendre中心函数和sin(ax)/a函数。高阶插值常用卷积来实现,这部分内容请读者参考书后所附的参考文献。5.3几何变换5.3.1齐次坐标将点P0(x0,y0)平行移动到P(x,y),其中x方向的平移量为Δx,y方向的平移量为Δy。显然,在原始坐标系中点P(x,y)的坐标为
(5.7)这个变换用矩阵的形式可以表示为
(5.8)为了更方便地表达上式,可以通过引入点的3 × 2阶变换矩阵T,则式(5.9)可表示为[xy]= [x0y01]T(5.9)其中
(5.10)此矩阵的第一、二行构成单位矩阵,第三行元素为平移常量。在式(5.9)左边坐标行矩阵[x
y]中引入第三个元素,增加一个附加坐标,将其扩展为1 × 3的行矩阵[x
y1],这样用三维空间点(x
y1)表示二维空间点(x,y)。此矩阵的第一、二行构成单位矩阵,第三行元素为平移常量。在式(5.9)左边坐标行矩阵[x
y]中引入第三个元素,增加一个附加坐标,将其扩展为1 × 3的行矩阵[x
y1],这样用三维空间点(x
y1)表示二维空间点(x,y)。式(5.9)的右边点坐标行矩阵[x0y01]没变,通常可将3 × 2阶变换矩阵T扩充为3 × 3阶矩阵,由此式(5.9)也可表示为[xy1] = [x0y01]T(5.11)其中
(5.12)从上式可以看出,引入附加坐标后,扩充了矩阵的第三列,并不会影响变换结果。这种用n + 1维向量表示n维向量的方法称为齐次坐标表示法。二维图像中的点坐标(x,y)通常表示成齐次坐标(Hx,Hy,H),其中H表示非零的任意实数,当H = 1时,则(x,y,1)就称为点(x,y)的规范化齐次坐标。显然规范化齐次坐标的前两个数是相应二维点的坐标,没有变化,仅在原坐标中增加了H = 1的附加坐标。由点的齐次坐标(Hx,Hy,H)求点的规范化齐次坐标(x,y,1),可按如下公式进行:
(5.13)
齐次坐标在2D图像几何变换中的另一个应用是:例如,某点S(60000,40000)在16位计算机上表示,则大于32767的最大坐标值,需要进行复杂的操作,但如果把S的坐标形式变成(Hx,Hy,H)形式的齐次坐标,那么情况就不同了。在齐次坐标系中,设H = 1/2,则(60000,40000)的齐次坐标为(1/2x,1/2y,1/2),那么所要表示的点变为(30000,20000,1/2),此点显然在16位计算机上二进制数所能表示的范围之内。采用齐次坐标,将变换矩阵改成3×3阶的形式,便可实现所有2D图像几何变换的基本变换。基本变换的一般过程是:将n×2阶的二维点集矩阵表示成齐次坐标的形式,然后乘以相应的变换矩阵即可完成,具体的表达形式为变换后的点集矩阵 = 变换前的点集矩阵×变换矩阵T
(5.14)(图像上各点的新齐次坐标)(图像上各点的原齐次坐标)引入齐次坐标后,表示2D图像几何变换的3×3矩阵的功能就完善了,可以用它完成2D图像的各种几何变换。为讨论3×3阶变换矩阵中各元素在变换中的作用,设几何变换的3×3矩阵的一般形式为(5.15)
3×3阶矩阵T可以分成四个子矩阵。其中,这一子矩阵可使图像实现恒等、比例、反射(或镜像)、错切和旋转变换。[l
m]这一列矩阵可以使图像实现平移变换。[p
q]'这一列矩阵可以使图像实现透视变换,但当p = 0,q = 0时它无透视作用。[s]这一元素可以使图像实现全比例变换。5.3.2平移变换图5.5为图像平移前后示意图。图5.5图像平移上节以点的平移为例引入并讨论了齐次坐标,平移变换以3×3矩阵形式给出的变换矩阵为
(5.16)对变换矩阵求逆,可以得到上式的逆变换:[x0y01] = [xy1]
(5.17)这样,平移后图像上的每一点都可以在原图像中找到对应的点。例如,对于新图中的(0,0)像素,代入上面的方程组,可以求出对应原图中的像素为(-Δx,-Δy)。如果Δx或Δy大于0,则点(-Δx,-Δy)不在原图像中。对于不在原图像中的点,可以直接将它的像素值统一设置为0或者255(对于灰度图就是黑色或白色)。同样,若输出图像有像素点不在原图像中,也就说明原图像中有点被移出显示区域。如果不想丢失被移出的部分图像,可以将新生成的图像宽度扩大|Δx|,高度扩大|Δy|。图5.6为待平移变换的图像,图5.7为变换后的图像,变换前后图像的大小相同。图5.6平移前的图像图5.7平移后的图像5.3.3图像旋转变换一般图像的旋转是以图像的中心为原点的,这里先讨论简单的绕坐标原点的旋转变换,将绕图像的中心的旋转作为简单变换的复合。图像的旋转变换是图像的位置变换,将图像上的所有像素都旋转一个相同的角度。同样,图像的旋转变换也可以用矩阵变换表示。设点P0(x0,y0)旋转θ角后的对应点为P(x,y),如图5.8所示。那么,旋转前后点P0(x0,y0)、P(x,y)的坐标分别为(5.18)图5.8图像旋转θ角旋转后的点P(x,y)可以表达成旋转前点坐标和旋转角度的组合:
(5.19)上式写成齐次矩阵形式为[x
y1] = [x0y01]
(5.20)其逆运算为[x0y01] = [x
y1]
(5.21)旋转后,图像的大小一般会改变。和图像平移一样,在图像旋转变换中既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像,如图5.9、图5.10所示。
图5.9旋转前的图像图5.10旋转θ后的图像(扩大图像、转出部分被截)5.3.4图像缩放图像比例缩放是指将给定的图像在x轴方向按比例缩放fx倍,在y轴方向按比例缩放fy倍,从而获得一幅新的图像。如果fx = fy,即在x轴方向和y轴方向缩放的比例相同,称这样的比例缩放为图像的全比例缩放。如果fx ≠ fy,图像的比例缩放会改变原始图像的像素间的相对位置,产生几何畸变。设原图像中的点P0(x0,y0)在将图像进行比例缩放后,在新图像中的对应点为P(x,y),则P0(x0,y0)和P(x,y)之间的对应关系如图5.11所示。图5.11图像比例缩放比例缩放前后两点P0(x0,y0)、P(x,y)之间的关系用矩阵形式可以表示为
[x
y1] = [x0y01]
(5.22)共逆运算为
[x0y01] = [x
y1]
(5.23)5.3.5图像剪切图像剪切的变换公式为[x
y1] = [x0y01]
(5.24)其中shx、shy分别为沿着x、y轴的剪切参数,上述的剪切变换相当于一个横向剪切与一个纵向剪切的复合,剪切变换又称错切变换。5.3.6复合变换以上讨论了各种简单的变换,这些变换统称为仿射变换(除投影变换外)。这些简单的变换可以组合成复杂的变换。图像的复合变换是指对给定的图像连续施行若干次平移、镜像、比例、旋转等基本变换后所完成的变换,图像的复合变换又叫级联变换。利用齐次坐标,对给定的图像按一定顺序依次连续施行若干次基本变换,从数学上可以证明,复合变换的矩阵等于基本变换的矩阵按顺序依次相乘得到的组合矩阵。设对给定的图像依次进行了基本变换F1,F2,…,FN,它们的变换矩阵分别为T1,T2,…,TN,则图像复合变换矩阵T可以表示为T=T1,…,TN-1TN。
1.复合平移设将某个图像先平移到新的位置P1(x1,y1)后,再平移到P2(x2,y2)的位置,则复合平移矩阵为T=T1T2 =(5.25)由此可见,尽管一些顺序的平移用到矩阵的乘法,但最后得到的平移矩阵,只是将平移常量作了加法运算。
2.复合比例对某个图像连续进行比例变换,最后合成的复合比例矩阵,只要对比例常量作乘法运算即可。复合比例矩阵如下:T=T1T2 =
(5.26)
3.复合旋转类似地,对某个图像连续进行旋转变换,最后合成的旋转变换矩阵中的角度常量等于两次旋转角度的和,复合旋转变换矩阵如下:T=T1T2=(5.27)
4.绕图形中心旋转目标图形以(x,y)为轴心顺时针旋转θ弧度,相当于两次平移变换与一次原点旋转变换的复合,变换矩阵为T = (5.28)上述均为相对原点(图像中央)作比例、旋转等变换,如果要相对某一个参考点作变换,则要使用含有不同种基本变换的图像复合变换。不同的复合变换,其变换过程不同,但是无论它的变换过程多么复杂,都可以分解成一系列基本变换。5.3.7投影变换透视变换是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。把三维物体或对象转变为二维图形表示的过程称为投影变换。对于透视投影,一束平行于投影面的平行线的投影可保持平行,而不平行于投影面的平行线的投影会聚集到一个点,这个点称为灭点(VanishingPoint),灭点可以看做无限远处的一点在投影面上的投影。透视投影的灭点可以有无限多个,不同方向的平行线在投影面上能形成不同的灭点,坐标轴方向的平行线在投影面上形成的灭点又称作主灭点。因为有x,y和z三个坐标轴,所以主灭点最多有3个。透视投影是按主灭点的个数来分类的,即按投影面与坐标轴的夹角来分类的,可分为一点透视、两点透视和三点透视,如图5.12所示。图5.12透视变换一点透视只有一个主灭点,即投影面与一个坐标轴正交,与另外两个坐标轴平行,如图5.12(a)所示。进行一点透视投影变换,要很好地考虑图面布局,以避免三维形体或对象的平面域积聚成直线或直线积聚成点而影响直观性。具体地说,就是要考虑下列几点:
(1)三维形体或对象与画面(投影面)的相对位置;(2)视距,即视点与画面的距离;(3)视点的高度。由此,假设视点在坐标原点,z坐标轴方向与观察方向一致,三维形体或对象上某一点P(x,y,z),经一点透视变换后在投影面(观察平面)UO'V上的对应点为P'(x',y',z'),投影面与z轴垂直,且与视点的距离为d,z轴过投影面窗口的中心,窗口是边长为2S的正方形,如图5.13所示。根据相似三角形对应边成比例的关系,有(5.29)图5.13一点透视变换原理图利用齐次坐标,将该过程写成变换矩阵形式:(5.30)一般地,视点不在原点。对于投影平面是任意平面的情况,一点透视变换的矩阵也可以用一个3 × 3矩阵表示:(5.31)其中,aij为指定的变换系数,且有:(5.32)将式(5.31)展开,有:(5.33)5.3.8高阶变换以上讨论了简单的全局空间变换,在这些变换中,各处像素的变换可以用全局一致的变换模型来表达。下面讨论全局变换不一致的复杂空间变换。齐次坐标为确定各种基本变换和复合变换公式提供了一个简单的方法。然而在一些图像处理的应用中,所需的空间变换都相当复杂,无法用简便的数学式表达,此外,所需空间变换数据经常要从实际图像的测量中获得,因此希望从这些测量结果获得几何变换的参数。这一方面的应用实例就是对几何畸变的摄像机拍摄图像的几何校正。首先,将一个矩形栅格目标数字化并显示出来,因为摄像机中有几何变形,所显示的图案不会是准确的矩形,所求空间变换应能使其栅格图案再次被复原到准确的矩形,从而修正摄像机产生的畸变。采用同样的空间变换可用于校正同一摄像机生成的数字化图像(这里假定畸变与景象无关),从而得到不畸变的图像。根据变换的定义区域可以将利用这些控制点进行图像校正(变形)的方法分成两类:一种为全局的多项式卷绕,另一种为局部的控制栅格插值。
(1)多项式卷绕。为空间变换a(x,y)和b(x,y)找到一个函数表达式,多项式通常用来作为空间变换的一般形式,其参数的选择应能够使多项式及其位移量吻合,这种方法称为多项式卷绕(polynomialwarping)。如果多项式的项数与控制点数相同,则可以设计出能够准确地映射到指定的控制点的变换,然后通过解线性方程求得多项式的系数,一般能够用矩阵求逆得到所需的结果。然而当控制点的个数多于多项式的项数时,则必须采用拟合来决定多项式的系数,这就要求空间变换后的图像整体上与指定的控制点进行最佳拟合,但是,每个控制点不一定严格吻合。图5.14(a)为用于确定多项式卷绕的测试靶示意图,图(b)为变形后的靶点分布图,利用图(a)、图(b)可以确定一多项式卷绕变换。图(d)为利用靶点分布确定出的多项式卷绕从变换后的图像(c)恢复出来的图像。
图5.14图像多项式卷绕假设某个测试靶上有十个测试点,可以用如下的二维三阶函数拟合这些点:将测试点的数值代入可以得到如下方程组,以求得x坐标的多项式卷绕系数:(5.34)(5.35)
(2)控制栅格插值。在许多情况下,多项式卷绕不能够适应复杂变换的要求,因此,一些几何运算程序将图像分成许多多边形区域,并对每个区域使用双线性映射函数,用户指定有控制点组成的输入控制栅格,这些控制点在输入图像中形成四边形的顶点。输入控制栅格映射到输出图像中水平放置的矩形栅格上,四边形顶点(输入控制点)直接映射到相应的矩形顶点上,而输入四边形内部的点则被映射到对应输出矩形内部的点上,图5.15为控制栅格差值原理示意图。图5.15图像控制栅格插值原理示意图双线性插值通常用于控制栅格插值,这是由于其计算简单,且可以产生一个能够保持连续性和连通性的光滑映射。双线性映射的一般表达为(5.36)因为总共有八个已知的连接点,通过求解由这些点组建的方程可以解出上式中的八个系数。这些系数构成了用于变换四边形区域内所有像素的几何失真模型,该四边形是由导出系数的连接点定义的。通常,需要足够多的连接点以覆盖整个图像,每个四边形都有描述本区域变换的系数。连接点根据其应用可用多种不同技术建立。例如,一些图像生成系统有物理的、人为的缺陷,镶嵌在图像传感器上。这产生了一个已知点集(叫做网状标志),在图像被获取时直接镶在图像上。可以使用这些点集,对图像进行校正。反过来,我们可以任意定义需要的变形,从而对图像进行变形处理。图5.16给出了这一效果。图5.16图像控制栅格插值示意图5.4空间变换的MATLAB实现
5.4.1缩放变换函数imresize函数imresize对图像进行缩放变换,图像可以是灰度、索引或者真彩色的。该函数有如下几种调用方法。
(1)指定缩放系数。
B=imresize(A,scale)
[Ynewmap]=imresize(X,map,scale)%处理索引图像其中,A为待缩放的图像,scale为缩放系数。若待缩放的图像为索引类型的,则应该给出其X和map矩阵,此时输出参数为待改变的图像及其缩放系数。缩放系数大于1表示放大图像,小于1大于0表示缩小图像。例如,下面的代码将图像放大为原来的1.25倍:
I=imread('circuit.tif');
J=imresize(I,1.25);
imshow(I)
figure,imshow(J)运行结果如图5.17所示。图5.17图像缩放演示实例
(2)指定变换后图像大小。
B=imresize(A,[mrowsncols])对于非索引图像,可以直接指定输出图像的大小。大小由参数[mrowsncols]给定,其中mrows和ncols分别指定输出图像的行数和列数。如果图像指定输出的比例与原始图像的不一致,则图像会发生变形(拉长或压扁)。如果其中一个方向的参数大小设定为NaN,则MATLAB会根据原始图形的比例自动计算这一长度。例如,指定图像的输出大小为100 × 150,代码如下:
I=imread('circuit.tif');
J=imresize(I,[100150]);
imshow(I)
figure,imshow(J)
(3)指定灰度插值方法。 MATLAB调用imresize对图像进行缩放时可以指定像素插值方法,具体的调用方法如下:[...]=imresize(...,method)插值方法的指定有三个形式:插值方法、系统核函数和用户自定义核函数。其中插值方法见表5.1。缺省状态下,imresize使用双三次插值方法。表5.1绘制插值参数选项表5.2系 统 核 函 数用户自定义核函数由一个有两个元素的元胞数组{f,w}构成,f为用户自定义的插值函数句柄,w为核函数的宽度。f (x)在区域[-w/2,w/2]外的值为零。当缩小图像的时候,由于输出图像的大小小于原始的,故可能失去原始图像的部分像素点信息,这一现象叫做混叠(Aliasing)。混叠线性常表现为stair-step模式(特别是对于高对比度的图像),或是ripple-effect模式。5.4.2旋转变换函数imrotate函数imrotate对图像进行绕其中心的旋转变换,其基本调用方法如下:
B=imrotate(A,angle)其中A为待变换图像,angle为旋转的角度(单位为度)。如果旋转角度大于零,则图像逆时针旋转,否则顺时针旋转。与图像缩放函数imresize类似,imrotate也可以指定像素插值方法,此时调用方法为
B=imrotate(A,angle,method)其中method的取值与imresize的一致。图像旋转过程中图像的大小会发生变化,原始图像的大小不一定能容纳下变换后的图像。缺省状态下,imrotate函数会产生一个足够大的图像以将原始图像都包容进去。位于原始图像外的像素点的值设定为0,显示出来就是纯黑。另外,用户也可以通过'crop'参数指定输出图像的大小与输入的一致。此时的调用方法如下:
B=imrotate(A,angle,method,bbox)其中,bbox指定输出图像的大小参数,缺省为'loose'。bbox可以为'crop',表明对输出图像进行裁剪,使其大小与输入图像的一致;也可以为'loose',表明产生一个足够大的图像以将原始图像都包容进去。例如,采用双线性插值方法将输入图像逆时针旋转35°:
I=imread('circuit.tif');
J=imrotate(I,35,'bilinear');
imshow(I)
figure,imshow(J)运行结果如图5.18所示。图5.18图像旋转演示实例5.4.3tformfwd和tforminv
tformfwd函数用于对指定的点施加指定的向前空间变换;tforminv函数用于对指定的点施加指定的向后空间变换。[X,Y]=tformfwd(T,U,V)对指定的二维空间中的点(U,V)施加由T定义的向前空间变换。其中X为变换后点的X坐标向量,Y为变换后的点的X坐标向量,U为变换点的X坐标向量,V为Y坐标向量,T是TFORM结构体,可以由maketform、floptform或cp2tform函数创建。U和V可以有任意行数,但行数必须相等。X和Y的行数与U和V的相等。
[U,V]=tforminv(T,X,Y)对指定的二维空间中的点(X,Y)施加由T定义的向后空间变换。例如:
u=[06-2]';v=[035]';
x=[-104]';y=[-1-104]';
tform=maketform('affine',[uv],[xy]);
[xm,ym]=tformfwd(tform,u,v)
[um,vm]=tforminv(tform,x,y)由于变换tform由输入点(u,v)和输出点(x,y)定义,所以(u,v)的向前变换(xm,ym)等于(x,y),(x,y)的向后变换(um,vm)等于(u,v)。此外,imtransform、findbounds和tformarray等函数内部调用tformfwd和tforminv,进行确定输出图像的范围的前置变换,或将输出的像素/矩阵位置反馈到输入位置。可以使用tformfwd和tforminv函数来浏览几何变换的效果(通过将这些变换施加到点和线上,并且绘制出变换结果)。以上的函数能够处理单个点或图像。5.4.4变换结构体构造函数maketform
maketform函数产生空间变换参数结构体数据TFORM函数。maketform有两类输入参数,第一参数指定待定义的变换类型,包括仿射变换、透视变换、用户自定义变换等几类;第二类参数为变换规则,有两种方法可定义这一参数:以相对应的变换矩阵为输入参数或以对应点变换前后坐标为输入参数。不管采用哪种方法,都能够产生变作为maketform函数参数输入参数相应的TFORM结构数据。
1.变换类型本章的第2节对诸如平移、旋转缩放、映射等变换做了详细的介绍,同时也介绍了简单变换的复合变换。MATLAB支持的几类变换见表5.3。表5.3MATLAB支持空间变换类型
2.变换参数根据前面的讨论,任何变换都可以用变换前后的点进行描述,同时对于仿射和投影变换还可以用变换矩阵进行描述。MATLAB对这种描述变换过程的方式都支持,也就是说输入变换参数有两类方法:
(1)用变换矩阵作为maketform函数的输入参数。对于二维仿射变换,可以用一个3 × 3变换矩阵进行描述。仿射变换矩阵的最后一列为[001]',用户可仅仅指定其中的3 × 2子矩阵,此时imtransform函数自动产生第三列数据。这种方法可以用于任意维的空间变换矩阵。表5.4中给出了各种仿射变换的变换矩阵,任意变换都可以单独使用,或组合使用以实现组合变换。表5.4仿射变换的变换矩阵
(2)使用对应点集作为maketform函数的输入参数。可以通过点列作为maketform函数的参数构建变换矩阵。对于仿射变换,必须选择输入和输出图像上三个不共线的对应点作为输入参数;对于投影变换,必须选择四个点。这种方法仅仅能够用于创建二维空间变换参数。3.创建TFORM结构数据
T=maketform('affine',A)以变换矩阵为输入参数创建一个描述N维的空间仿射变换的TFORM结构数据。A为一个非奇异实矩阵,A的大小为(N + 1) × (N + 1)或(N + 1) × N(此时A的第N + 1列必须为[zeros(N,1);1])。根据以上对二维空间变换理论的讨论可知,矩阵A实际上定义了向前变换。
X = tformfwd(U,T),其中U是一个描述原始图像任意像素点位置的1 × N向量,返回量X是一个描述变换后图像任意像素点位置的1 × N向量,且有X =U*A(1:N,1:N)+A(N + 1,1:N)。同时,T包含了描述向前变换和向后(逆)变换的矩阵和执行相应变换的函数。
T=maketform('affine',U,X)
以对应点集为输入参数创建一个描述二维空间仿射变换的TFORM结构数据。其中U是一个描述原始图像任意三个非共线像素点位置的3 × 2向量,X是一个描述变换后图像对应的三个像素点位置的3 × 2向量,此三点不共线。U、X的每一行代表一个点。
T=maketform('projective',A)以变换矩阵为输入参数创建一个描述N维的空间透视变换的TFORM结构数据。A为一个非奇异实矩阵,A大小为(N + 1) × (N + 1),且A中元素(N + 1,N + 1)必须不等于零。矩阵A实际上定义了向前变换,X = tformfwd(U,T),其中U是一个描述原始图像任意像素点位置的1 × N向量,返回量X是一个描述变换后图像任意像素点位置的1 × N向量,且有X=W(1:N)/W(N + 1),其中W=[U1]*A。同时,T同时包含了描述向前变换和向后(逆)变换的矩阵和执行相应变换的函数。
T=maketform('projective',U,X)以对应点集为输入参数创建一个描述二维的空间透视变换的TFORM结构数据。其中U是一个描述原始图像任意四个像素点位置的4 × 2向量,X是一个描述变换后图像对应的四个像素点位置的4 × 2向量,要求输入点和输出点中的任意三点都不共线。U、X的每一行代表一个点。
T=maketform('composite',T1,T2,...,TL)
T=maketform('composite',[T1T2...TL])以变换TFORM结构数据为输入参数创建一个描述复合变换过程的TFORM变换参数。输入的变换矩阵Ti的顺序与实际需要变换的顺序一致。假设复合变化由三个简单变换组成,则实际的变换为tformfwd(U,T)=tformfwd(tformfwd(tformfwd(U,T3),T2),T1)。这里要求Ti的维数要一致。且要求都必须定义了向前和向后变换函数。利用maketform创建自定义变换的方法的请参见MATLAB的在线帮助或者帮助手册。
4. TFORM结构组成例如,选择三个点,以用maketform函数产生相应的变换矩阵。这三个点分别为输入和输出图像上对应的三个顶点,代码运行结果如下:
in_points=[1111;2111;2121]
out_points=[5151;6151;6161]
tform2=maketform('affine',in_points,out_points)
tform2=
ndims_in:2
ndims_out:2
forward_fcn:@fwd_affine
inverse_fcn:@inv_affine
tdata:[1x1struct]其中ndim_in和ndims_out分别表示变换前后空间的维数;forward_fcn为向前变换的函数句柄;inverse_fcn为向后变换的函数句柄;tdata为一个结构体数据,包含两个域,T和Tinv,分别对应向前变换矩阵和向后(逆)变换矩阵。除了调用maketform函数创建TFORM结构数据外,也可以调用cp2tform函数创建TFORM结构数据,这一部分请参见图像匹配相关内容。5.4.5逆变换结构体产生函数fliptform
TFLIP=fliptform(T)将TFORM结构体中的向前变换和向后变化对调。若有如下代码:
T=maketform('affine',[500;.520;001]);
T2=fliptform(T)则下列两个变化是等效的:
x=tformfwd([-37],T)
x=tforminv([-37],T2)5.4.6二维变换函数imtransform
imtransform函数对图像进行二维空间变换。调用时必须指定待变换图像、描述变换参数的TFORM结构体数据以及其它可选参数。
(1)调用方法一:
B=imtransform(A,TFORM)对图像A作由TFORM定义的空间变换,TFORM结构体数据可以由maketform产生,也可以由cp2tform产生。如果图像为RGB模式的真彩色图像,其灰度矩阵为三维的,则imtransform函数自动对每一维施加同样的灰度插值计算。调用过程中,imtransform函数自动移动输出图像的中心以使输出图像能够显示更多的内容。所以这种调用方法将此函数应用于图像配准时,所得到的结果往往不是自己希望得到的,可以借助于“XData”和“YData”参数使图像处于所需的位置。
(2)调用方法二:
B=imtransform(A,TFORM,INTERP)其中,INTERP为指定的插值方法,其取值如表5.5所示。表中双线性插值方法为缺省值。INTERP参数可为由makeresampler函数返回的RESAMPLER的结构体数据,通过这个参数可以对图像变换实施更精细的控制。表5.5interp插值方法
(3)调用方法三:
[B,XDATA,YDATA]=imtransform(...)输入参数同第一、第二种方法。但这种调用方法通过输出参数XDATA和YDATA返回输出图像空间中输出图像的位置参数。XDATA和YDATA都是二维向量,XDATA给出输出图像的第一列和最后一列的x坐标值,YDATA给出输出图像的第一行和最后一行的y坐标值。一般来讲,imtransform函数自动计算XDATA和YDATA的值,以使输出图像B包含A整个变换后的信息。这种默认的行为可以通过输出参数进行修改,具体的方法参见调用方法四。
(4)调用方法四:
[B,XDATA,YDATA]=imtransform(...,param1,val1,param2,val2,...)通过param1、val1、param2、val2等输入参数对来对空间变换作精细的控制。其它的输入参数与调用方法一、二相同,输出参数与第三种方法相同。表5.6给出了可选输入参数变量名称以及意义。表5.6imtransform可选参数表输出变量XDATA和YDATA不一定等于输入变量'XData'和'YData'。这源于两方面的原因:行数和列数的取整;指定的输入参数'XData'、'YData'、'XYScale'和'Size'之间不一致,存在冲突。但是不管在哪种情况下,输出变量XDATA和YDATA的第一个元素都等于输入变量'XData'和'YData'的第一个元素,仅仅是第二个元素之间存在差异。为了使读者更清楚地理解变量,下面举例说明:例5.1灰度图像对于灰度图像,指定颜色值为一标量。对于上述例子的第五步中,可以如下调用以设置输出颜色和区域。
cb_fill=imtransform(cb,tform_translate,...
'XData',[1(size(cb,2)+xform(3,1))],...'YData',[1(size(cb,1)+xform(3,2))],...'FillValues',.7);figure,imshow(cb_fill)输出结果如图5.19所示。图5.19调用imtransform对灰度图像进行变换例5.2彩色图像对于彩色图像,可以使用标量或者1 × 3的向量。如果指定值为标量,则imtransform函数使用这个数值作为RGB三个颜色的数值,以创建一个1 × 3的向量;如果为向量,则imtransform函数认为这个数值为RGB的颜色值。
rgb=imread('onion.png');
xform=[100
010
40401]
tform_translate=maketform('affine',xform);cb_rgb=imtransform(rgb,tform_translate,...'XData',[1(size(rgb,2)+xform(3,1))],...'YData',[1(size(rgb,1)+xform(3,2))],...'FillValues',[187;192;57]);figure,imshow(cb_rgb)图5.20为上述代码对图像平移变换的结果。图5.20调用imtransform对彩色图像进行变换如何设置多幅RGB图像变换时的填充颜色值呢?例如,现在需要变换10幅彩色图像,图像用一个4-D的数组表示,大小为200×200×3×10,指定填充颜色值有集中方法:(1)设定一个标量作为填充值;(2)设定一个1×3的数组作为RGB颜色值;(3)制定一个3×10的矩阵,作为各个图像RGB填充色。5.5空间变换演示
5.5.1MATLAB空间变换的基本步骤除了简单的几何变换可以直接调用简单变换函数(imcrop、imresize、imrotate等)外,复杂的二维变换也可调用imtransform函数来实现,高维变换调用tformarray函数来实现。MATLAB中调用这些函数来实现空间变换的一般步骤如下:
(1)定义空间旋转参数,参见本章中的定义变换数据一节。
(2)创建名为TFORM的变换结构数据,这一数据定义你所期望进行的变换类型。TFORM数据是包含变换参数的MATLAB结构类型的数据。通过这一参数,用户可以指定translation、scaling、rotation、shearing、projectivetransformations、customtransformations等仿射变换的参数。调用maketform函数产生TFORM结构。具体参见创建TFORM结构一节。另外,用户也可以调用第6章图像匹配中的cp2tform函数创建此结构。
(3)调用imtransform函数执行变换,此函数的输入参数为待变换的图像和TFORM结构数据。5.5.2图像的基本空间变换例如,以剪贴板图像为变换对象,对其分别施加TFORM结构体所能够支持的各类空间变换,以使读者明白各类空间变换的意义以及MATLAB图像处理工具包中的实现方法和步骤。待变换图像为用checkboard函数产生的剪贴板图像如图5.21所示。
I=checkerboard(10,2);
imshow(I);图5.21checkboard生成的原始图像
1.非反射相似变换图像经过非反射相似变换后平行线仍然是平行线,直线仍然是直线。此类变换包括旋转、缩放和平移,变换中形状和角度保持不变。本小节以旋转和平移为例对此变换进行演示。演示中以变换矩阵的形式给出maketform的第二类参数。
(1)旋转、缩放变换。将图像绕其中心旋转40°,x、y方向都放大为原来的1.2倍。scale=1.2; %缩放比例angle=40*pi/180; %旋转角度tx=0; %x平移量ty=0; %y平移量sc=scale*cos(angle);ss=scale*sin(angle);T1=[sc–ss0;sssc0;txty1];非反射相似变换是仿射变换的子集,可以调用maketform函数创建TFORM结构,并调用imtransform函数对图像进行变换:
t_nonsim1=maketform('affine',T1);
I_nonreflective_similarity1=
imtransform(I,t_nonsim1,'FillValues',.3);
figure,imshow(I_nonreflective_similarity1);运行结果如图5.22所示。图5.22线性仿射变换之旋转缩放
(2)平移变换。平移变换由于仅仅是图像的位置发生了变换,用图像显示对细节表示不是很明确,本小节借助于某些参数将这些细节表现出来,以使读者进一步了解平移变换。与旋转和缩放变换类似,使用3 × 3矩阵来指定变换参数:
tx=40;%x平移量
ty=40;%y平移量
T2=[100;
010;
txty 1]与缩放和旋转例子类似,可以调用maketform函数创建TFORM结构,并调用imtransform函数对图像进行变换:tform_translate=maketform('affine',T2);
[cb_transxdataydata]=imtransform(cb,tform_translate);例子中xdata和ydata返回输出图像坐标空间中输出图像的位置。xdata和ydata分别包含x、y向的像素位置。由于原点的位置为(1,1),故输出的位置为(41,41),见图5.23。图5.23平移变换参数说明调用imshow函数显示变换后的图像,如图5.24所示。figure,imshow(cb_trans)图5.24非反射变换二(平移变换)对于平移变换的图像,变化前后一致,如何理解呢?可以通过查看imtransform函数返回的xdata和ydata数据来考察空间变换。输入图像的左上点的位置变换前为(1,1),变换后为(41,41),右下点数据从(80,80)变为(120,120)。这就表明图像进行了指定的平移变换。变换前后的显示图像没有变化的原因在于imtransform函数总是将图像裁剪到适当的大小以能够恰巧容纳整个图像。可以通过指定输出图像大小和输出空间大小的参数来改变这一缺省设置,从而将图像的平移变换效果表现出来:
cb_trans2=imtransform(cb,tform_translate,...
'XData',[1(size(cb,2)+xform(3,1))],...
'YData',[1(size(cb,1)+xform(3,2))]);
figure,imshow(cb_trans2)代码中XData和YData指定输出坐标系统中包含图像的空间大小。上述代码运行结果如图5.25所示。图5.25平移变换利用XData和YData参数处理后显示结果
2.相似变换经过相似变换后,相似三角形变换成相似三角形。非反射相似变换是相似变换的子集。相似变换的变换模型与非反射相似变换的一致,为[uv]=[xy1]T,其中T是由四个参数外加可选的放射决定的。
scale=1.5; %缩放参数
angle=10*pi/180; %旋转角度
tx=0; % x平移
ty=0; % y平移
a=-1;
sc=scale*cos(angle);
ss=scale*sin(angle);
T=[sc-ss0;
a*ssa*sc0;
txty1];调用maketform函数创建TFORM结构,并调用imtransform函数对图像进行变换:t_sim=maketform('affine',T);[I_similarity,xdata,ydata]=imtransform(I,t_sim,'FillValues',.3);与平移变换的例子类似,这里采用imtransform函数返回参数xdata和ydata来显示图像的平移变换效果,如图5.26所示。figure,imshow(I_similarity,'XData',xdata,'YData',ydata)图5.26相似变换
3.仿射变换在仿射变换中,x/y方向的缩放和剪切可以相互独立。同时可以有平移、镜面对称和旋转变换。平行线经变换后仍然是平行线,直线变化后仍然是直线。设变换矩阵为
T=[ 1 0.30;
1 10;
0 01];调用maketform函数创建TFORM结构,并调用imtransform函数对图像进行变换:
t_aff=maketform('affine',T);
I_affine=imtransform(I,t_aff,'FillValues',.3);
figure,imshow(I_affine)
title('仿射变换')运行结果如图5.27所示。图5.27仿射变换
4.投影变换经投影变换后,四边形仍然是四边形,直线仍然是直线。仿射变换是投影变换的子集。对于投影变换,其变换方程为
u = up/vpv = vp/wp(5.37)
T是3×3矩阵,其中几个元素都可以改变以指定不同的变化矩阵:(5.38)上述矩阵等同于下面两方程:(5.39)变换例子为T=[100.008;110.01;00
1];调用maketform函数创建TFORM结构,并调用imtransform函数对图像进行变换:t_proj=maketform('projective',T);I_projective=imtransform(I,t_proj,'FillValues',.3);figure,imshow(I_projective)title('projective')结果如图5.28所示。图5.28投影变换5.多项式变换(多项式卷绕)这里我们以二阶多项式为例,说明多项式卷绕的过程。包含x和y项的二阶卷绕多项式模型为
[u,v] = [1x
y
xy
x2y2]T(5.40)
u和v都是x和y的二阶多项式,每个二阶变换多项式有六项,可以指定六个参数。变换矩阵T为6 × 2的。首先调用cp2form函数产生TFORM结构体数据:
xybase=reshape(randn(12,1),6,2);t_poly=cp2tform(xybase,xybase,'polynomial',2);T=[0 0; 1 0; 0 1; 0.001 0; 0.02 0; 0.01 0];t_poly.tdata=T;对图像施加多项式卷绕变换(如图5.29所示):I_polynomial=imtransform(I,t_poly,'FillValues',.3);figure,imshow(I_polynomial)title('多项式卷绕')图5.29多项式卷绕
6.分段线性变换在分段线性变换中,仿射变换独立地应用到图像各个独立的三角形区域。例如,下面的代码显示将保持图形的左上角的三角形,而将右下角的三角形进行拉伸。首先调用cp2form函数产生TFORM结构体数据:
xy_input=[1010;1030;3030;3010];
xy_base=[1010;1030;4035;3010];
t_piecewise_linear=
cp2tform(xy_input,xy_base,'piecewiselinear');对图像施加分段线性变换并显示变换结果(如图5.30所示):
I_piecewise_linear=imtransform(I,t_piecewise_linear);
figure,imshow(I_piecewise_linear)title('分段线性变换')图5.30分段线性变换
7. sinusoidal变换调用相关函数产生描述变换的结构体数据:
[nrows,ncols]=size(I);
[xi,yi]=meshgrid(1:ncols,1:nrows);
a1=5;%sinusoids变换幅度
a2=3;
imid=round(size(I,2)/2); %中间元素坐标
u=xi+a1*sin(pi*xi/imid);
v=yi-a2*sin(pi*yi/imid);
tmap_B=cat(3,u,v);
resamp=makeresampler('linear','fill');调用tformarray对图像施加指定的变换,并显示变换结果:
I_sinusoid=tformarray(I,[],resamp,[21],[12],[],tmap_B,.3);
figure,imshow(I_sinusoid)
title('sinusoid变换')图5.31为图像经sinusoid变换的结果。图5.31sinusoid变换
8. Barrel变换
Barrel扭曲将图形从中心向外进行放射状的变形,外面的变形大于内部的变形,结果呈现为凸面。首先产生描述变换的结构体数据:
%径向barrel扭曲
xt=xi(:)-imid;
yt=yi(:)-imid;
[theta,r]=cart2pol(xt,yt);
a=.001;%三次项幅度
s=r+a*r.^3;
[ut,vt]=pol2cart(theta,s);
u=reshape(ut,size(xi))+imid;
v=reshape(vt,size(yi))+imid;tmap_B=cat(3,u,v);调用tformarray对图像施加指定的变换,并显示变换结果(如图5.32所示):
I_barrel=tformarray(I,[],resamp,[21],[12],[],tmap_B,.3);figure,imshow(I_barrel)
title('barrel变换')图5.32barrel变换
9. pincushion变换大头针扭曲是barrel扭曲的逆变换,这是由于三次项系数为负。变换仍然是外部的变形大于内部的,但是结果呈现为凹面。首先产生描述变换的结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苏州技术转让采购制度
- 政府采购质疑答复制度
- 厂家药品采购管理制度
- 供销社采购内控制度
- 管理采购人员制度
- 采购物资质量管理制度
- 村级物资采购制度
- 科研试剂采购制度
- 采购部门回避制度规定
- 采购部问责制度
- 智能化系统施工方案
- 电磁屏蔽防护装置采购合同
- (一模)扬州市2026届高三模拟调研测试数学试卷(含答案详解)
- 医疗卫生信息数据安全与隐私保护规范(标准版)
- 2026年合肥职业技术学院单招职业适应性测试题库含答案详解(基础题)
- 2026年装饰装修劳务分包合同(1篇)
- 2026年人教版初二英语语法知识点归纳总结
- 2026福建水投集团沙县水务有限公司招聘4人笔试参考题库及答案解析
- 2026年春节后工地复工复产专项施工方案二
- 2025-2026学年北京市东城区九年级(上)期末英语试卷
- 2026年企业开年电气安全操作培训
评论
0/150
提交评论