具体实施方式
首先参考图1,图1示出了根据本发明的优选实施例构建的变形系统100的例子。变形系统100包括几何输入接口110、网格变换生成器120、面片(patch)几何图形生成器130、曲面函数评估器140、误差分析级150、边界框生成器160、分辨率/视图缩放生成器170、数据重排级180以及输出接口190。
变形系统100将网格数据(逐个像素)表达转变成曲面函数表达,导致了有效的实时硬件实现。需要应用2D空间变换的任何系统都能够使用变形系统100。变形系统100的使用范围从纠正放映机、照相机和显示设备中的小失真到纠正透视如梯形畸变或者空间广角透镜纠正,以及到图像几何的完全改变如从圆形360度的图像形成矩形全景图,或者从其他的矩形图形成极坐标型映射。
几何输入接口110根据少量的几何参数来获得或者包括变换描述。这些参数从最高层次来描述(也就是说定义)变换。一些例子包括根据投影角度以及透镜投影比例来描述梯形变换,或者根据径向三次多项函数(在这种情况下,参数是是个四次多项式系数)描述透镜纠正,或者根据显示曲面的曲率半径来描述显示曲面。在极端的情况下,根据小几何参数的封闭描述(closed description)不可用,可能需要使用数学描述来给出点的小子集的映射。
网格变换生成器120连接到几何输入接口110。网格变换生成器120使用从几何输入接口110获得的输入几何参数来产生空间变换的网格数据描述,网格数据描述定义了对应的几何映射,并提供变换后的新像素位置。网格变换生成器120使用逆映射变换,也就是规定输出图像中每个像素从何处映射到输入图像的空间变换。这种方法确保了按照输出图像的水平/垂直扫描线中每个输出像素的处理顺序,给每个输出像素分配一个值。另一方面,正如所知道的,正向映射会在具有未分配像素的输出图像中留下“孔”。
参考图2,图2示出了将通用2D变换用图像表达为,对输出图像坐标空间中的像素P应用逆映射以获取输入坐标空间中的输入图像的像素P’。通用变形会将点映射到输入坐标空间中非整数位置。像素通常被模拟成具有有限区域的点,而不是精确的点,如每个格点周围的打点空间所示。因此,输出图像中像素P作为区块ABCD处理,区块ABCD变形为输入坐标空间中P’周围的任意形状ABCD。在输入空间中,像素P,可看成重叠的像素1、2、3和4。
如图2所示,输入空间的原点以及输出空间的原点定义为位于每个对应图像的左上角,x正向朝右,y正向朝下。输入和输出图像通常存储到或写入到存储器形态的部件中,因此,本发明有时候将输入图像空间和输出图像空间分别称为输入存储空间和输出存储空间。一般上,可通过下面形式的等式来总结来概述网格数据描述:
U=Fu(X,Y)
(1)
V=Fv(X,Y)
这些等式规定,通过空间变换F=(Fu,Fv),将输出图像中的坐标为(X,Y)的像素映射到输入图像中坐标为(U,V)的像素。因此,网格数据集关系{(Ui,Vi),(Xi,Yi)}或者单个网格数据集,是输出空间中的一组像素{(Xi,Yi)},该组像素{(Xi,Yi)}被反映射到输入空间的像素{(Ui,Vi)}。如上所述,坐标{X,Y,U,V}是物理存储器地址空间的坐标。这种关系如下表示:
有两种常用的定义空间变换的方法。第一种方法是掌握或构建映射(Fu,Fv)的显函数形式,这意味着我们具有用于空间变换的显数学模型。第二种方法是,网格数据集关系{(Ui,Vi),(Xi,Yi)}给出了与输出像素位置(Xi,Yi)对应的输入像素位置(Ui,Vi),输出像素位置(Xi,Yi)是已知的,或者可为部分或所有的输出空间构建输出像素位置(Xi,Yi)。输出位置(Xi,Yi)是整数值,通常包括输出存储空间的规则采样,而所映射的输入像素位置(Ui,Vi)通常是非整数,如图2所示。数学模型通常与几何输入接口110的少量几何参数的描述有关,但是,网格数据集与少量点的数字描述有关。因为在数学模型方法中可以估计映射以获得网格数据集,所以第二种方法更加通用。
网格数据集关系模型被认为是空间变换的“理想”表达(实际上,网格数据可能包括噪声,这种情况下,“理想”是指接近)。但是,随着数据集(或者函数)从图像的一个区变化到另一个区,这种描述可能非常复杂。直接基于这种表达的图像变换系统是很难在软件和硬件中实现的。当网格数据集{(Xi,Yi)}或者网格数据集关系{(Ui,Yi),(Xi,Yi)}跨越整个输出空间时,网格数据分量本质上等于逐个像素的表示。在这种意义下,任何使用逐个像素(查找/替换表)描述的现有技术中,都暗含着使用网格数据集来表达2D空间变换。但是,逐个像素描述对于硬件实现是低效的。本发明的变形系统100将网格数据(逐个像素)关系表示变换成曲面函数表达。
在函数表示前经常进行的简化是分离双程处理的数据。如传统方法所知道的,进行分离的主要好处是简化相应的硬件实现。将比例缩放的数据分离成垂直和水平程(或数据集),允许使用1D滤波。但是,这牺牲了图像质量,此外,不是所有的映射都是可分离的。在现有的存储空间和速度的条件下,能够有效地进行2D滤波的单程实现。这种实现的一个例子是sxT2芯片(由加利福尼亚州的圣何塞市的Silicon Optix公司制造)。因此,现有技术中从分离双程处理得到的硬件优势被更重要的目标所取代,也就是保持图像质量以及变换的灵活性。本发明的方法不使用分离,但是也允许有效的硬件实现,以及保持完整的灵活性来表达通用2D映射。因为该方法是单程的,所以所得到的图像质量(在使用2D滤波时)要优于使用双程法的图像质量。
为了全面的了解本发明的用途,了解扫描线处理是必要的,扫描线处理常用于评估输出空间中的2D变换以简化硬件处理。变换可能是现有技术中的双程,或者像本发明一样是单程的。在扫描线处理中,沿着行(水平)或/和列(垂直)有序地产生输出像素。在一行/列完全生成之后,处理继续至下一行/列。扫描线处理的一种变形是首先处理每行/列的一部分,如部分1,然后(在每行/列的部分1已经处理之后)返回处理部分2,以此类推。这种变形组合了两种方向的扫描线处理。在输出端的扫描线处理不限制输入图像数据所应用的处理类型。特别地,我们能够使用2D滤波。
在输出端使用扫描线处理的主要限制是输入中(需要滤波的像素数据)的存储访问可能是随机的。在输出空间中临近的像素(它们是几乎逐一处理的)可能需要跨越大区域的输入空间中数据,使得输入存储器访问低效。在滤波时这会是一个问题(导致较慢的处理以及更长的延迟),但是远不及在评估描述变换的曲面多项式时遇到的问题,而这就是本发明的要点所在。在本发明中,在输出空间定义曲面多项式,不需要访问输入像素数据。
对于扫描线处理,需要定义输出空间中所有像素的空间变换。这意味着从数据集描述转变到能最近似于每个像素的理想映射(为采样数据恢复所述每个像素,所述理想映射由已知的网格数据集关系给出)的函数描述。对于没有明确地定义数学模型的区域,函数描述将推断明确定义的数据或者将这些区域映射到背景。后一做法是可以接受的,因为数学模型中不清楚的区域总是对应背景像素。
图3示出了面片几何图形生成器130的功能。面片几何图形生成器130产生矩形面片阵列,这些矩形面片定义在输出空间中(图2),在这些矩形面片上数据要进行曲面拟合。面片不必须具有相同的大小,但是在这个特定实现中,面片应该以规则的方式拟合在一起。该上下文中的术语“规则的”用于表示面片能够排列成行和/或列。这不是限制性的,因为使用矩形面片进行的任何分割都能带来规则的排列。图3示出了规则的和不规则的分割。面片的数量由变形的复杂性、拟合误差(下面会讨论)的容差级、用于拟合的基本函数的类型以及其他的实现约束条件决定。原则上,面片可分配到四个临近像素点的任何一组上,但是,这要求更大的存储器来存储这种空间变换。
曲面函数评估器140连接到面片几何图形生成器130,曲面函数评估器140产生网格变换的函数描述。常用于获取空间变换的函数描述的方法是垂直地和/水平地拟合扫描线子集上的网格数据。这种拟合通常基于最小平方,具有通常是多项数的基本函数。拟合扫描线的缺点是:(a)需要存储大量的数据,就是说,需要存储每个拟合的扫描线的一组多项式系数;以及(b)因为是拟合单个扫描线,所以丢失了扫描线之间的变形的整体描述。特别是,如果没有为每行或每列拟合扫描线,这是因为存储器的限制而经常出现的情况,需要进行插值以获得扫描线之间的网格数据。任何形式的不考虑变形的整体描述的插值,会导致像素位置的误差,这种误差可能是相当大的,这取决于变形的敏感性。
对两个坐标的网格数据进行曲面拟合能够解决上面的这些问题。曲面拟合应用于单程和双程法,是描述2D空间变换的一种自然方式。它提供了准确的描述,同时结合了两个方向上的几何行为。当曲面拟合是通过多项式方法获得时,意味着拟合描述单向扫描线拟合的多项式系数。虽然曲面提供了映射的完整2D描述,但是曲面的评估依然垂直地或水平地以扫描线的顺序进行。因此,也能够使用有效的扫描线算法实现基于曲面的描述。
现在参考图1至图3,表面函数评估器140使用选择的基本集将每个矩形面片的网格数据拟合到曲面,选择的基本集如下文所述。应当意识到,这种处理假定数据不是多次估值的,就是说,没有出现重叠。对于实时硬件实现,最常用的拟合选择是x和y的三阶多项式曲面。曲面拟合将函数逼近到理想的数据集关系{(ui,vi),(xi,yi)}。曲面函数可表示为ui=Snu(xi,yi)等。输出坐标空间的原点选择为每个面片重新定义的相对原点。这意味着我们能够将原点定义在每个面片的左上角。这减少了拟合和曲面评估涉及的数字范围,这对于减少数值误差尤其是在硬件算法单元中的数值误差是重要的。
下面将更加详细地描述基于多项式的方法的特定实现。多项数函数(以xiyi形式表示)是最常用于硬件实现的非平凡(non-trivial)函数。任何基于多项式的曲面,例如B样条(B-spline)曲面,都可转化成这种形式。下面的符号可用于各种拟合曲面:
这里,被评估的曲面上的坐标跨越整个面片,不仅仅跨越数据集中的采样像素(用下标c表示已计算)。曲面的顺序是x方向上的K和y方向上的L,K和L可以不同。曲面系数{Snu,kl,Snv,kl}可从拟合中获得,唯一地定义所有面片上的曲面。
曲面拟合使从基于网格的表达即{(ui,vi),(xi,yi)}变换到基于曲面多项式(函数)的表达(对于面片n),例如:
对于v也类似,如上所述。仅仅需要存储(所有曲面/面片的)曲面系数Snu,kl,而不需要存储众多的网格数据关系点{(uivi),(xi,yi)}。接着,评估曲面以确定逆映射的像素位置。拟合过程确定了曲面系数。可以使用不同的方法和拟合函数来拟合数据,但是最常用的是用于拟合的最小平方法(the Least Squaremethod)。
图4是示出了由曲面函数评估器140产生的两个2D滤波的曲面,它们基于将输出坐标空间分割成四个矩形面片的阵列。这里,图4A所示的曲面是不连续的,而图4B所示的曲面是连续的,——后面将会讨论不连续的情况。
误差分析级150一旦得到了2D数据集中每个输出坐标点的曲面,就评估相关的曲面函数以获得uic和vic值。误差分析级150将这些值与独立地从网格变换生成器120得到的2D网格描述中的精确坐标(ui,vi)进行比较。接着,它确定是否满足预定的容差级条件(|uic-ui|,|vic-vi|)。如果不满足预定的容差级条件,误差分析级150将误差分析结果回发给面片几何图形生成器130。面片生成器130基于这些结果再分这些面片。仅仅再分那些误差大于容差级的面片。面片的再分保持了矩形阵列的规则性。进行再分的主要候选面片是包含大量背景的面片。通常,映射到背景、输入坐标空间外的像素的拟合误差较大。在这种情况下,那些点应该关联到独立的面片,采用将这些点映射到背景的方式进行拟合。接着,独立拟合有关的非背景区。可重复这些步骤直至获得理想的精确度。应当意识到,对于指定的实现,曲面函数是不变的。
在本发明的实施例中,通过梯度搜索和/或随机搜索来完成优化面片几何的处理。在面片边界位置的矢量空间进行搜索。对于M×N的面片阵列,有M+1个y向边界(垂直的)和N+1个x向边界(水平的),矢量空间的维度是M+N+2。
在梯度搜索中,沿着步进矢量
选择面片边界的起始配置(矢量),用
表示。在
和
上进行拟合和误差分析。如果
的误差更小,就保留
并使用
和
重复该过程。如果误差相等或者更大,就保留
并选择新的步进矢量
接着使用
和
重复该过程。步进矢量可基于误差的变化进行调整。对于大的变化,使用更大量级的步进;对于小的变化,使用更小的步进。面片几何图形生成器130确保在矢量空间的所有可能方向上进行搜索以确保搜索不仅限于本地误差的最小值。迭代的数量取决于允许用于搜索的时间。在所有适用的面片阵列数例如1×1面片阵列、1×2面片阵列、2×1面片阵列等上进行梯度搜索,直到达到预定的最大阵列为止。
随机搜索从面片边界的矢量空间上随机地选择边界矢量
可以在各种约束下选择这些矢量,如强制最小/最大的面片大小等。在保持给出最小误差的一个矢量的情况下,计算误差以拟合矢量
如梯度搜索一样,随机搜索在所有可能的面片阵列数上进行。在本发明的一个实施例中为大多数的变换进行基准测试,如下所解释的,20次迭代已足够获得误差上的10倍的降低(对于指定的面片阵列数)。
在本发明的另一个实施例中,减少误差的有效和稳健方法包括组合梯度搜索和随机搜索。首先使用随机搜索来获得矢量
将误差最小化。接着,该矢量用作梯度搜索的起始矢量,
其中,梯度搜索还用于提炼随机搜索获得的结果。一些随机/梯度(组合)搜索也用于确保已经为误差最小化的面片几何图形彻底探测了面片边界空间。
需要强调与上述曲面表达有关的一些重点。如果需要,将每个面片作为独立的输出坐标空间处理,将每个面片的数据集作为独立的2D变换处理。特别地,可以独立地拟合每个面片,这表明输出图像不必须是连续的。图4A和图4B示出了面片上不连续的和连续的曲面拟合的例子。图4A中所示的四个面片可再分以改善拟合。具体地,1024×768的x-y的输出空间可分割成4个面片,它们的表面(u(x,y)已经用虚线表示。在图4A中,曲面是不连续的相交曲面。每个面片具有独立的数据集,这些数据集独立于相邻的数据集进行拟合。在图4B中,曲面是在各片面间是连续的,在这种情况下,任何面片的拟合需要确保连续性。
对于保持各片面边界间的图像连续性的常见情形,可以使用明确允许或者使用连续性约束的基本函数。在2D中控制连续性的最出名的函数是B样条(B-spline)和贝塞尔(Bezier)曲面。这两种类型的曲面都可以用于获得需要的连续度(用数学意义的Ci连续函数表示)。对于B样条,使用张量积(tensor pruduct)法在M×N阵列面片上拟合曲面,可从样条节点轻易获得面片分界线,反之亦然。通过调整节点的顺序,能够容易地控制B样条曲面的连续性。通过双立方的B样条,能够实现高达C2的连续性,这种连续性足以满足所有目的。(通常C1是需要获得平滑图像所需要的。)不连续曲面,也就是独立的面片,可看成B样条的特定情况,具有合适的节点顺序。样条也可以写成具有相对原点的本地多项式形式(在每个面片上),这自然地变成基于多项式的硬件实现。B样条拟合的工具可用于很多的数字的/数学的计算软件包。另外,每个独立的面片都能够与不同的操作关联。基于面片的(在片面边界间任意连续的)曲面描述都允许非常复杂的2D空间变换的表达。
一般2D空间变换的完整表达由应用到每个面片的以下数据提供:
1)面片的几何图形(面片原点的绝对位置、面片大小)
2)描述曲面与网格数据的拟合关系的曲面系数
这种表达提供了定义2D映射的统一格式。将这种表达向2D图像变换系统的实时硬件实现进行调整。在硬件实现中,按照扫描线顺序评估曲面多项式,将位置和导数信息(derivative information)传递给处理滤波器。(从位置曲面提取导数是很容易的。)由于映射由完整的函数形式提供,所以完整的几何数据(各种阶的导数)能很容易地用于滤波级。
随着映射复杂度的增加,面片的数量以及包含在上述(1)和(2)表达的数据量也增加。数据与映射的复杂性成比例,不随着总体格式发生变化。面片数量的增加也有助于减少滤波误差。原则上,通过连续地再分面片阵列,可将最大滤波误差减少到任意小的水平。但是,在实践中,多少空间(存储量)可用于存储数据(每个面片都有与它相关的数据分量(1)和(2)关联)的约束,会限制面片的数量。通过平衡存储器要求以及误差最小化(容差水平),将确定最终的面片阵列大小。
现实中感兴趣的大多数2D变换都不要求高分辨率的面片网格(patchmesh)。为了量化面片大小以及误差问题,使用上述格式研究了一些2D映射。它们包括(i)一般的透镜失真,例如径向枕形畸变和桶形失真;(ii)投影映射,如竖直/水平梯形畸变纠正和在曲面上投影;(iii)结合线性放大的旋转;(iv)上述的组合;更加复杂的映射如(v)弧形光栅映射;(vi)纠正广角/360度/全景图像(使用鱼眼镜头或者特殊的360度成像系统获得)。
我们使用的是阶为3的多项式曲面(K=L=3),这意味着每个面片具有16个曲面系数。误差极限设为0.5像素。对于变换(ii)到(iv),最多需要4个面片。这相当于使用不超过128个曲面系数来定义整个映射。如果曲面系数存储为4字节的浮点型,那么数据大小相当于不超过512字节。这是非常合理的数目,容易为板上/片上存储器所接受。
对于变换(i)和(v),(对于两个坐标)最多需要26个面片,数据大小不超过1.625K字节(Kbytes),同样易于当前板上/片上存储器处理。对于变换(vi),透视纠正到90度宽的视图,最多需要18个面片,或者不超过1.125Kbytes。如果使用了表达的完整功能性,那么,可对变换(vi)获得的图像应用复杂的变换。例如,来自两个180度的鱼眼镜头的图像可变换成缝合的360度全景图,另外,可将特定区域的两个拍摄成90度的视图纠正成透视图。这种变换对应于大约6次映射(360/90+2),每个映射变换特定的90度的区域,给出不超过6.725Kbytes的数据大小。最近几年中,这种特效的基于广角/360度的变换变得流行,尤其在安全应用领域。因此,显然,上面提到的这些结果能够表示通用的2D变换,具有合理的数据大小(数据大小与复杂性成线性比例)以及子像素的准确度。
通过补偿具有边界框数据的图像变换数据,可以获得其他的硬件优化。由边界框生成器160产生的边界框数据,用于减少不必须的硬件处理。如上所述,输出空间中的大区域通常对应于背景像素(要注意,在变换时应用这个特征会压缩输入图像,在使用2D滤波时,这对硬件资源最敏感的)。在这些像素位置,不需要评估曲面,也不需要执行滤波,——所需要的就是应设为背景颜色的像素颜色。为了让硬件快速地(即,不需要评估曲面)识别大量的背景像素,每个面片都让它与矩形边界框相关联。边界框由其在输出空间中的左上部坐标(xL B,yL B)、右底部坐标(xR B,yR B)简单定义。仅仅处理坐标位于边界框内即
和
的那些输出像素(即,评估曲面,且像素的颜色值由2D滤波决定),其中,边界框外的这些像素仅被简单分配背景颜色。这消除了很多循环冗余处理。
不是所有的背景像素都以这种方法识别,因为非背景像素的边界通常不是矩形的。但是,通过较细地分割边界框,可能每个面片多于一个边界框,那么可使用矩形的边界框来紧密接近背景像素的边界,这需要使用更多的存储(用于存储边界框坐标)。对于大多数变换,边界框数据不是必需的,对于极端的变形,每个面片具有一个边界框就足够了。
如果不使用边界框数据,可以使用更标准的方法来消除不需要的处理。在标准方法中,评估所有输出像素的曲面并进行检查以确定所得到的坐标是否落在输入空间中。如果坐标位于输入空间内,那么,照常进行处理,就是说,通过2D滤波确定输出像素的颜色值。如果坐标位于输入空间外,那么,给这些像素简单地分配背景颜色,不进行2D滤波。在这里,虽然没有评估曲面,但是滤波器不需要处理这些数据,因此得到的好处是值得考虑的。另外,因为非背景像素的边界完全由在输入空间上的曲面映射确定,所以可非常准确地确定非背景像素的边界。
变形系统100的图像变换确定用于描述2D图像变换的完整的参数组。这些数据,在本发明的一个实施例中,由分辨率/视图缩放级170使用,以及接着由数据重排级180使用。在这些级之前,边界框生成器160考虑来自面片几何图形生成器130和曲面函数评估器140的潜在面片几何图形以及曲面系数,在输出端确定映射表示。
如图5和图6所示,分辨/视图缩放生成器170可用于改变分辨率和视图缩放输入/输出图像的效果,以及使用上述的图像参数。在使用变形系统100的图像变换的基于位置的表示时,通过简单地对系数进行比例缩放,能够容易地将空间变换调整到不同的分辨率。图5示出了分辨率变化操作设计的步骤,其中,输入和输出图像都是被比例缩放的。输入/输出坐标的独立比例缩放可表示为:
x→x′=r1x,y→y′=s1y
(5)
u→u′=r2u,v→v′=s2y
常量{r1、s1、r2、s2}给出比例缩放系数,质数表示比例缩放的坐标。通过比例缩放的坐标,曲面可表达如下:
比较标准形式:
比例缩放变换的新曲面系数是:
因此,为调整输入和输出分辨率的变化,要使用系数对所有的系统进行比例缩放。这是相对简单的操作,不需要滤波或插值。但是,应当意识到,面片几何(即,面片大小和面片原点的绝对位置)必须由变形系统100进行适当的比例缩放。
图6示出了由变形系统100在图像变换中生成视图缩放映射图所涉及的步骤。基本输入图像、基本输出图像以及比例缩放的基本输出图像示出了基本变形以及将要进行视图缩放的区域。首先比例缩放基本输出图像(也就是产生基于比例缩放的输出图像),接着提取/裁剪感兴趣的区域(该区域已经被比例缩放操作进行适当的视图缩放)来产生视图缩放变形。视图缩放映射对应于新输入图像和新输出图像之间的变换。视图缩放(zoom)操作与比例缩放(scale)到不同分辨率类似,不同之处在于能够对特定区域进行放大/缩小,这意味着具有移动图像能力(panning capability)。可以在输入图像空间上(变换之前)或者输出图像空间(变换之后)上定义视图缩放操作。在下面变形系统100的示范应用中,我们讨论在输出图像空间上进行视图缩放。视图缩放系数K大于1(对于K=2,我们具有2倍的视图缩放,等),其他情况的处理方式类似。
考虑称为基本映射(Base Map)的变换(图6),基本映射将分辨率为W
0xH
0的输入图像变形为分辨率为W
1×H
1的输出图像。在输出上的视图缩放操作意味着我们想要放大基本图像的输出空间的矩形区域。该区域由它的尺寸
以及它左上角的绝对位置(
)指定。新的视图缩放图中的输出图像的尺寸为
视图缩放操作可分解为2步骤。首先,使用系数K比例缩放基本输出图像,这实际上是与比例缩放到新输出分辨率KW
1×KH
1一样的操作。第二,在更大的精比例缩放的图像中,提取位于(
)的大小为
的视窗并作为新的输出图像进行显示。就这样,裁剪了经比例放大的图像,仅留下感兴趣的区域。视图缩放映射是将W
0×H
0的输入图像映射到的新的经比例缩放并裁剪的
输出图像的2D空间变换。新的输出空间上的坐标系统可标记为(x″,y″)。符号(u″,v″)用于新映射的输入坐标系统,所述输入坐标系统通常保持基本变形不变。要回想到,(输出空间中)每个面片的坐标是相对于每个面片的左上角的原点进行定义的。在后面的计算中,我们也需要使用到绝对坐标。下标A将表示绝对坐标,例如(x
A,y
A)。
在数学上,视图缩放中第一步骤是乘法操作,第二步骤是移位或加法操作。在基本空间和新输出空间中绝对位置是:
或
因为这些等式可替换成曲面表达式,所以我们需要将它们转换成相对位置。这是不太重要的,因为第二步骤引入了之前的简单分辨率变化操作没有看到的其他因素。移动比例放大后的图像的原点以及提取
大小的视窗,将导致很多像素/点位于输出图像外。当涉及到新的变形时,这些点不存在。类似地,部分面片或者完整的面片可能位于该图像视窗外。这意味着,对于视图缩放图,面片分割应该不同。应该仅仅保留位于
大小的视窗内的这些面片或部分面片。可通过观察面片角落的新(绝对)位置来找到那些应该包含的面片或部分面片。因为我们从矩形面片的规则网格开始,所以视窗是矩形的,也保证新的面片分割是规则矩形的。
基本映射中第n个面片的左上角(用指数1表示)和右下角(用指数2表示)被标记为(这些是绝对位置,虽然为了简洁而省略了下标A):
{(x1n,y1n),(x2n,y2n)} (14)
这些点被映射到新空间中的新角点:
x{(x1n″,y1n″),(x2n″,y2n″)} (15)
新的面片尺寸由以下式子给出:
新的面片宽度
新的面片高度
如果面片的新宽度或高度小于或等于0,那么,该面片被排除在新映射外。如果面片的宽度和高度都大于0,那么,该面片就包含在视图缩放变换中。所包括的面片的绝对位置(即,左上角)需要重新计算,因为面片可能是部分包括的。新位置由下面式子给出:
被保留的每个面片都具有新的面片几何图形(位置和大小),如下:
知道新的几何图形后,等式(12)和(13)可转换成新的输出空间的相对原点表示(省掉了面片索引):
最后,它们可替换成基本映射的曲面表达,即展开式(20):
将它们与标准形式比较,可发现能够以直接的方式提取新的曲面系数。这些系数以及面片几何图形,完整地定义了视图缩放变换。
数据重排级180用于专门的图像处理系统,其中,需要进一步重排表达数据。曲面多项式的评估以多种方式进行,其中的细节(例如,所使用的加法和乘法的数目及其顺序)取决于硬件或软件架构。例如,评估多项式的通用硬件方法是使用霍而耐(Horner)法(本发明使用具有通用符号的第三阶多项式):
ax3+bx2+cx+d=((ax+b)x+c)x+d (21)
可使用类似的技术来评估曲面。曲面可重写成:
该曲面可作为x的多项式处理,该x多项式的系数是y的多项式。使用Horner法来评估每个多项式(总共5个多项式)。对于每个水平扫猫线(行),(对于每个面片)y多项式仅仅需要评估一次。表达式(22)也可以用于垂直扫描线。在这种情况下,应该为每个面片的第一垂直扫描线评估和存储y的多项式。接着,这些y多项式可用于保留每个面片的垂直扫描线,因为y多项式独立于扫描线的x位置。这增加了处理速度,并将变换作为直接与x相关的1D位置多项式处理,与y具有隐式的相关性,如该1D位置多项式所表示,它们是y的多项式。替换地,可将曲面作为y的多项式处理,该y的多项式的系数是x的多项式。根据各种实现,其他的方法可能更适用于指明存储器访问/存储和算术单元。
评估多项式表达的另一种标准技术是使用前向差分。但是,前向差分评估会累积误差。前向差分的主要好处是降低硬件的复杂性(特别是减低乘法器和使用定点的可能性)。如果面片尺寸在扫描线方向是小的,且合理位数的数值精度是可用的,那么,累积误差可能较小。
图7示出了本发明的逻辑流程图700。步骤710中,所产生的网格数据集包括成对的坐标,这些坐标将每个输出像素映射到输入像素(逆映射)。步骤720中,根据潜在几何图形和变形的复杂度产生面片几何图形。步骤730中,通过曲面拟合来近似网格数据集描述,并产生曲面系数。
在这里,曲面数据以及面片数据已经生成。在步骤740分析这些数据,在步骤750将这些数据与步骤710中产生的网格数据集的精确坐标进行比较。如果通过面片几何图形和曲面拟合产生的近似像素的误差大于预定的容差水平,步骤752中,该信息用于再分步骤720的面片几何图形。继续这种循环直到误差落入容差水平为止。
一旦误差分析步骤得到满足,那么,在760中确定输出图像的有效区域,提取包含所述有效区域的边界框。这是为了限定对这些区域进行处理,以节省处理时间。
步骤770中,通过比例缩放曲面系数产生可能进行分辨率变化和视图缩放的映射,以统一执行这些操作和变形变换。步骤780中,重排这些变换,其方式使得通过减少乘法器的数量来提高硬件实现的效率。
与现有的图像变换方法相比,本发明的变形系统100提供一些显著的优点。首先,变形系统100使用扫描线处理、具有较小的存储器要求,具有基于简易多项式的表达,是实时图像变换系统的有效硬件实现。它以统一的方式表达任何变换。变换基于输出空间的曲面-面片描述(逆映射形式),提供一种封闭型的解决方案,可容易地使用这种解决方案来产生其他的效果。所有的变换都包括指定面片几何图形和曲面系数的参数。逐个描述可看成曲面-面片描述的极限情况,在这种极限情况中,曲面被拟合成四个像素。
变形系统100也提供空间变换的描述,所述空间变换随着复杂性而自然比例缩放。变换越复杂,需要的面片数越多。就是说,幅面尺寸(format)是不变的,描述性参数线性增加。特别地,不需要将其他特征引入到表达中。这种表达通常足够表现现实中感兴趣的复杂的变换。
变形系统100也产生不同的输入/输出分辨率的变换。因为描述是由封闭函数形式给出,不是由逐个像素形式给出,所以很多变形特征变成了参数的简单数学运算。可通过比例缩放曲面系数来轻松计算分辨率的变化。另外,变形系统100提供用于视图缩放和移动图像的有效机制。与分辨率的变化类似,视图缩放和移动图像意味着曲面系数的线性变换。不需要重新生成网格数据。一旦计算了“基本”映射,就能直接修改基本描述中的参数以实现标准比例缩放和移位变换。
与“理想”描述相比,变形系统100具有非常小的数值误差。误差主要依赖于面片网格的分辨率。通过增加面片的数量,可将误差降到任意小。对于广角滤波器而言,除了中心点之外,进一步减少误差对图像质量具有可忽略的影响。误差容差级通常由存储器的约束所限制。另外,如果基本函数变化,那么,通过选择适合的拟合基线,对于特定的变形,误差的影响是可忽略的。
变形系统100要求较小的用于描述空间变换的存储空间(即,数据文件大小),使得本方法对硬件实现是有吸引力的。对于实践中感兴趣的多数变换,可通过较小数量的面片获得子像素的准确结果。在这种情况下,数据文件大小主要包括少量的曲线系数,而不是大的逐个像素的位置表。
变形系统100对图像的不同部分应用独立的变换,以获得非常通用的映射。每个面片(及其数据)可做为独立的子映射被处理,这允许对图像的不同区域进行独立的变换。这种变换不需要使用单个连续的曲面进行全局定义。不同的映射可以组合或者“缝合”在一起以形成具有相同格式的单个映射。为了优化的结果,变形系统100结合完善建立的几何模型技术例如B样条和贝塞尔曲面拟合。根据需要,使用各种数字/数学混杂的技术来生成曲面系数。B样条和贝塞尔曲面自然地适用于本发明的框架。这些曲面提供了对各面片间连续的曲面的精确控制。也可以容易地从样条曲面的节点序列进行面片分割。在最小平方拟合技术中使用这些曲面,对于常用的简单变形,产生曲面描述的过程可以是自动化的。
变形系统100的一个特定实现允许非矩形的面片,这种特定实现通过使面片几何形状变得复杂,对拟合进行更多的控制。在本发明的这个实施例中,用参数边界曲线描述面片几何图形。参数表示可以是一种坐标,坐标的选择取决于边界曲线的方向。对于矩形面片,这些边界是简单的垂直线的和水平线。任何形状的面片,结合上述的其他特征,提供了高度的灵活性以产生大体上非常复杂的2D图像变形。
在另一种实现中,变形系统100使用矩形面片,但是它也考虑了限制边界面片的评估域的边界曲线,也就是作为图像和背景区域的边界的面片。在这种方式下,仅在位于由边界曲线确定的域内的面片或者部分面片上进行所有的计算。这有助于将拟合约束到明确定义的区域。
上述的方法可扩展到包括多程以支持图像曲面的分层。图像数据可包括按照图像亮度和色度数据进行重采样的深度信息。深度信息用于分层处理以确定每个像素的可见性或遮挡。曲面不需要是相同大小的,可以是重叠的或非重叠的。
正如本领域技术人员所意识到的,在不脱离本发明的情况下,可以对上述的结构进行各种变化和修改。本发明的范围由所附的权利要求定义。