相机校准的制作方法

文档序号:15744428发布日期:2018-10-23 22:51阅读:297来源:国知局

本发明涉及用于计算相机的校准参数的方法和装置。



背景技术:

相机校准通常涉及对与相机相关联的可能影响图像处理的参数进行估计或计算的过程。这些参数可以被称为校准参数。校准参数可以包括相机的镜头和图像传感器的参数,和/或与相机相对于场景的物理位置和/或方位相关的参数。这些参数的知识可用于成像过程的各个方面。例如,校准参数的知识可以用于校正镜头失真,测量世界坐标中物体的大小,以及确定相机相对于场景的位置和/或方位。因此,一组相机校准参数的知识在各种应用中是有用的,包括例如导航系统、增强现实场景构建、3-D场景重建或机器人技术。

校准参数可大致分为两组:外在(extrinsic)参数和固有(intrinsic)参数。外在参数定义了相机相对于场景的位置和方位。更具体地,外在参数可以定义相机参考系相对于世界参考系的位置和方位。也就是说,外在参数可以将相机坐标映射到世界坐标。相机坐标系或参考系的原点可方便地取在相机的光学中心。外在参数可以包括平移和旋转分量。

固有参数可以将相机坐标映射到相机的成像平面(image plane)。固有参数可以表示从相机的3D坐标到2D图像坐标的转换。固有参数可以另外将成像平面中的坐标映射到图像的像素坐标。因此,固有参数可以将相机参考系中的坐标映射到图像点的像素坐标。固有参数可以包括相机的焦距、光学中心(也被称为主点)、以及像素偏斜(skew)系数中的一者或多者。

图1中示出了固有参数和外在参数之间关系的示意图。

三角形物体101是具有在相对于三维世界坐标系或世界系(Xw,YW,ZW).指定的场景中的位置的场景中的物体。三角形105的顶点是场景点Pw,其具有由Pw=(xw,yw,zw)给出的世界坐标系中的位置。

相机(未示出)定义了三维相机坐标系或相机系(Xc,Yc,Zc)。相机系的原点是相机的光学中心或透视投影中心。相机具有与光学中心的距离为f的相关联的成像平面103,其中f是相机的焦距。成像平面内的点可以相对于被标记为(Xi,Yi)的二维成像平面坐标系(或成像平面系)来定义。成像平面系的原点可能与成像平面的质心一致。

场景点Pw对应于具有由Pi=(xi,yi)给出的成像平面系中的位置的相关联的图像点Pi。

外在参数可以是定义了已知世界参考系(Xw,YW,ZW)和未知相机系(Xc,Yc,Zc)之间的转换的那些参数。在相机参考系中的场景点的位置被标记为Pc。因此,在该示例中,外在参数可以定义世界参考系中的场景点的位置(Pw=(xw,yw,zw))与其在相机系中的位置(Pc=(xc,yc,zc))之间的转换。固有参数可以定义相机参考系和成像平面参考系之间的转换(即,在相机参考系中定义的点的位置(Pc=(xc,yc,zc))与其在成像平面系中的相关联位置(Pi=(xi,yi))之间的映射)。因此可以理解的是,关于必要的外在参数和固有参数两者的知识可以定义点Pw与Pi之间的映射或转换。

固有参数还可以定义成像平面坐标和像素坐标之间的转换。可以相对于位于成像平面中的像素系来定义像素坐标。成像平面参考系和像素系之间的转换可能会导致伪像,例如,镜头失真和像素偏斜。

获得校准参数值的一种方式是使用已知的校准图案(pattern)来执行校准。在该方法中,获取位于空间中的已知位置并具有已知几何形状的校准图案的一个或多个图像。然后使用这些图像以及校准图案的已知位置和几何形状来估计校准参数。这种方法存在这样的缺点:需要使用专用物理组件(即,校准图案)。此外,在校准过程中,相机不能用于其预期用途,因为它被限制为仅对校准图案进行成像。

获得校准参数值的替代方法是根据由相机捕获的“真实”图像序列(即,相机在其预期使用期间捕获的图像序列)来估计校准参数值。在这方面,算法已被开发用于执行实时或每帧的相机校准。一个这样的算法的示例是即时定位与建图(SLAM)算法。



技术实现要素:

根据本公开的一个方面,提供了一种校准相机的方法,包括:针对由相机捕获的序列中的帧执行第一校准,以计算这些帧的针对一组一个或多个相机参数的第一校准数据;针对序列中的所选帧执行第二校准,以根据这些帧的第一校准数据来计算所选帧的第二校准数据;以及在针对序列中的后续帧执行的第一校准中使用第二校准数据。

第一校准可以是对序列中的帧执行的实时校准。

第一校准可以对序列中的帧中的每一者执行。

第二校准可以是非实时校准。

该方法还可以包括选择用于第二校准的帧的步骤。

可以根据这些帧的第一校准数据来选择用于第二校准的帧。

还可以根据与这些帧相关联的图像元数据来选择用于第二校准的帧。

可以通过周期性地选择帧来选择用于第二校准的帧。

针对序列中的帧执行第一校准的步骤可以包括基于针对序列中的先前帧计算出的第一校准数据来执行增量校准。

针对所选帧进行的第二校准可以使用序列中的多个历史帧的校准数据来确定该所选帧的第二校准数据。

第二校准数据可被用于将校正施加到作为针对序列中的后续帧进行的第一校准的一部分而计算出的对校准数据的估计。

可以根据所选帧的第二校准数据与该所选帧的第一校准数据的比较来确定校正的每一者。

所选帧的第二校准数据可被用于将校正施加到作为针对序列中在该所选帧之后的一个或多个帧进行的第一校准的一部分而计算出的对校准数据的估计。

针对序列中在该所选帧之后的所述一个或多个帧中的每一者,第一校准数据可以根据以下各项来确定:i)根据增量校准确定的对一组相机参数的估计;以及ii)根据所选帧的第二校准数据与该所选帧的第一校准数据的比较而确定的校正。

校正可以被整体施加到对序列中在该所选帧之后的单个帧的校准数据的估计。

校正可以被递增地施加到对序列中在该所选帧之后的多个帧的校准数据的估计。

