有效插值的制作方法

文档序号:26142393发布日期:2021-08-03 14:27阅读:59来源:国知局
有效插值的制作方法
本申请是中国申请号为201510530856.4、申请日为2015年8月26日、优先权为gb1415144.3、优先权日为2014年8月27日、发明名称为“有效插值”的发明专利申请的分案申请。
背景技术
:存在在其中对数据点的阵列执行插值从而确定在阵列内的采样位置处的内插值可以是有用的许多情形。一般地,数据点的阵列可以是n维阵列,其中n≥1。例如,在图形处理系统中,纹素(texel)的二维(2d)阵列能够被存储以描述纹理,并且当要将纹理应用在图像的像素位置处时,像素位置可能不能精确地对应于纹理中的纹素的位置,所以期望得到在像素位置处(即,在采样位置处)的纹理的内插值。作为另一示例,像素的2d阵列可以表示图像,并且如果要缩放图像,则新的像素位置可能不能精确地对应于图像中的原始像素的位置,所以期望得到在新的像素位置处(即,在采样位置处)的内插值。图1示出了数据点102的2d阵列100的部分的示例。图1示出了阵列100的数据点102的4×4集合,并且作为示例,两个参数(u和v)描述能够对其执行插值的区域104内的采样位置106。能够以许多不同的方式来执行插值。分段线性插值是易于实施的1d插值方法的示例。线性插值的示例在图2a中被示出,在图2a中,能够确定在两个数据点a与b之间的采样位置处的内插值。在数据点a与b之间的直线202示出在数据点a与b之间的采样位置处的内插值。采样位置由参数u给出,其中0≤u≤1,使得在采样位置处的内插值iu由加权求和:iu=(1-u)a+ub给出。双线性插值是将线性插值的概念扩展到二维中的2d插值方法的示例。双线性插值的示例在图2b中被示出,在图2b中,能够确定在四个周围数据点2041、2042、2043和2044的方块内的采样位置208处的内插值。采样位置208由两个参数(u和v)给出。当面临多维插值时,一个方法是减少问题的维数,例如通过对每行执行分离的1d插值,并且然后在那些结果上执行1d插值。例如,能够使用参数u来在数据点2041与2042之间执行线性插值,以确定中间内插值2061。类似地,能够使用参数u来在数据点2043与2044之间执行线性插值,以确定中间内插值2062。然后,能够使用参数v来在中间内插值2061与2062之间执行线性插值,以确定在由(u,v)给出的采样位置处的内插值208。能够以与以上参考图2a描述的线性插值相同的方式来执行在该双线性插值方法中描述的三线性插值。减少多维滤波问题的维数的示例被描述在mitchell和netravali的1988年在siggraph中的论文“reconstructionfiltersincomputergraphics”中,该论文解释了图像重建发生在二维中并且涉及利用滤波器k(x,y)对样本的2d晶格的卷积。考虑了可分离的滤波器,其中利用点积k(x)k(y)对样本进行卷积。mitchell和netravali的论文描述了可分离的滤波器比不可分离的滤波器更为计算有效,这是因为能够在垂直上和水平上分离的通道中执行滤波操作。双线性插值能够以简单的方式(例如使用一些乘法和加法(mad)逻辑)被实施在硬件中。另外,双线性插值是不消耗大量功率的快速过程。因此,双线性插值通常可以是在具有特别有限的处理功率的计算机系统(例如诸如智能电话、平板计算机和膝上型计算机的移动设备)中实施的插值的合适选择。然而,线性插值和双线性插值可能不提供平滑的内插值。特别地,虽然线性和双线性插值方法将提供连续的内插值,但是内插值的一阶导数(和高阶导数)通常在数据点边界上不连续。高阶多项式插值,例如基于二次、三次、四次等的多项式插值和它们的多维变型方法提供比对应的线性和双线性插值方法更平滑的内插值。特别感兴趣的是三次插值,因为这是能够对控制点进行插值(即穿过控制点)并且其中内插值的一阶导数能够在数据点边界上连续的最简单的多项式。三次插值方法(包括诸如双三次插值方法的多维三次插值方法)将内插值与内插值在数据点边界上的一阶导数进行匹配。然而,三次插值方法比线性插值方法(包括诸如双线性插值方法的对应的多维线性插值方法)实施更为复杂。这样的一些原因是与线性插值相比,三次插值在阵列的每维中使用两倍多的数据点(并且因此双三次要求比双线性插值4倍之多的数据点),并且三次插值包括针对阵列内的采样位置计算三次多项式。因此,作为示例,可以在计算速度不是问题时,选择双三次插值而非双线性插值。本领域技术人员将意识到,存在许多类型的基于控制点的三次曲线,包括bezier、hermite和b样条,并且尽管每个能够通过取得控制/采样点的线性组合被彼此映射(例如,参见foley、vandam等人的“computergraphicsprinciplesandpractice”,第二版,第510至511页)并且在广义上是等价的,但是特别感兴趣的一个是catmull-rom样条。该样条具有这样的有用的性质,如果采样位置精确地位于数据点上(例如,如果u=0或u=1),则内插值等于数据点的值。另外,如下面所描述的,当邻近曲线共享三个样本点时,则曲线也是c1连续的,即,曲线的一阶导数是连续的。1d三次插值的示例在图3a中被示出,在图3a中,四个数据点(a到d)被用于确定在两个中心数据点b与c之间的采样位置处的内插值(iu)。线302示出内插值,并且能够看到线302穿过数据点b&c并且线302的梯度(即线302的一阶导数)在曲线边界处与邻近分段线段302ab和302cd连续。由针对区域的参数u给出了采样位置,其中0≤u≤1。如上面所描述的,能够根据将参数u和四个数据点(a到d)作为输入的三次多项式找到内插值iu。双三次插值是将三次插值的概念扩展到二维中的2d插值方法的示例。双三次插值的示例在图3b中被示出,在图3b中,能够使用数据点30411到30444的值来确定在数据点30422、30423、30432和30433的2x2方块内的采样位置308处的内插值。由两个参数(u和v)给出采样位置308。在该示例中,使用参数u来针对四行数据点中的每行(例如,针对行x的数据点304x1到304x4)单独地执行三次插值,以确定各自的中间内插值306x。通过这种方式,已经减少了插值计算的维数。然后,能够使用参数v来在四个中间内插值3061到3064上执行三次插值,以确定在由(u,v)给出的采样位置处的内插值308。能够以与以上参考图3a描述的三次插值相同的方式来执行在该双三次插值方法中描述的五个三次插值中的每个三次插值。技术实现要素:提供本
发明内容来以简化的形式介绍下面将在具体实施方式中进一步描述的概念的选择。本
发明内容不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用于限制要求保护的主题的范围。根据本公开的第一方面,提供了一种非线性插值单元,被配置为针对在数据点阵列内的采样位置周围的多个预定插值位置,使用对应的预定权重集合和多个数据点,来确定表示在周围的预定插值位置处执行非线性插值的结果的多个周围内插值。根据本公开的第二方面,提供了一种插值装置,包括根据本公开的第一方面所述的非线性插值单元;以及线性插值单元,被配置为对于所述多个周围内插值执行线性插值以确定在所述采样位置处的内插值。根据本公开的第三方面,提供了一种由插值装置实现的插值方法,包括:针对在数据点阵列内的采样位置周围的多个预定插值位置,由至少一个逻辑模块使用对应的预定权重集合和所述数据点中的多个数据点,来确定表示在周围的预定插值位置处执行非线性插值的结果的多个周围内插值。根据本公开的第四方面,提供了一种非瞬态计算机可读存储介质,其上存储有非线性插值单元的计算机可读描述,所述计算机可读描述在被处理时配置系统,以用于生成所述非线性插值单元,其中所述非线性插值单元被配置为针对在数据点阵列内的采样位置周围的多个预定插值位置,使用对应的预定权重集合和所述数据点中的多个数据点,来确定表示在周围的预定插值位置处执行非线性插值的结果的多个周围内插值。如对于本领域技术人员将显而易见的是,以上特征可以在适当的情况下被组合,并且可以与本文所描述的示例的方面中的任何一个方面进行组合。附图说明现在将参考附图详细描述示例,其中在附图中:图1示出阵列的4x4数据点集合和阵列内的采样位置;图2a表示线性插值的示例;图2b表示双线性插值的示例;图3a表示三次插值的示例;图3b表示双三次插值的示例;图4a示出用于根据本文所描述的示例的三次插值方法的预定插值位置集合;图4b示出用于根据本文中描述的示例的双三次插值方法的预定插值位置集合;图5是插值逻辑的示意图;图6是确定在数据点阵列内的采样位置处的内插值的方法的流程图;图7是双三次插值单元的示意图;图8是行计算单元的示意图;图9是列计算单元的示意图;以及图10是在其中实施插值逻辑的计算机系统的示意图。附图图示了各种实施例。本领域技术人员将认识到,在附图中图示的元件边界(例如,框、框组、或其他形状)表示边界的一个示例。在一些示例中,一个元件可以被设计为多个元件或多个元件可以被设计为一个元件。在合适的情况下,贯穿附图使用共同的参考标记来指示相似的特征。具体实施方式现在将仅通过举例的方式来描述实施例。在本文中的示例中,描述了插值逻辑,所述插值逻辑提供与由全三次(或双三次)插值提供的内插值非常相似的内插值,但是所述插值逻辑实施起来较不复杂,例如使用更少的处理资源和/或运行起来更快。这允许提供与三次(或双三次)插值相似的结果的插值被执行在甚至具有有限处理资源的计算机系统(诸如移动设备,例如智能电话、平板计算机或膝上型计算机)上,其通常将不能够执行全三次(双三次)插值。该技术可以被用于除了三次插值函数之外的插值函数,例如被用于非多项式插值,例如mitchell-netravali插值或任意平滑插值。具体地,针对数据点的阵列内的预定插值位置集合,预定权重集合表示能够被应用到阵列内的数据点中的多个数据点的三次插值。即,权重集合被预先确定,所述权重集合能够被用于例如执行在数据点中的一些数据点的加权求和,以确定在阵列中的特定插值位置处的内插值。当期望得到在采样位置处的内插值时,可以确定围绕采样位置的多个预定插值位置处的内插值,并且那些周围内插值能够然后被传递到线性插值单元。对周围内插值的线性插值提供在所述采样位置处的内插值,其近似等于将由全三次插值提供的内插值。确定在所述采样位置周围的预定插值位置处的周围内插值并且然后对于周围内插值执行线性插值的原理能够以不同的方式被实施在不同的示例中,下面描述其中的一些。如果期望在其处得到内插值的采样位置落在预定插值位置中的一个预定插值位置上,则在一些示例中,针对该插值位置的预定权重能够被用于确定内插值;然而,在其他示例中,四个内插值仍然被传递到线性插值单元,以用于确定在采样位置处的内插值,这是因为将四个内插值传递到线性插值单元的代价可以比将该情形作为特殊情况处置的代价更低。逼近1d三次插值的示例在图4a中被示出,其中,四个数据点(a到d)被用于确定在由参数u给出的、在两个中心数据点b与c之间的采样位置处的内插值。线402示出对四个数据点的全三次插值的结果。在该示例中,三次插值是catmull-rom样条,但是在其他示例中,能够使用其他三次插值方法,例如bezier曲线或均匀b样条。能够看到(对于catmull-rom样条)线402通过数据点c&b并且线402的梯度(即,线402的一阶导数)与相邻分段线段402ab和402cd在曲线边界处连续。插值位置集合(4030到4038)在图4a中被示出。插值位置403将数据点b与c之间的区域划分成八段。在其他示例中,可以存在将阵列的相邻数据点之间的区域划分成n段的不同数量的插值位置,其中,n≥2。在插值位置403中的每个插值位置处,存储了预定权重集合,所述预定权重集合能够被应用到数据点a、b、c和d,以用于执行加权求和,以由此确定表示在插值位置处执行三次插值的结果的内插值。对于catmull-rom样条,能够容易看到,对于插值位置4030,针对数据点a、c和d的权重将为零并且针对数据点b的权重将为一,以使得如果采样位置精确地落在数据点b上,则返回数据点b的值(但是应当注意,这可能并不适用其他插值(三次或其他)函数的情形)。类似地,能够容易看到,对于插值位置4038,针对数据点a、b和d的权重将为零并且针对数据点c的权重将为一,以使得如果采样位置精确地落在数据点c上,则返回数据点c的值。针对其他预定插值位置(4031到4037)的权重是更重要的并且将取决于被表示的特定插值(例如,catmull-rom插值或诸如均匀b样条的一些其他插值)。针对其他预定插值位置(4031到4037)的权重的示例在下面关于catmull-rom样条描述的示例中被给出,但是如对于本领域技术人员将显而易见的是,对于其他插值方案(例如,均匀b样条),可以使用不同的权重。由参数u给出的采样位置在图4a中被示出,其与预定插值位置403中的任何一个插值位置不同。在这种情况下,确定围绕采样位置的预定插值位置中的两个预定插值位置4033和4034处的内插值。周围插值位置4033和4034是预定插值位置403中最接近采样位置的两个预定插值位置。在插值位置4033和4034处的周围内插值被传递到线性插值单元,所述线性插值单元然后使用周围内插值(例如,使用在图2a中所图示的线性插值原理)来执行线性插值,以确定在采样位置u处的内插值。预定权重用于通过执行对数据点a、b、c和d的加权求和来确定在预定插值位置403处的内插值。这不涉及任何三次多项式计算,并且允许以非常简单的方式来确定在预定插值位置处的内插值,例如仅仅涉及在硬件中非常简单且快速实施的mad(乘法和加法)运算。增加预定插值位置的数量将增大最终内插值的准确度,但是将要求存储更大数量的权重和限定采样位置的更多数量的位,以由此标识预定插值位置中的哪些预定插值位置最接近采样位置。如图4a所示出的,使用九个预定插值位置403(即,因此数据点b与c之间的区域被划分成八段)似乎提供内插值的准确度与针对预定权重存储的数据量和用于限定采样位置的参数u的位数之间的良好权衡。然而,在其他示例中,可以使用不同数量的预定插值位置。随着分段线性插值中的细分的数量的增大,分段线性插值的误差快速减小。图4a示出1d示例,其中插值被执行在1维数据点阵列上,并且其中存在两个周围插值位置(4033和4034)。更一般地,所述原理可以被扩展到其中插值被执行在n维数据点阵列上(其中n≥1)的示例,并且在那种情况下,周围插值位置是预定插值位置中最接近采样位置中的2n个预定插值位置。例如,图4b示出其中插值被执行在的2d数据点阵列上的示例。在该示例中,要确定在数据点40411到40444的4x4方块内的采样位置408处的内插值。在其他示例中,不同布置的数据点(即,非4x4)可以被用于确定在采样位置处的内插值。采样位置408由两个参数(u和v)给出,这两个参数(u和v)限定在数据点40422、40423、40432和40433之间的中心区域中的采样位置408中的位置。在该示例中,确定围绕采样位置408的四个预定插值位置40411、40412、40421和40422处的内插值。为了达到这个目的,分别针对数据点的四行中的每行(例如,针对行x的数据点404x1到404x4),以与以上参考图4a所描述的相似的方式来确定在(由参数u给出的并且在图4b中针对第一行由参考标记4061示出的)采样位置的行分量的任何一侧的预定插值位置中的两个预定插值位置处的内插值。以这种方式,针对每行,确定第一中间内插值410并且确定第二中间内插值412。在图4b中示出的示例中,第一中间内插值410在采样位置406的u分量的左边,并且第二中间内插值412在采样位置406的u分量的右边。针对一行的第一中间内插值和第二中间内插值是针对该行的预定内插值中最接近采样位置406的两个预定内插值。然后,使用来自四行(4101、4102、4103和4104)的第一中间内插值并且实施以上参考图4a所描述的类似方法,以确定在(由参数v给出的并且在图4b中由参考标记4161示出的)采样位置的列分量的任何一侧的预定插值位置41411和41421处的两个周围内插值。类似地,使用来自四行(4121、4122、4123和4124)的第二中间内插值并且实施以上参考图4a所描述的类似方法,以确定在(由参数v给出的并且在图4b中由参考标记4162示出的)采样位置的列分量的任何一侧的预定插值位置41412和41422处的两个周围内插值。因此,与以上参考图4a所描述的用于生成在相邻预定位置处的内插值对的类似1d方法被执行六次,以便确定在周围插值位置41411、41412、41421和41422处的四个周围内插值。在周围插值位置41411、41412、41421和41422处的周围内插值被传递到双线性插值单元,所述双线性插值单元之后使用周围内插值(例如使用在图2b中图示的双线性插值原理)来执行双线性插值,以确定在采样位置408处的内插值。以这种方式,由六个加权求和(其中在给定预定权重的情况下,易于实施在硬件的mad逻辑中)与双线性插值(其也易于实施在硬件中的mad逻辑中)来逼近双三次插值。应当注意,双线性插值单元有可能出于其他目的而被包含在图形处理单元(gpu)中,因此双线性插值单元通常不需要单独出于实施根据本文中描述的示例的双三次插值而被添加。因此,实施根据本文中描述的示例的双三次插值的硬件代价很低。另外,应当注意,双线性插值被执行在比对周围内插值的确定更多的任意位置处,使用预定权重在预定周围插值位置41411、41412、41421和41422处确定所述周围内插值。图5示出根据本文中描述的示例的被配置为确定2d数据点阵列内的采样位置处的内插值的插值逻辑502的示例。插值逻辑502包括双三次插值单元504和双线性插值单元506。在优选示例中,双三次插值单元504和双线性插值单元506被实施在专用硬件中,如下面更详细描述的,但是在其他示例中,这些单元504和506能够被实施在由例如运行在处理单元(例如中央处理单元(cpu)或图形处理单元(gpu))的软件配置的通用硬件中。双三次插值单元504被布置为接收数据点阵列和参数(u和v),所述参数(u和v)限定要在其处确定内插值的阵列内的采样位置。双三次插值单元504被配置为使用预定权重和数据点来确定围绕采样位置的特定预定插值位置处的多个内插值,并且向双线性插值单元506提供那些周围内插值。双三次插值单元504也向双线性插值单元506发送双线性u和v参数,以描述周围内插值内的采样位置的位置。双线性插值单元506被配置为使用双线性u和v参数来对周围内插值执行双线性插值,以确定在采样位置处的内插值。通常计算系统将出于除了根据本文中描述的方法的逼近三次插值的目的而包括双线性插值单元。本文中描述的方法使用用于逼近三次插值的双线性插值单元,因此与实施单独的全双三次插值单元相比,将计算系统的能力从能够执行双线性插值到也能够逼近双三次插值所需要的额外硬件是非常小的。参考图6中示出的流程图来描述确定在(例如,在图4b中示出的)2d阵列中的采样位置处(例如,在位置408处)的内插值的方法的更多细节。在步骤s602,在插值逻辑502处接收阵列数据点404和参数u和v。参考图4b,u和v参数描述在四个数据点40422、40423、40432和40433之间的区域内的采样位置408的位置。插值逻辑502操作以确定针对采样位置408的内插值,如下面所描述的。图7示出了双三次插值单元504的更详细视图。双三次插值单元504包括行计算单元702(其可以被称为“a计算单元”)、两个列计算单元7041和7042(其可以被称为“b计算单元”)、u重映射单元706、v重映射单元708一己行号单元710。u重映射单元706被布置为接收u参数并且将u参数的重映射版本提供给行计算单元702,如下面更详细描述的。行计算单元702也被布置为接收四个数据点(a、b、c以及d)的行。行计算单元702被布置为将两个中间内插值410和412提供给相应的列计算单元7041和7042。v重映射单元708被布置为接收v参数并且将v参数的重映射版本提供给列计算单元704中的两个列计算单元,如下面更详细描述的。行号单元710被布置为将当前行号的指示提供给列计算单元704中的两个列计算单元,如下面更详细描述的。列计算单元输出来自双三次计算单元504的周围内插值41411、41412、41421和41422,其能够被提供给双线性计算单元506。在步骤s604,针对数据点(a到d)中的每行,例如针对图4b中示出的第一行的数据点40411、40412、40413和40414,行计算单元702确定由从u重映射单元706提供的重映射的u参数给出的采样位置的行分量周围的第一中间内插值410和第二中间内插值412。图8示出行计算单元702的更详细视图。行计算单元702包括拆分单元802、第一多路转换器804、p混合单元806、q混合单元808以及第二多路转换器810。u重映射单元706基于u参数的位将多个位提供给拆分单元802。例如,描述采样位置的行分量的u参数可以包括k个位,{u0,u1…uk-1},其中,作为示例,k可以为十一。用于u参数的位数确定能够限定采样位置的分辨率。u重映射单元706接收k个位的u参数并且将u参数拆分成在行计算单元702中使用的前m个位和从u重映射单元706被提供以指示双线性u参数的剩余(k-m)个位。双线性插值单元506使用双线性u参数来执行对从双三次插值单元504输出的四个周围内插值的双线性插值。作为示例,m可以为三,并且u参数的剩余三个位标识采样位置位于两个数据点b与c之间的整个区域中的哪个八分之一区域。在图4a中示出的示例中,采样位置的行分量在位置4033与4034之间,因此限定采样位置的前三位将为011。u重映射单元706确定控制行计算单元702的运算的四个控制信号:“rev”、“pselect”、“qselect”和“pqswap”,并且这四个控制信号被传递到拆分单元802。拆分单元802将“rev”信号传递到多路转换器804,将“pselect”信号传递到p混合单元806,将“qselect”信号传递到q混合单元808,并且将“pqswap”信号传递到多路转换器810。如下面更详细描述的,大部分插值函数是对称的,以使得在控制信号abcd被交换为dcba时,结果曲线被反映在u=0.5附近。另外,应当注意,对于任何给定的采样位置u,在一维中的周围预定采样位置将为一个偶数和一个奇数的相邻采样位置,因此偶数采样位置和奇数采样位置能够被分成两个不同集合并且在例如p混合单元806和q混合单元808中被分别对待。在其中m=3的示例中,rev、qselect和pqswap信号每个信号具有一个位并且pselect具有两个位。在该示例中,u重映射单元706将“rev”信号设定为等于u参数的第一个位,u0。u重映射单元706将“pqswap”信号设定为等于u参数的第三个位,u2。如果u参数的前m个位为000或111时(即,如果采样位置的行分量在数据点b与c之间的区域的八段中的第一个段或最后一个段中时),则u重映射单元706将pselect设定为00并且将qselect设定为0;如果u参数的前m个位为001或110时(即,如果采样位置的行分量在数据点b与c之间的区域的八段中的第二个段或第七个段中时),则u重映射单元706将pselect设定为10并且将qselect设定为0;如果u参数的前m个位为010或101时(即,如果采样位置的行分量在数据点b与c之间的区域的八段中的第三个段或第六个段中时),则u重映射单元706将pselect设定为10并且将qselect设定为1;并且如果u参数的前m个位为011或100时(即,如果采样位置的行分量在数据点b与c之间的区域的八段中的第四个段或第五个中段时),则u重映射单元706将pselect设定为11并且将qselect设定为1。rev信号(其等于u参数的第一个位)标识采样位置的行分量是处于两个数据点b与c之间的区域的第一半(当u0=0时)内还是处于两个数据点b与c之间的区域的第二半(当u0=1时)内。例如由图4a中的线402表示的插值是对称函数。因此,如果采样位置处于b与c之间的区域的第二半中(即,如果采样位置更靠近数据点c而非数据点b),则输入a、b、c和d可以由多路转换器804反转。如果输入要被交换,则输入a和d被交换并且输入b和c被交换。从如图8中所示出的a’、b’、c’和d’的多路转换器输出潜在能反转的数据点。这减少可能需要在其处确定内插值的不同位置的数量,由此简化p混合单元806和q混合单元808的硬件。p混合单元806和q混合单元808二者都接收从多路转换器804输出的数据点(a’、b’、c’和d’)中的全部四个数据点,并且执行对数据点的加权求和,以由此确定在采样位置(例如4061)的行分量的任何一侧的中间内插值(例如,图4b中示出的4101和4121)。p混合单元806被配置为确定在插值位置403的偶数位置处的内插值。例如,p混合单元806被配置为根据从拆分单元802接收的pselect信号来确定在插值位置4030、4032或4034中的一个插值位置处的内插值。在以上描述的示例中,u参数的前三个位为011,因此pselect=11并且p混合单元806确定在插值位置4121处的内插值,插值位置4121在数据点b与c之间的一半路程点(对应于图4a中示出的位置4034)处。如果pselect=10(当u参数的前m个位为001或010时发生这种情况),则偶数插值位置中最接近的插值位置将是位置4032,位置4032是从数据点b到数据点c的路程的1/4。如果pselect=00(当u参数的前m个位为000时发生这种情况),则偶数插值位置中最接近的位置将是位置4030,位置4030取数据点b的值。类似地,q混合单元808被配置为确定在插值位置403的奇数位置处的内插值。例如,q混合单元808被配置为根据从拆分单元802接收的qselect信号来确定在插值位置4031、4033中的一个插值位置处的内插值。在以上描述的示例中,u参数的前三个位为011,因此qselect=1,并且q混合单元808确定在插值位置4101处的内插值,插值位置4101处于从数据点b到c的路程的3/8(对应于图4a中示出的位置4033)处。如果qselect=0(当u参数的前m个位为000或001时发生这种情况)则奇数插值位置中最接近的插值位置将是位置4031,位置4031处于从数据点b到数据点c的路程的1/8。为了实施点b与c之间的全三次插值,将要求执行许多三次运算。然而,在本文中描述的示例中,仅仅确定在预定插值位置处的内插值。例如,能够通过执行根据以下公式的加权求和,来确定在插值位置403中的每个插值位置处的内插值:wa(u)a′+wb(u)b′+wc(u)c′+wd(u)d′(1)其中,a’、b’、c’和d’是行的四个数据点,并且wa、wb、wc和wd是它们对应的权重,所述权重是参数u的函数,其中,所述权重的值针对对应于预定插值位置的参数u的值而被预先确定。下面的表1示出了能够被应用以精确地表示在图4a中示出的九个插值位置4030到4038处的catmull-rom插值的权重的值。uwawbwcwd001001/8-49/1024987/102493/1024-7/10242/8-9/128111/12829/128-3/1283/8-7/1024745/1024399/1024-45/10244/8-1/169/169/16-1/165/8-45/1024399/1024745/1024-7/10246/8-3/12829/128111/128-9/1287/8-7/102493/1024987/1024-49/10248/80010表1-用于表示catmull-rom插值的权重尽管在表1中给出的权重能够被用于p混合单元806和q混合单元808,但是在优选实施例中,权重被设定以使得它们不是catmull-rom插值的完美表示,以便简化p混合单元806和q混合单元808的硬件。执行乘以预定常数的运算一般比任意乘法运算更便宜,并且在仔细分析常数的情况下,乘法器单元能够组合常数并且提供比通用乘法器单元(在实施乘法器单元需要的硬件的量方面和在执行乘法运算的速度方面)更便宜的单元。例如,根据在表1中给出的权重来稍微调整权重,以使得由公式1给出的加权求和更易于在硬件中(例如使用乘法和加法(mad)逻辑)实施。例如,表2示出能够代替在表1中给出的权重而使用的简化权重。在表1与表2中示出的权重之间的差别很小并且不太可能导致对最终内插值的任何感知扭曲(perceptualdistortion),但是将显著简化用于执行加权求和的硬件,从而允许插值更快地执行且具有较少的功率消耗。uwawbwcwd001001/8-12/256247/25623/256-2/2562/8-2/3228/327/32-1/323/8-18/256186/256100/256-12/2564/8-2/3218/3218/32-2/325/8-12/256100/256186/256-18/2566/8-1/327/3228/32-2/327/8-2/25623/256247/256-12/2568/80010表2-用于表示catmull-rom插值的简化权重能够看出,偶数的评价位置现在全部使用相同的分母(32,其能够被实施为对五个二进制数位的二进制移位),如对于奇数位置进行的(256,其能够被实施为对八个二进制位的二进制移位),这有益于硬件代价减少。另外,能够看出,针对预定插值位置中的每个预定插值位置,预定权重wa、wb、wc和的和是一,以使得加权求和的结果适当地归一化。也能够看出,预定权重是对称的,以使得wa(u)≡wd(1-u)和wb(u)≡wc(1-u)。该对称性允许多路转换器804被用作如以上所描述的在适当情况下交换数据点的顺序,以由此减少被被包括在p混合单元806和q混合单元808中的硬件的量。p混合单元806和q混合单元808针对当前行的输出是在采样位置的行分量的任何一侧的中间内插值410和412,例如针对第一行在图4b中示出的位置4061的任何一侧的插值位置4101和4121的中间内插值。多路转换器810任选地根据pqswap信号(其等于u参数的第三个位,u2)来反转中间值410和412的顺序。以这种方式,中间内插值410在采样位置406的行分量的左边,并且中间内插值412在采样位置406的行分量的右边。在其中初始数据阵列值是无符号的k位值的示例中,将认识到,负权重将要求符号位被包含在任何中间计算中。另外,因为个别权重能够大于1.0,所以可能需要一个或多个附加位来处理动态范围。作为对以上描述的方法的优化,p混合单元806和q混合单元808可以将偏移量添加到加权求和,以便确保第一中间内插值410和第二中间内插值412不是负的,而又适合在被包含用于允许增加的动态范围的增加的数量的位内。在从双三次插值单元504输出周围内插值414之前,在列计算单元7041和7042中移除该偏移量能够。对偏移量的添加意味着中间内插值410和412能够以无符号格式(而不是有符号格式)被表示,这减少了用于通过一个位表示的中间内插值410和412中的每个中间内插值的位数。减少用于表示中间内插值410和412中的位数意味着减少在行计算单元702与列计算单元7041和7042之间传递的数据量。由于初始数据值可以是多通道的,例如具有若干颜色通道的图像数据,对多个通道上的符号位的消除和mad单元能够成为重大成本节约。能够利用以下伪代码来总结由p混合单元806执行的计算的假设8位输入的示例:b乘以28或18可以被实施为b*16+[b*8+b*4]或[b*2]。以这种方式实施乘法在硬件中是便宜的,这是因为乘以2的幂能够被实施为微不足道实施在硬件中的二进制移位,使得该计算使用至多三次加法和一些微不足道的常数移位。类似的因子分解可以用于该计算并且用于其他计算,例如c乘以7或18可以被实施为c*8+[-c]或[c*8+c*2]。应当注意,在一些示例中,不是计算中间值(例如btemp、ctemp和dtemp)并且之后在单独的步骤中将它们加在一起以找到如由以上代码暗示的结果,中间值可能不能被明确地计算,而是相反结果可以通过添加合适值来直接找到。例如,对于u=2/8,参考以上给出的表2,结果能够被找到为:result=(b*16+b*8+b*2+c*8–c–2*a–d+offset+roundingvalue)>>5,使得btemp、ctemp和dtemp的值不被明确地确定。能够利用以下伪代码来总结通过q混合单元808来执行的计算的示例:如以上所描述的,因式分解可以被用于计算a、b、c和d,例如a乘以12或18可以被实施为a*16+[-4*a]或[a*2]。与如以上所描述的类似,在一些示例中,atemp、btemp、ctemp和dtemp的值可能不能被明确地确定,而是相反结果的值可以直接通过添加合适值而被确定。第一中间内插值410被提供给第一列计算单元7041并且第二中间内插值412被提供给第二列计算单元7042。一行数据由行计算单元702在多个时钟周期中的每个时钟周期上处理,使得列计算单元704每个在时钟周期中的每个时钟周期上接收中间内插值(410或412)。在步骤s6061,第一列计算单元7041将从行计算单元702在每个时钟周期上接收的第一中间内插值410乘以根据当前行号的权重并且对结果进行累加。类似地,在步骤s6062,第二列计算单元7042将从行计算单元702在每个时钟周期上接收的第二中间内插值412乘以根据当前行号的权重并且对结果进行累加。在四个时钟周期之后,列计算单元704各自已经接收到四个中间内插值并且各自已经确定在由v参数指示的采样位置(408)的列分量(416)的任何一侧的两个内插值(414)。图9示出了列计算单元704中的一个的更详细视图。两个列计算单元704中以对应的方式进行操作,如参考图9所描述的。如图9中示出的,列计算单元704包括拆分单元902、p权重查找表(lut)904、q权重lut906、p混合乘法和加法(mad)单元908、q混合mad单元910、p累加器912、q累加器914、两个截断和箝位单元916和918以及多路转换器920。v重映射单元708基于v参数的位来将多个位提供给拆分单元902。例如,描述采样位置的列分量的v参数可以包括k个位,{v0,v1…vk-1},其中作为示例,k可以为十一。用于v参数的位数确定能够限定采样位置的分辨率。v重映射单元708接收v参数的k个位并且将v参数拆分成在列计算单元704中使用的前m个位和从v重映射单元708被提供以指示双线性v参数的剩余(k-m)个位。双线性插值单元506使用双线性v参数来对从双三次插值单元504输出的四个周围内插值执行双线性插值。作为示例,m可以为三,并且v参数的那三个位标识采样位置位于四行数据点中的中间两行上的两个数据点之间的整个区域中的哪个八分之一区域。以与以上描述的u重映射单元706相似的方式,v重映射单元708确定控制列计算单元702的运算的四个控制信号:“rev”、“pselect”、“qselect”和“pqswap”,并且这四个控制信号被传递到拆分单元902。因此,在其中m=3的示例中,rev、qselect和pqswap信号每个具有一个位并且pselect信号具有两个位。拆分单元902将pselect和rev信号传递到p混合mad单元908,将qselect和rev信号传递到q混合mad单元910并且将pqswap信号传递到多路转换器920。在每个时钟周期上,在列计算单元704处接收中间内插值(410或412)并将其传递到p混合mad单元908和q混合mad单元910二者。行计算单元708提供对应于在当前时钟周期中接收到的中间内插值的当前行的指示。当前行的指示被传递到p权重lut904、q权重lut906、p混合mad单元908以及q混合mad单元910。p权重lut904确定要由p混合mad单元908在当前周期上根据pselect和rev信号并且根据当前行号应用到中间内插值的权重。以与用于数据点的行相同的方式(例如使用以上表2中示出的权重的根据catmull-rom插值)确定权重,其中,在第一行上的中间内插值(4101或4121)对应于数据点a;在第二行上的中间内插值(4102或4122)对应于数据点b;在第三行上的中间内插值(4103或4123)对应于数据点c;并且在第四行上的中间内插值(4104或4124)对应于数据点d。利用以下伪代码来示出如何由p权重lut904确定权重的示例:类似地,q权重lut906定要由q混合mad单元910在当前周期上根据qselect和rev信号并且根据当前行号应用到中间内插值的权重。利用以下伪代码来示出如何由q权重lut906确定权重的示例:p混合mad单元908接收针对当前行的中间内插值(410或412)、来自p权重lut904的权重、当前存储在p累加器912中的值和来自行号单元708的当前行号的指示。p混合mad单元908将针对当前行的中间内插值(410或412)乘以来自p权重lut904的权重,并且将该加权值添加到p累加器912中的当前值。结果被写回到p累加器912。如果当前行是正在其上执行插值的行的集合中的第一行,则p累加器912不存储来自先前行的相关结果,因此在结果被写出到p累加器912之前,p累加器912的当前值不被添加到将针对当前行的中间内插值(410或412)乘以来自p权重lut904的权重的结果。在优选实施例中,执行特定四舍五入以给出具有中间小数位的最小数量的期望结果。也就是说,每个乘法运算被四舍五入为2个小数位的精度并且代替添加0.5(相对于最低有效存储位),添加0.25,并且另外关于最终乘法-加法运算,相对于在截断和箝位单元916中执行的阶段,添加0.5。利用以下伪代码来示出p混合mad单元908的运算的示例:由于输入值的有限范围,“tempresult”值被限制在[-2272,10448]的范围中,并且因此不适合s15值,使得累加的结果(accresult)适合s12值。类似地,q混合mad单元910具有相同的基本结构但是具有稍微更宽的中间值。因此,q混合mad单元910接收针对当前行的中间内插值(410或412)、来自q权重lut906的权重、当前存储在q累加器914中的值和来自行号单元708的当前行号的指示。q混合mad单元910将针对当前行的中间内插值(410或412)乘以来自q权重lut906的权重,并且将该加权值添加到q累加器914中的当前值。结果被写回到q累加器914。如果当前行是正在其上执行插值的行的集合中的第一行,则q累加器914不存储来自先前行的相关结果,因此在结果被写出到q累加器914之前,q累加器914的当前值不被添加到将针对当前行的中间内插值(410或412)乘以来自q权重lut906的权重的结果。如以上所描述的,在优选实施例中,执行特定四舍五入以给出关于中间小数位的最小数量的期望结果。利用以下伪代码来示出q混合mad单元910的运算的示例:由于输入值的有限范围,“tempresult”值被限制在[-17540,82948]的范围中,并且因此不适合s18值,使得累加的结果(accresult)适合s12值。以上描述的示例中的p累加器单元和q累加器单元(912和914)是分别存储从p混合mad单元908和q混合mad单元910输出的s12结果的12位寄存器。在步骤s608中,当四行值已经被累加在p累加器和q累加器(912和914)中时,则p累加器和q累加器中的值表示在由v参数指示的采样位置416的列分量的任何一侧的两个周围内插值,并且这些累加值是从列计算单元704输出的。这两个周围内插值被确定在多个预定插值位置中最接近的两个预定插值位置处。然而,在示例中,在从列计算单元704输出累加值之前,截断和箝位单元916和918截断并箝位来自各自的累加器912和914的十二位有符号累加值,以由此将累加值转变成八位无符号值。这样做以将内插值限制到原始范围,并且在一些示例中,这可能不是必需的。例如,可以通过以下伪代码来总结截断和箝位单元916和918中的每个单元的运算:来自列计算单元704中的一个列计算单元的截断和箝位单元916和918的输出是针对一列在采样位置的列分量的任何一侧的周围内插值414。例如,在第一列计算单元7041中,截断和箝位单元916和918的输出表示在位置4161的任何一侧的周围内插值41411和41421(如在图4b中示出的)。类似地,作为示例,在第二列计算单元7042中,截断和箝位单元916和918的输出表示在位置4162的任何一侧的周围内插值41412和41422(如在图4b中示出的)。在列计算单元704中的每个中,多路转换器920任选地根据pqswap信号(其等于v参数的第三位,v2)来反转周围内插值414的顺序。以这种方式,第一周围内插值4141在采样位置416的列分量的之上并且第二周围内插值4142在采样位置416的列分量的之下。例如,可以由以下伪代码给出多路转换器920的运算:四个周围内插值41411、41412、41421和41422从双三次插值单元504输出并且被传递到双线性插值单元506。另外,双线性u参数和双线性v参数从双三次插值单元504被传递到双线性插值单元506。在步骤s610中,双线性插值单元504使用指示周围内插值之间的采样位置408的u和v参数,来执行在周围内插值41411、41412、41421和41422上的双线性插值。以这种方式来确定内插值。从插值逻辑502输出内插值,并且内插值表示插值的结果。能够认识到,在周围内插值41411、41412、41421和41422上的双线性插值将提供比如果在数据点41422、41423、41432和41433上执行双线性插值更接近全三次插值的插值。在这个意义上,插值逻辑502提供比如果仅使用双线性插值单元更平滑的内插值。然而,插值逻辑502比全三次插值单元更易于在硬件中实施,这是因为插值逻辑502执行加权求和,而不是相对复杂的三次多项式计算。在以上描述的示例中,周围内插值414是预定插值位置中最接近采样位置408的。在其他示例中,将能够(尽管不太可能是优选的)选择不是预定插值位置中最接近采样位置的周围内插值。在这些其他示例中,最终内插值有可能还是来自执行全三次插值的结果。以上描述的示例包括双三次插值单元504和双线性插值单元506。在其他示例中,插值单元504可以是除了线性插值单元之外的任何类型的插值单元,即,“非线性”插值单元。也就是说,总体上,插值单元504是被配置为执行某种非线性插值的非线性插值单元。术语“非线性插值”在本文中用于指代除了线性插值之外的插值,即非线性的任何插值,并且可以例如为多项式插值、三次插值或高阶插值、mitchell-netravali插值或其他非多项式插值、或任何其他合适的插值。插值逻辑502用于在不要求执行全非线性插值计算的情况下逼近非线性插值。在图4a和4b中示出的示例中,在一维中的两个相邻数据点之间存在八个预定插值位置。在其他示例中,在一维中的两个相邻数据点之间可以存在不同数量(例如2、4、10或16)的预定插值位置。如以上在示例中所描述的,预定插值位置优选在相邻数据点之间有规则地隔开,但是在一些示例中,预定插值位置将能够在相邻数据点之间无规则地隔开。如图5中示出的和以上所描述的,插值逻辑502包括非线性插值单元(例如双三次插值单元504)和线性插值单元(例如双线性插值单元506)。非线性插值单元和线性插值单元能够被实施在相同插值模块中或它们能够被实施在计算机系统内的分离的模块中,其中在非线性插值单元与线性插值单元之间的通信可以经由允许数据在计算机系统内的不同模块之间被传递的接口。在以上描述的示例中,在多个时钟周期的每个时钟周期上处理4x4数据点集合的四行中的一行。然而,在其他示例中,可以并行执行处理中的一些处理。例如,可以并行处理4x4数据点集合的四行中的多于一行。增加处理的并行化能够增加系统的性能(例如速度)。以上参考图5至9描述的方法涉及在数据点的2d阵列内的插值。对应的原理能够被应用到在n维阵列内的插值,其中n≥1。例如,对于在数据点的3d阵列内的插值,插值逻辑可以包括:(i)三元三次插值单元,其被配置为确定在最接近采样位置的八个预定插值位置处的八个周围内插值;以及(ii)三线性插值单元,其被配置为对于八个周围内插值执行三线性插值以确定内插值。在以上描述的示例中,首先在行中并且之后在列中处理数据阵列。对于本领域技术人员将显而易见的是,相同的技术可以被应用以首先在列中并且然后在行中处理数据阵列。也就是说,能够在以上描述的示例中交换对行和列的处理。本文中描述的插值方法可以被用于任何合适的插值。例如,阵列中的数据点可以是纹理的纹素,其中,内插值表示采样位置处的纹理值。备选地,阵列中的数据点可以是图像的像素,其中,内插值表示采样位置处的图像值,所述内插值能够对诸如图像缩放或透镜像差校正的图像处理功能有用。更宽泛地,数据点可以是任何类型的图形数据。还更宽泛地,在其他示例中,数据点可以表示高度、温度、密度或电场、或任何其他合适的量。值和数据点在以上的示例中被描述为采用定点格式。总体上,可以使用任何合适的格式,并且例如在一些示例中,值和/或数据点可以被表示为浮点数。以上描述的插值逻辑502能够被实施在计算机系统中。例如,图10示出包括gpu1002、gpu1004、存储器1006和诸如显示器1010、扬声器1012、麦克风1014和键盘1016的其他设备1008的计算机系统。计算机系统的部件能够经由通信总线1018彼此通信。插值逻辑502可以(例如,在硬件中)被实施为如图10中所示出的gpu1002的一部分。备选地,插值逻辑可以被实施在cpu1004上。如果插值逻辑502被实施在软件中,则其可以在存储器1006中被存储为计算机程序代码并且可以执行在计算机系统的处理单元上(例如在gpu1002或cpu1004上)。总体上,以上描述的功能、方法、技术或部件中的任何一个(例如,插值逻辑502及其部件)能够使用软件、固件、硬件(例如,固定逻辑电路)或这些实施方式的任何组合被实施在模块中。术语“模块”、“功能”、“部件”、“块”、“单元”和“逻辑”在本文中用于总体上表示软件、固件、硬件、或其任何组合。在软件实施方式的情况下,所述模块、功能、部件、单元或逻辑表示当运行在处理器(例如一个或多个cpu或gpu)上时执行指定任务的程序代码。在一个示例中,描述的所述方法可以由被配置具有以机器可读形式被存储在计算机可读介质上的软件的计算机来执行。计算机可读介质的一个这样的配置是信号承载介质并且因此被配置为将指令(例如,作为载波)诸如经由网络发送到计算设备。计算机可读介质也可以被配置为非瞬态计算机可读存储介质并且因此是非信号承载介质。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪速存储器、硬盘存储器、以及可以使用磁性技术、光学技术和其他技术来存储指令或其他数据并且能够由机器访问的其他存储设备。软件可以是计算机程序的形式,该计算机程序包括用于将计算机配置为执行描述的方法的组成部分或者,包括当在计算机上运行程序时适于执行本文中描述的多个方法中的任何一个方法的所有步骤的计算机程序代码装置,并且其中所述计算机程序可以被实现在计算机可读介质上。程序代码能够被存储在一个或多个计算机可读介质上。本文中描述的技术的特征是平台无关的,这意味着该技术可以被实施在具有各种处理器的各种计算平台上。本领域技术人员也将意识到,能够由专用电路、专用集成电路、可编程逻辑阵列、可编程门阵列等来实现功能、技术或方法中的全部或部分。例如,模块、功能、部件、单元或逻辑(例如插值逻辑502及其部件)可以包括电路形式的硬件。这样的电路可以包括晶体管和/或在制造过程中可用的其他硬件元件。这样的晶体管和/或其他元件可以用于形成实施和/或包含例如诸如寄存器的存储器、触发器、或锁存器、逻辑运算(诸如布尔运算)符、数学运算符(诸如加法器、乘法器、或移位器)、互联的电路或结构。这样的元件可以被提供为定制电路或标准单元库、宏、或在其他级别的抽象。这样的元件可以在特定布置中相互连接。所述模块、功能、部件、单元或逻辑(例如插值逻辑502及其部件)可以包括固定功能的电路和可以被编程为执行一个或多个功能的电路;这样的编程可以由固件或软件更新或控制机制提供。在示例中,硬件逻辑具有实施固定功能运算、状态机或过程的电路。还旨在涵盖“描述”或限定实施以上描述的模块、功能、部件、单元或逻辑的硬件的配置的软件,例如hdl(硬件描述语言)软件,如用于设计集成电路、或用于将可编程芯片配置为实现期望功能。也就是说,可以提供一种计算机可读存储介质,其具有编码在其上的计算机可读程序代码,所述计算机可读程序代码用于生成被配置为执行本文中描述的方法中的任何一个方法的插值逻辑或用于生成包括本文中描述的任何装置的插值逻辑。也就是说,计算机系统可以被配置为根据电路元件的定义和用于组合那些电路元件的数据定义规则来生成数字电路的表示,其中非瞬态计算机可读存储介质可以具有存储在其上的处理器可执行指令,当所述处理器可执行指令在这样的系统上运行时,使得所述计算机系统生成如本文中描述的插值。为了以另一方式实施,可以提供一种非瞬态计算机可读存储介质,其具有存储在其上的计算机可读指令,当在用于生成集成电路的实现形式的计算机系统上被处理时,所述计算机可读指令使得所述计算机系统生成根据本文中描述的示例中的任何一个示例的插值逻辑的表现形式。术语“处理器”和“计算机”在本文中用于指具有使得其能够运行指令的处理能力的任何设备或其一部分、或能够实现所述功能或方法的全部或一部分的专用电路、或者其任何组合。尽管已经以特定于结构特征和/或方法动作的语言描述了本主题,但是应当理解,所附的权利要求中限定的本主题不是必须限于以上描述的特定特征或动作。相反,以上描述的特定特征和动作被公开为实施权利要求的示例形式。应当理解,以上描述的益处和优点可以涉及一个示例或可以涉及若干示例。如对于本领域技术人员将显而易见的是,可以在不丧失追求的效果的情况下,扩展或变更本文中给出的任何范围或值。本文所描述的方法的步骤可以以任何合适的顺序被实现,或在适当情况下同时被实现。在不丧失追求的效果的情况下,以上描述的多个示例中的任何一个示例的方面可以与描述的其他示例中的任何一个示例的方面相组合以形成另外的示例。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1