一组一个或多个校准参数可以包括相机的固有参数和/或外在参数。

固有参数可以包括以下各项中的至少一者:焦距、相机的光学中心、径向失真参数、和像素偏斜系数。

外在参数可以包括以下各项中的至少一者:相机的位置、相机的方位、和相机的姿势(pose)。

根据本公开的另一方面,提供了一种用于对捕获帧序列的相机进行校准的装置,该装置包括:第一校准单元,该第一校准单元被配置为针对序列中的帧执行第一校准,以计算这些帧的针对一组一个或多个相机参数的第一校准数据;以及第二校准单元,被配置为针对序列中的所选帧执行第二校准,以根据这些帧的第一校准数据来计算所选帧的第二校准数据;其中,第一校准单元被配置为使用第二校准数据来针对序列中的后续帧执行第一校准。

第一校准单元可以包括被配置为选择用于第二校准的帧的选择器单元。

选择器单元可以被配置为根据这些帧的第一校准数据来选择用于第二校准的帧。

选择器单元可以被配置为还根据与这些帧相关联的图像元数据来选择用于第二校准的帧。

选择器单元可以被配置为通过周期性地选择帧来选择用于第二校准的帧。

第一校准单元可以被配置为作为针对序列中的帧进行的第一校准的一部分来基于针对序列中的先前帧计算出的第一校准数据而执行针对该帧的增量校准。

第二校准单元可以被配置为使用序列中的多个历史帧的校准数据来计算序列中的所选帧的第二校准数据。

第一校准单元可以包括:校正单元,该校正单元被配置为使用所选帧的第二校准数据来计算校正;以及校准计算单元,该校准计算单元被配置为作为针对序列中的后续帧进行的第一校准的一部分而计算估计的校准数据,并对这些估计施加校正。

校正器单元可以被配置为根据所选帧的第二校准数据与该所选帧的第一校准数据的比较来确定校正的每一者。

校准计算单元可以被配置为将根据所选帧的第二校准数据确定的校正施加到作为针对序列中在该所选帧之后的一个或多个帧进行的第一校准的一部分而计算出的对校准数据的估计。

校准计算单元可以被配置为根据以下各项来确定在序列中所选帧之后的所述一个或多个帧中的每个帧的第一校准数据:i)根据增量校准确定的对一组相机参数的估计;以及ii)根据所选帧的第二校准数据与该所选帧的第一校准数据的比较而确定的校正。

校准计算单元可以被配置为将校正整体施加到对序列中在该所选帧之后的单个帧的校准数据的估计。

校准计算单元可以被配置为将校正递增地施加到对序列中在该所选帧之后的多个帧的校准数据的估计。

一组一个或多个校准参数包括相机的固有参数和/或外在参数。

固有参数包括以下各项中的至少一者:焦距、相机的光学中心、径向失真参数、以及像素偏斜系数。

外在参数包括以下各项中的至少一者:相机的位置、相机的方位、以及相机的姿势。

可以提供被配置为执行本文所描述的任何方法的装置。

用于校准相机的装置可以以集成电路上的硬件来体现。可以提供一种在集成电路制造系统处制造用于校准相机的装置的方法。可以提供集成电路定义数据集,其在集成电路制造系统中被处理时将该系统配置为制造该装置。可以提供一种非暂态计算机可读存储介质,其上存储有集成电路的计算机可读描述,该描述在集成电路制造系统中被处理时使得集成电路制造系统制造该装置。

可以提供一种集成电路制造系统,包括:

非暂态计算机可读存储介质,其上存储有描述本文所描述的装置的计算机可读集成电路描述;

布局处理系统,该布局处理系统被配置为处理集成电路描述以生成实现该装置的集成电路的电路布局描述;以及

集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造该装置。

可以提供用于执行本文所描述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,这些计算机可读指令在计算机系统处被执行时使得计算机系统执行本文所描述的方法。

附图说明

现在将参考附图以示例的方式描述本发明。在附图中:

图1是用于场景的世界坐标系和成像平面系之间的关系的示意图。

图2示出了用于计算相机的校准数据的装置。

图3示出用于计算相机的校准数据以用于生成全景图像的示例装置。

图4示出了用于计算相机的校准数据以用于生成增强现实图像的示例装置。

图5示出了用于计算相机的校准数据的步骤的流程图。

图6示出了其中可以实现装置的计算机系统。

图7示出了用于生成实现装置的集成电路的集成电路制造系统。

具体实施方式

本申请涉及用于校准相机以计算针对一组相机参数的校准数据的方法。可以针对从相机获取的图像序列来计算校准参数,其中校准参数可以在该图像序列之间改变。在本文所描述的方法下,执行两个单独的校准阶段。第一校准阶段可以是对由相机捕获的序列中的帧执行的初始校准,以便计算这些帧的初始校准数据。如下面将更详细描述的,第一校准阶段可以实时执行,并且可以对序列中的每个帧执行。第二校准阶段是对序列中的所选帧执行的进一步校准,以便计算这些所选帧的精化(refined)校准数据。第二校准阶段可以用于获得所选帧的更准确的校准数据(与从第一阶段获得的近似校准数据相比),并且因此可能不是实时执行。精化校准数据被用于针对序列中的后续帧进行的第一校准阶段。以这种方式,可以使用序列中的历史帧的精化校准数据来提高对该序列中的后续帧执行的第一校准阶段的准确度。所选帧的初始校准数据也被用于针对该帧进行的第二校准阶段的一部分。对所选帧的初始校准数据的使用可以提高第二校准阶段的速度和/或准确度。

图2中示出了用于校准相机的装置。装置200包括第一校准单元202和第二校准单元204。第一校准单元和第二校准单元通过通信总线206和208耦合以允许在其间进行的数据传输。

第一校准单元和第二校准单元可以在单独的处理单元上实现或作为单独的处理单元的一部分来实现。例如,第一校准单元可以被实现为图形处理单元(GPU)的一部分,并且第二校准单元可以被实现为中央处理单元(CPU)的一部分。

第一校准单元202被配置为对由相机(未示出)捕获的序列210中的帧执行第一校准。第一校准单元202执行校准以计算序列中的帧的针对一组一个或多个相机参数的第一校准数据。第一校准数据可以包括针对各个相机参数的一组值。也就是说,每个值可以对应于相应的相机参数。

相机参数可以包括相机的一个或多个外在和/或固有参数。外在参数可以包括相机相对于正由相机成像的场景的位置和/或方位。相机相对于场景的位置和方位的组合可以被称为相机的姿势。该组外在参数可以定义相机参考系相对于世界参考系的位置和/或方位。世界参考系可以定义场景中物体的位置。可以将相机的光学中心作为相机参考系的原点。这样,可以认为相机定义了相机参考系。世界参考系和相机参考系都可以是3-D坐标系,在这种情况下,外在参数可以表示从3D世界坐标系到3D相机坐标系的刚性转换。

相机的固有参数可以包括相机的焦距(相机的光学中心与成像平面之间的距离)、光学中心、以及像素偏斜系数。通常,固有参数可以将相机参考系中的坐标(或位置)关联或映射到成像平面中的对应坐标/位置。该成像平面中的位置可以是像素位置。因此,固有参数可以表示从相机的3D坐标系到2D图像坐标的投影转换。

第一校准单元202可以计算针对一个或多个相机参数的值。因此校准单元202可以计算一组针对外在参数的值、一组针对固有参数的值、或一组针对这两者的值。替代地,校准单元202可以计算针对固有参数和外在参数的混合子集的值。一组一个或多个相机参数中的每一者可以被标记为i。由第一校准单元202确定的一组针对一个或多个相机参数的值可以采用矢量或矩阵的形式。这些矢量或矩阵可分别被称为校准矢量或校准矩阵。校准矢量或校准矩阵的每个元素可以对应于相应的相机参数,每个元素的值表示由第一校准单元202确定的针对特定参数的值。替代地,校准矢量或校准矩阵的若干元素可以组合地对应于单个相机参数,并且校准矢量或校准矩阵的任何一个元素可以对应于不止一个相机参数。例如,校准矢量可以包含三个元素,每个元素指定相机关于相应轴的旋转。相机关于每个轴的旋转位置可以对应于相应的相机参数。替代地,可以使用矩阵来表示相机关于轴的旋转位置,在该情况下矩阵的多个元素可以描述一个相机参数。

第二校准单元204被配置为根据由第一校准单元202计算的序列中的这些帧的第一校准数据来计算所选帧的第二校准数据。第二校准单元可以针对与第一校准单元相同的一组相机参数计算第二校准数据。替代地,第二校准单元204可以仅针对由第一校准单元计算的相机参数的子集计算第二校准数据。第二校准数据可以采用校准矢量或校准矩阵的形式。此外,校准矢量或校准矩阵的每个元素可以对应于相应的相机参数,其中这些元素的值表示由第二校准单元确定的针对相应参数的值。替代地,用于第二校准数据的校准矢量或校准矩阵的若干元素可以组合地对应于单个相机参数,并且校准矢量或校准矩阵的任何一个元素可以对应于不止一个相机参数,如上所述。

在本文所描述的示例中,第二校准单元仅对已被执行第一校准的所选帧执行第二校准。因此,与第一校准单元210相比,第二校准单元204计算序列210中的数目减少的帧的校准数据。

第二校准单元204将所选帧的第二校准数据传回第一校准单元(在该示例中,经由总线208)。第一校准单元202然后在对序列210中的后续帧(即,序列中在那些所选帧之后的帧)执行第一校准时使用第二校准数据。

例如,第一校准单元202接收序列210中的帧210A。第一校准单元计算帧210A的针对一组相机参数(例如,相机位置、方位、焦距等)的第一校准数据。然后,第一校准单元202基于帧210A的第一校准数据来选择帧210A进行进一步处理,并将所选帧210A及其第一校准数据传送给第二校准单元204。随后,第二校准单元204计算所选帧210A的第二校准数据。该第二校准数据可以通过使用或根据该帧的第一校准数据来计算。第二校准单元204随后将所选帧210A的第二校准数据传回第一校准单元202。第一校准单元202然后使用帧210A的第二校准数据来对序列210中的后续帧(例如,帧210C)执行第一校准。应理解的是,帧210A的第一校准本身可以通过使用该序列中的历史帧(即,序列中先于帧210A出现的帧)的第二校准数据来执行。

一种方便的实施方式将校准过程分割,这样使得由第一校准单元202执行的第一校准具有比由第二校准单元204执行的第二校准更低的准确度。因此,第一校准单元可以对序列中的帧执行初始或近似(即“粗略”)的校准以计算初始(或近似)校准数据,并且第二校准单元可以执行进一步校准以计算精化的或再估计的校准数据。

例如,由单元202执行的第一校准可以包括增量校准。为了执行增量校准,第一校准单元202可以仅根据该序列中的单个先前帧(例如,帧210A)的第一校准数据来计算给定帧(例如,帧210C)的估计校准数据。相反,由校准单元204执行的第二校准可以根据该序列中的多个先前帧的校准数据来计算该序列中的给定帧(例如,帧210A)的校准数据。这些先前帧可以仅限于先前所选的帧,即,由第一校准单元202选择用于进一步校准的先前帧。替代地,可以根据多个先前帧的校准数据来计算该序列中的帧的第二校准数据,其中多个先前帧包括所选帧和非选择帧的组合(即,由第一校准单元202选择用于进一步校准的帧和未被第一校准单元202选择用于进一步处理的帧的组合)。先前帧的校准数据可以包括这些帧的第一校准数据和第二校准数据;或者它可能仅限于这些帧的第二校准数据。在一个示例中,第二校准单元204可以使用多个先前帧的精化校准数据和近似校准数据的组合。由第二校准单元204执行的校准可以是非线性校准。例如,可以根据序列中的先前选择的帧的校准数据的加权组合来计算该序列中的给定帧的第二校准数据。

两个校准单元之间的准确度差异还可以意味着第一校准单元202以比第二校准单元204更高的频率处理帧。第一校准单元可以以与序列中的帧被装置接收或被相机捕获基本上相同的频率来对序列中的帧执行初始校准。这样,第一校准单元可以对序列中的帧执行“实时”初始校准。第一校准单元202可以例如以至少24帧每秒(fps)的速率对帧执行第一校准。在某些情况下,它可以以30fps的速率处理帧。

相反,第二校准单元可以以比第一校准单元更低的频率(例如,帧速率)执行第二校准。例如,第二校准单元可以以约0.4fps的速率执行第二校准。这样,可以说第二校准单元执行非实时校准(即,第二校准单元执行第二校准的速率小于帧在该装置处被接收的速率)。

第一校准单元202可以使用所选帧(例如,帧210A)的第二校准数据来将校正施加到作为针对序列中的后续帧(例如,帧210C)进行的第一校准的一部分而计算出的对校准数据的估计。第一校准单元可以根据该所选帧的第一校准数据与从第二校准单元接收的同一所选帧的第二校准数据的比较来确定该校正。当第一校准单元202将所选帧发送到第二校准单元204时,第一校准单元202存储所选帧的第一校准数据的副本。第一校准单元202可能需要知道从校准单元204接收的第二校准数据对应于哪个历史帧。为了做到这一点,第二校准单元204可以传送对所选帧的指示或所选帧的标识符以及该帧的第二校准数据。该指示例如可以是所选帧的帧号。然后第一校准单元可以使用帧标识符来访问所存储的该帧的第一校准数据,以确定要施加到其校准估计的校正。

第一校准单元202可以对序列210中的每个帧执行第一校准,即,其可以是每帧校准。然而,第一校准不必对每一帧执行第一校准,例如可以对在序列中每N帧群组中的一个帧执行第一校准,其中,N≥2。

第一校准单元可以选择供第二单元204进行进一步校准的帧。可以根据帧的第一校准数据和/或根据与帧相关联的元数据来进行此操作。元数据可以包括对例如图片质量或图片清晰度的指示。替代地,第一校准单元可以被配置为独立于第一校准数据和图像元数据来选择序列中每M帧群组中用于进行进一步校准的一个帧,其中,M>N。

将校准过程分为两部分(即,初始校准阶段和更准确或精化的校准阶段)使初始校准的准确度被提高(通过使用更准确的第二校准的结果),而不会对初始校准的处理速度产生不利的影响。此外,通过将第一校准数据传送给第二校准单元可以提高精化校准的准确度和/或速度。

装置200的一个方便的实施方式是在图形处理单元(GPU)或其他专用硬件上或作为GPU或其他专用硬件的一部分实现第一校准单元202,并且在中央处理单元(CPU)上或作为CPU的一部分实现第二校准单元204。这是有利的,因为GPU通常被配置为在时间受限的环境中执行操作,以及在具有比用CPU可实现的功率更低的功率预算的情况下执行操作。

图2中所示的校准装置适用于作为进行相机校准的一部分而计算任何相机参数。就这点而言,图2中的装置能够在各种应用中实现。一个这样的应用的示例是用于从包括帧序列的输入视频流生成全景图像。

图3中示出了用于计算用于从帧序列生成全景图像的校准数据的示例装置。

该装置总体在300处表示,并且包括第一校准单元302和第二校准单元304。第一校准单元和第二校准单元通过通信总线306和通信总线308耦合。帧序列总体在310处表示。帧序列具有处理顺序,并且在该示例中帧是按照从右到左的顺序被处理的,使得帧310A在帧310B之前被处理;帧310B在帧310C之前被处理,以此类推。每个帧可以描绘在特定时刻的(由相机捕获的)图像并因此被称为图像帧。

第一校准单元302包括第一计算单元312、选择器单元314、记录单元316、以及校正器单元318。计算单元312耦合到选择单元314,使得计算单元312的输出作为输入被馈送到选择器单元314。选择器单元的输出端耦合到记录单元316的输入端。记录单元316耦合到校正器单元318。具体地,记录单元的输入/输出(I/O)接口连接到校正器单元的I/O接口。校正器单元318的输出端也耦合到计算单元312的输入端。

第一校准单元302被配置为接收序列310的帧并且对这些帧执行第一校准以计算针对一组一个或多个相机参数的第一校准数据。如上所述,校准单元302可以对序列310的每个帧执行第一校准。它可以实时执行第一校准。在该示例中,第一校准单元被配置为作为计算帧的第一校准数据的一部分而执行增量校准。

第二校准单元304包括第二校准计算单元320。第二校准计算单元320经由总线306耦合到选择器单元314。更具体地,选择器单元的输出端耦合到第二计算单元320的输入端。第二计算单元320也耦合到校正器单元318。具体地,第二计算单元的输出端通过总线308连接到校正器单元的输入端。

第二校准单元304被配置为对序列的所选帧执行精化的或再计算的校准。它执行比第一校准单元更准确的校准。它可以例如执行非线性校准。它可以使用在该所选帧之前的序列中的所有帧的校准数据来对所选帧执行全局校准。替代地,它可以使用序列中的多个先前所选帧的第二校准数据来计算所选帧的第二校准数据。

现将关于对序列中的帧310C的处理来描述装置300的操作。

第一校准单元接收帧310C。计算单元312接收帧310C,该计算单元312计算对该帧的针对一组相机参数的值的估计。因为第一校准单元302执行的是增量校准,所以计算单元312仅通过使用序列的单个先前帧(在该示例中为帧310B)的校准数据来估计帧310C的一组相机参数。更一般地,先前帧是在帧310C之前已被处理或捕获的帧。

校正单元318计算对所估计的参数的校正。根据序列中的历史帧(在该示例中为帧310A)的精化校准数据来计算该校正。校正的计算将在下面更详细地进行描述。

计算单元312将来自校正器单元318的校正施加到其针对帧310C的参数估计,以计算帧310C的第一校准数据或初始校准数据。因此,帧310C的第一校准数据根据以下各项来计算:i)根据增量校准确定的对一组相机参数的估计;以及ii)校正器单元根据序列中的先前帧的精化校准数据而确定的校正。也就是说,在该示例中,计算单元312对帧310C执行增量校准,以估计针对该帧的一组相机参数,然后将由校正器单元318确定的校正累加到这些估计中。

在替代示例中,由校正器单元318确定的校正可并入到由计算单元312执行的增量校准中。也就是说,正累积地执行的增量校准和校正不是作为生成帧的第一校准数据的独立的步骤,计算单元312可以通过执行依赖于由校正器单元318确定的校正的增量校准来计算帧的第一校准数据。这可以使得帧的第一校准数据能够在单个处理步骤中被确定。

计算单元312可以额外地计算或记录帧310C的其他图像信息。例如,它可以确定序列中的帧的帧号和/或指示帧所描绘的图像的质量的图像参数(例如,对图像清晰度的指示或测量结果)。这种额外的帧信息可以被称为帧元数据。

计算单元312将帧310C的第一校准数据和帧元数据传送给选择器单元314。选择器单元314根据这些帧的第一校准数据和元数据来选择用于进一步校准的帧。

在该示例中,在装置正在执行相机校准(作为构建全景图像的一部分)的情况下,选择器单元可以选择具有指示适合于生成全景图像的第一校准数据和元数据的帧用于第二校准单元进行的进一步校准。例如,当构建全景图像时,可能期望选择与帧被捕获的场景内的角度相差约n度(例如,相差20度)的帧。可以根据相机的外在参数(具体地,其方位)来确定帧的角度或方位。因此,选择器单元可以选择具有指示与先前所选帧近似的角位移的第一校准数据的帧用于进一步校准。帧的选择还可以受制于帧的图像质量高于特定阈值的条件,例如,图像清晰度高于特定阈值。这可以避免具有差图像质量的帧被选择包括在全景图像中。

回到我们的示例,选择器单元314将帧310C标识为适用于进一步校准。

选择器单元314将帧310C的标识符及其相关联的第一校准数据传送给记录单元316。帧标识符可以是例如可以从帧的元数据中获得的帧号。记录单元316然后记录或存储帧310C的帧标识符和第一校准数据。记录单元可以将数据存储在存储器中。存储器可以是第一校准单元的本地存储器,例如,寄存器或高速缓存。如果第一校准单元302被实现为GPU的一部分,则记录单元可以将数据记录在GPU的高速缓存中。

选择器单元314还将帧310C及其相关联的第一校准数据和元数据传送给第二校准单元304。帧310C、其关联的第一校准数据、以及元数据被第二计算单元320接收。

第二计算单元320计算帧310C的第二校准数据。第二计算单元320可以再估计或精化第一校准数据以生成第二校准数据。如上所述,第二计算单元可以使用该序列的多个先前帧(即,帧310C之前的序列中的帧)的校准数据来执行非线性校准。第二计算单元可以使用多个先前所选帧(即,由第二校准单元304处理的前一组帧)的第二校准数据来执行第二校准。替代地,第二计算单元可以使用序列中的先前帧的子集的第一校准数据和第二校准数据来执行第二校准。

因为第二计算单元320使用多个先前帧的校准数据来执行更“全局”的校准,所以不太可能遭受可能由第一校准单元所执行的校准的增量特性造成的计算错误(例如,相机的位置或方位上的漂移)。

计算单元320然后将帧310C的精化校准数据传送给进一步处理块322。

在该示例中,进一步处理块322可以被配置为根据该组所选帧和相关联的精化校准数据来生成全景图像。所选帧可以从计算单元320被传送到处理块。例如,所选帧的图像数据和这些相应帧的精化校准数据可以从计算单元320一起被传送到进一步处理块322。替代地,一旦所选帧已被选择器单元314确定,则它们可以被存储在存储库中。该存储库可以在校准单元302和304的外部。然后块322可以从存储库中取回所选帧。在这种情况下,所选帧的精化校准数据可以与对该所选帧的指示(例如,帧ID)相关联。然后块322可以使用与精化校准数据相关联的帧指示来从存储库中选择正确的帧。

处理块322可以通过将一组所选帧拼接在一起来生成全景图像。为此,处理块322可以使用每个所选帧的精化校准数据来将这些帧抽离到(warp into)共同空间中。将帧抽离到共同空间中使得帧对齐(例如,使得帧边缘上的特征与另一帧的相对边缘上的特征对齐),从而可以将它们融接。一旦块322将帧抽离到共同空间中,块就可以确定相邻帧之间的接缝,以使得帧能够被融接。块322还可以在这些帧被融接之前对帧执行色彩平衡。

处理块可以将所选帧按照它们(从第二校准单元304;存储库或其他地方)被接收的顺序拼接在一起。替代地,处理块312在将一组帧拼接在一起之前可以将接收到的所选帧暂存于缓冲器中,直到接收到全景图像所需的一组帧为止。

处理块322可以在CPU或GPU上实现。替代地,处理块可以被分割跨CPU和GPU两者。例如,帧变形和融接的步骤可能非常适合于由GPU执行,而标识接缝的步骤可以由CPU适当地执行。

第二计算单元320还将帧310C的精化校准数据传送回第一校准单元302。该精化校准数据由校正器单元318接收。

因为第一校准单元302以比第二校准单元304更高的速率或处理速度执行帧校准,所以第一校准单元在接收到来自第二校准单元的帧310C的精化校准数据被时将对帧310C的序列中的后续帧(例如,帧310D)执行第一校准。

校正器单元318因此使用先前所选帧310C的精化校准数据来计算要被施加到由第一计算单元312针对该序列中的后续帧(即,该序列中在该先前所选帧310C之后的帧)所估计的校准数据的校正。在该示例中,当从第二校准单元接收到帧310C的第二校准数据时,第一校准单元将处理后续帧310D。

为了计算校准校正,校正器单元318将帧310C的精化校准数据与帧310C的初始校准数据(先前由第一计算单元312计算并存储在记录单元316中)进行比较。为此,校正器单元可以从第二校准单元另外接收帧310C的标识符。校正器单元可以使用帧标识符来访问先前由记录单元316存储的帧310C的第一校准数据。

可以以多种方式计算校正,但是在一个实施方式中,对于一组相机参数中的每一者,校正等于该帧(帧310C)的第一校准数据和第二校准数据之间的差。也就是说,校正可以包括针对一组相机参数的一组校正值。在数学上,校正器单元可计算一组针对每个相机参数i的校正值△vi,其中,△vi表示针对参数i的第一校准数据和第二校准数据的值之间的差。该组校正值可以采用矢量或矩阵的形式,其可以分别被称为校正矢量或校正矩阵。校正矢量或校正矩阵的每个元素可以表示针对相应相机参数的校正值。

校正单元318然后将校正值传送到第一计算单元312。

第一计算单元312使用这些校正值来对其对帧310D的校准数据的估计施加校正,从而计算出帧310D的一组第一校准数据。通过这种方式,校正数据中由于第一校准单元执行的增量校准而可能累积的任何误差都可以被校正。这可以减少针对相机参数的校准数据与其真实值或正确值之间的偏移。

第一计算单元312可以以多种方式将校正施加到所估计的帧310D的校准数据。例如,第一计算单元312可以使用加法运算来将每个校正值△vi施加到针对帧310D确定的针对参数i的估计值。如果校正值是校正矢量或矩阵的形式,则第一计算单元可以通过将校正矢量/矩阵加到由第一校准单元针对帧310D确定的校准矢量/矩阵来施加校正。作为另一示例,由校正器单元318确定的该组校正值可以是矢量或矩阵(multiplicative)。在这种情况下,第一计算单元312可以使用乘法运算来施加这些校正值。例如,如果第一校准数据是矢量的形式并且校正值是矩阵的形式,则第一计算单元312可以通过执行校准矢量与校正矩阵的乘法来施加校正。如果校正值和第一校准数据都是矩阵形式,则第一计算单元312可以通过执行校正矩阵和校准矩阵的矩阵乘法来施加校正。

第一计算单元312可以将校正整体施加到所估计的帧310D的校准数据。也就是说,如果校正器单元318计算针对相机参数i的校正△vi,则第一计算单元可以将该校正△vi施加到帧310D的相机参数i的估计值。换言之,校正器单元318可以将根据所选帧(例如,帧310C)的第二校准数据确定的校正施加到作为仅对在该所选帧之后的序列中的单个帧(例如,帧310D)进行的第一校准的一部分而计算出的估计。

替代地,第一计算单元可以跨所选帧之后的多个帧递增地施加校正。换言之,第一计算单元可以将校正扩展到多个帧上。也就是说,计算单元312可以将根据所选帧(例如,帧310C)的第二校准数据确定的校正递增地施加到针对该所选帧之后的帧序列的相机参数的估计。例如,计算单元可以在帧序列310D-310E上递增地施加针对参数i的校正△vi。因此,校正量被逐渐地施加到序列中的多个后续帧上。

该计算是立即将校正施加到单个帧的参数估计还是逐渐施加到多个帧的参数估计可以取决于校准装置的实现方式。在该示例中,在装置计算用于生成全景图像的帧的校准数据的情况下,已发现通过立即施加校正可以获得更好的结果。

如果逐渐施加校正,则可能通过使校正在校正器单元318从第二校准单元304接收到序列中的下一个所选帧的第二校准数据时已完全被施加来跨多个帧施加这些校正。即,如果第一校准单元302以每秒m帧的速率执行第一校准,并且第二校准单元以每秒n帧的速率执行第二校准(其中,m>n),则计算单元312可以跨在多个帧(n帧≤m/n)施加来自校正器单元314的校正。但是,不一定是这种情况。计算单元312可以例如跨可变数目的帧来施加校正。也就是说,可以跨不同数目的帧施加不同的校正。其中可能发生这种情况的一种实现方式是在计算单元312对每个后续帧施加固定量的校正的情况下。因此,在这样的实现方式中,如果要施加的校正的大小是变化的,则被施加校正的帧的数目也是变化的(例如是因为与相对较小的校正相比,计算单元将相对较大的校正扩展到数目更多的帧上)。如果计算单元312施加校正的帧的数目是变化的(例如,因为这取决于要施加的校正的大小),则计算单元312可以通过使被施加校正的平均帧数目小于或等于m/n来施加校正。以这种方式施加校正使得由校正器单元318确定的全部校正都能够被施加到帧序列310上,并且可以避免出现校正的积压。应理解的是,虽然已主要参考帧310C描述了装置300的操作,但该装置可以以类似的方式对序列310中的后续帧进行操作。

在另一示例实现方式中,校准装置可以计算用于在增强现实应用内生成图像的校准数据。

增强现实应用可以操作以利用所生成视频或图形内容对由相机捕获的真实世界环境的图像进行增强或补充。为了使增强现实应用生成令人信服的图像进行显示,对于应用而言,知道将增强内容放置在由相机捕获的真实世界图像内的何处是非常有用的。例如,如果应用操作以将家具项放置在现实世界场景内,则在家具项被放置在该场景内的可行或预期位置处(例如,家具项的底座被放置在地板上)时将生成更令人信服的图像。为了在场景内正确地定位内容项,对于应用而言,知道相机相对于该场景的位置和/或方位(即,相机的外在参数)是有用的。应用知道任何或全部相机的固有参数(例如,焦距)也是有用的,使得内容项可以以适当的大小和适当的失真被投射到场景中。

图4示出了用于计算用于生成增强现实图像的序列中的帧的相机校准数据的装置400的示例。

该装置还包括第一校准单元402和第二校准单元404。校准单元通过通信总线406和408彼此连接。第一校准单元402包括第一计算单元412、记录单元416、和校正器单元418。第二校准单元404包括第二校准计算单元420,并且耦合到增强现实应用426。

第一校准单元402被配置为计算由相机(未示出)捕获的序列410中的帧的校准数据。

计算单元412接收序列中的帧(例如,帧410A)并计算该帧的针对一组一个或多个相机参数的一组第一校准数据。在该示例中,这组相机参数包括相机的位置、方位、和焦距。

第一计算单元还记录该帧的标识符(例如,帧号)。

在该示例中,第一校准单元不包括用于选择供第二校准单元进行进一步校准的帧的选择器单元。替代地,第一校准单元被配置为周期性地选择用于进一步校准的帧,例如,通过选择序列410中的每N个帧中的一个帧来进行进一步校准。也就是说,序列中的每第N个帧被选择用于进一步校准。

因此,记录单元416记录第一校准数据和每第N个帧的帧标识符。再次,记录单元可以将该信息存储在第一校准单元本地的存储器或高速缓存中。

第一校准单元402通过总线406将每第N个帧(即,每N帧中的一个帧)、这些帧的帧标识符、以及这些帧的第一校准数据传送给第二校准单元404,并且具体地传送给第二计算单元420。

第二计算单元420对所选帧执行第二校准以计算第二校准数据。第二校准是非实时校准,用于校正相机参数值中的误差,例如位置偏移或由校准的增量性质引起的其他误差。

在该示例中,第一校准单元412将帧的第一校准数据通传到增强现实应用426。第二校准单元420不将第二校准数据通传到增强现实应用426,而是仅生成所选帧的第二校准数据,该第二校准数据由第一校准单元用来对由该单元生成的近似校准数据进行校正。校准装置400被布置为使得增强现实应用426仅接收第一校准数据而不接收第二校准数据,这样辅助应用426提供实时输出显示。这是因为与第二校准数据相比计算第一校准数据的速率更快。如上所述,增强现实应用使用校准数据来映射帧中捕获的环境,以便将内容项插入到该环境中。

增强现实应用426可以在GPU或CPU中实现。它可以跨CPU和GPU二者实现。

第二计算单元将所选帧(例如,帧410A)的第二校准数据和该帧的帧标识符经由总线408传送回到第一校准单元402,并且具体地传送到校正器单元418。校正器单元418使用接收到的帧标识符访问帧410A的第一校准数据。然后校正器单元比较该帧的第二校准数据和第一校准数据以确定针对一个或多个相机参数的校正。因此校正可以包括对应于相应相机参数的一组校正值。

该校正被传送到现在正在估计序列410中的后续帧410B的校准数据的第一计算单元412。第一计算单元递增地跨序列中的多个连续的后续帧(即,一组帧,该组帧中的每个帧都在帧410A之后)施加校正。在该示例中,该组帧包括帧410B-帧410C。已经发现,当出于生成增强现实图像的目的而计算校准数据时,跨序列中的多个后续帧递增地施加相机参数中的校正比向单个帧施加校正更有效。这是因为相机参数中的增量校正(其例如可能在由应用426生成的图像序列中表现为图像内增强内容项目的位置偏移)对用户而言往往比向单个帧施加校正(这可能导致增强内容项在由应用426生成的一对连续图像之间的位置上发生急剧变化)更不明显。然而,第一计算单元412有可能将校正施加到单个帧。

本文所描述的技术的其他实施方式也是可能的,例如在3D场景重建系统、机器人系统、或立体相机系统内。更一般地,本文所描述的技术适用于一般的相机跟踪系统。

使用本文所描述的技术校准相机的方法在图5中概述,并且将在以下段落中被引用。

在步骤501处,针对由相机捕获的序列中的帧执行第一校准,以计算这些帧的针对一组一个或多个相机参数的第一校准数据。

第一校准数据可以对序列中的每个帧执行。它可以实时执行。它可以包括增量校准,这意味着仅使用单个先前帧的校准数据来计算校准数据。第一组校准数据可以包括针对该组相机参数中的相应一者的多个值。第一校准数据可以是初始的或近似的校准。

在步骤503处,针对该序列中的所选帧执行第二校准,以根据这些帧的第一校准数据来计算这些所选帧的第二校准数据。

这些帧可以根据它们的第一校准数据来选择。替代地,这些帧可以独立于它们的第一校准数据来选择,例如,周期性地选择序列中每N个帧中的一个帧。第二校准可以是非实时校准。它可以计算针对与第一校准相同的一组相机参数的校准数据。它可能比第一校准更精化或更精确。例如,第二校准可以通过使用多个先前帧的校准数据来执行。

在步骤505处,将第二校准数据用于执行对该序列中的后续帧进行的第一校准。也就是说,所选帧的第二校准数据被用于执行对该序列中在那些所选帧之后的帧进行的第一校准。

在计算后续帧的第一校准数据时,第二校准数据可以用于计算要施加的校正。校正可以包括对应于相应相机参数的多个校正值。校正可以通过比较所选帧的第二校准数据和该帧的第一校准数据来确定。

图6示出了在其中可以实现本文所描述的装置的计算机系统600。计算机系统包括CPU 602、GPU 604、存储器606、以及诸如显示器616、扬声器618、和相机606之类的其他设备614。第一校准单元610(对应于校准单元202、302或402)在GPU 604上实现。第二校准单元622(对应于校准单元204、304或404)在CPU 602上实现。计算机系统的组件可以经由通信总线620彼此通信。

图2-图4的装置被示出为包括多个功能块和单元。这仅仅是示意性的,并不旨在定义这些实体的不同逻辑元件之间的严格划分。每个功能块可以以任何合适的方式提供。应理解的是,本文所描述的由特定单元形成的中间值不需要由单元在任何点处物理地生成,并且可以仅表示逻辑值,这便于描述单元在其输入和输出之间执行的处理。

本文所描述的单元可以以在集成电路上的硬件实现。本文所描述的单元可以被配置为执行本文所描述的任何方法。通常,上述的功能、方法、技术、或组件中的任何一者可以用软件、固件、硬件(例如,固定逻辑电路)、或其任何组合来实现。本文可以使用术语“模块”、“功能”、“组件”、“元件”、“单元”、“块”和“逻辑”来总体地表示软件、固件、硬件、或其任何组合。在软件实现方式的情况下,模块、功能、组件、元件、单元、块、或逻辑表示在处理器上被运行时执行指定任务的程序代码。本文所描述的算法和方法可以由执行使得(一个或多个)处理器执行这些算法/方法的代码的一个或多个处理器来执行。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器、以及可以使用磁的、光学的、和其他技术来存储指令或其他数据并且可以被机器访问的其他存储器设备。

本文所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解释型语言、或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义了集成电路的代码(例如,硬件描述语言或网表)、以及以编程语言代码(例如,C、Java或OpenCL)表达的代码。可执行代码可以是任何类型的软件、固件、脚本、模块、或库,它们例如当在虚拟机或其他软件环境中被适当地运行、处理、解释、编译、执行时使得在支持可执行代码的计算机系统的处理器执行由代码指定的任务。

处理器、计算机、或计算机系统可以是具有使得其可以运行指令的处理能力的任何种类的设备、机器、或专用电路、或其集合或其一部分。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、可编程门阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。

还旨在包含定义本文所描述的硬件配置以用于设计集成电路或用于配置可编程芯片以执行期望功能的软件,例如,HDL(硬件描述语言)软件。也就是说,可以提供计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,其当在集成电路制造系统中被处理时将该系统配置为制造装置,该装置被配置为执行本文所描述的任何方法,或者制造包括本文所描述的任何装置的装置。集成电路定义数据集可以是例如集成电路描述。

可以提供一种在集成电路制造系统处制造本文所描述的装置的方法。可以提供一种集成电路定义数据集,其在集成电路制造系统中被处理时使得制造装置的方法被执行。

集成电路定义数据集可以是以计算机代码的形式,例如,作为网表、用于配置可编程芯片的代码、作为定义任何级别的集成电路的硬件描述语言、包括作为寄存器传输级(RTL)代码、诸如Verilog或VHDL之类的高级电路表示、以及诸如OASIS(RTM)和GDSII之类的低级电路表示。逻辑上定义集成电路(例如,RTL)的较高级表示可以在被配置用于在软件环境的上下文中生成集成电路的制造定义的计算机系统处被处理,其中该软件环境包括电路元件的定义和用于将这些元件进行组合的规定以便生成由该表示定义的集成电路的制造定义。如通常在计算机系统处执行以定义机器的软件的情况那样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等)以用于被配置用于生成集成电路的制造定义的计算机系统,以执行定义集成电路的代码从而生成该集成电路的制造定义。

现将参考图7描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置为制造装置的示例。

图7示出了被配置为制造本文的任何示例中所描述的装置的集成电路(IC)制造系统702的示例。具体地,IC制造系统702包括布局处理系统704和集成电路生成系统706。IC制造系统702被配置为接收IC定义数据集(例如,定义本文的任何示例中所描述的装置),处理IC定义数据集,并且根据IC定义数据集(例如,其实现本文的任何示例中所描述的装置)来生成IC。IC定义数据集的处理将IC制造系统702配置为制造实现本文的任何示例中所描述的装置的集成电路。

布局处理系统704被配置为接收并处理IC定义数据集以确定电路布局。从IC定义数据集确定电路布局的方法是本领域中已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级(gate level)表示,例如,就逻辑组件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP组件)而言。通过确定逻辑组件的定位信息,可以从电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以优化电路布局。当布局处理系统704确定了电路布局时,它可以将电路布局定义输出到IC生成系统706。电路布局定义可以是例如电路布局描述。

如现有技术中已知的,IC生成系统706根据电路布局定义生成IC。例如,IC生成系统706可以实施半导体器件制造工艺以生成IC,半导体器件制造工艺可以包括光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可以是掩模的形式的,其可以在用于根据电路定义生成IC的光刻工艺中使用。替代地,提供给IC生成系统706的电路布局定义可以是IC生成系统706可用来形成用于生成IC的合适的掩模的计算机可读代码的形式。

由IC制造系统702执行的不同处理可以全部在一个位置(例如,由一方)实现。替代地,IC制造系统702可以是分布式系统,从而一些处理可以在不同位置执行,并且可以由不同方来执行。例如,可以在不同位置和/或由不同方来执行以下阶段中的一些:(i)合成表示IC定义数据集的RTL代码以形成要生成的电路的门级表示,(ii)基于门级表示生成电路布局,(iii)根据电路布局形成掩模,以及(iv)使用该掩模来制造集成电路。

在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可以将系统配置为在不需要对IC定义数据集进行处理以确定电路布局的情况下制造装置。例如,集成电路定义数据集可以定义对诸如FPGA之类的可重新配置处理器的配置,并且对该数据集的处理可以将IC制造系统配置为生成具有该定义的配置的可重新配置处理器(例如,通过将配置数据加载到FPGA)。

在一些实施例中,集成电路制造定义数据集当在集成电路制造系统中被处理时可以使得集成电路制造系统生成本文所描述的设备。例如,以上文关于图7所描述的方式通过集成电路制造定义数据集进行的对集成电路制造系统的配置可使得本文所描述的设备被制造。

在一些示例中,集成电路定义数据集可以包括在数据集中定义的硬件上运行的软件或者与数据集中定义的硬件相结合的软件。在图7所示的示例中,IC生成系统还可以由集成电路定义数据集配置为在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到该集成电路上或者以其他方式向集成电路提供程序代码以供与集成电路一起使用。

本文所描述的图形处理系统可以以集成电路上的硬件来实现。本文所描述的图形处理系统可以被配置为执行本文所描述的任何方法。

与已知的实现方式相比,在本申请中阐述的概念在设备、装置、模块和/或系统(以及本文所实现的方法)方面的实现方式可以带来性能改进。性能改进可以包括提高的计算性能、降低的延迟、增大的吞吐量、和/或降低的功耗中的一者或多者。在制造这样的设备、装置、模块、和系统(例如,在集成电路中)的过程中的性能改进可以针对物理实现方式进行折衷,由此改进制造的方法。例如,性能改进可以针对布局面积进行折衷,从而匹配已知实现方式的性能,但使用更少的硅。这可以例如通过以串行化方式重用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来实现。相反,可以为了改进的性能而对本申请中阐述的在设备、装置、模块、和系统的物理实现方式中带来改进(例如,减小的硅面积)的概念做出折衷。这可以通过例如在预定义的面积预算内制造模块的多个实例来实现。

申请人在此独立地公开了本文所描述的每个单独的特征以及两个或更多个这样的特征的任何组合,使得这样的特征或组合能够基于本说明书(整体地)、根据本领域技术人员的公知常识被执行,而无论这样的特征或特征的组合是否解决了本文所公开的任何问题。鉴于上文的描述,本领域技术人员将明白可以在本发明的范围内进行各种修改。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1