用于通用几何校正引擎的高效处理的方法和系统与流程

文档序号:17292228发布日期:2019-04-03 04:03阅读:345来源:国知局
用于通用几何校正引擎的高效处理的方法和系统与流程

本发明涉及几何校正引擎,并且更具体地涉及校正通过镜头捕获的失真图像并且进行几何校正以生成无失真图像。



背景技术:

在照相机系统中镜头几何失真问题是普遍的。失真可以是普遍的光学失真,诸如桶形失真、枕形失真或鱼眼失真。因此,需要进行校正以结合软件或固件来校正硬件中的这些类型的失真。添加仿射变换支持以支持图像和视频稳定应用,其中需要对齐同一场景的多个图像。透视扭曲是仿射变换的扩展,并提供额外的功能。透视变换可以对齐从不同摄像机视点或位置捕获的两个图像。这还可以用于修正立体照相机的左图像和右图像,以降低视差计算的复杂度。透视变换也可以生成新的视点。

大多数数码照相机遭受一定程度的非线性几何失真。需要空间变换来校正失真。在汽车和安全应用中,照相机使用广角镜头,包括鱼眼镜头,以提供180+°视场。为了以易于使用的表示向用户可视地呈现场景,需要校正这些失真。

图1(0100)总体上示出了利用几何校正引擎(0102)几何校正的失真图像(0101)并将其显示为无失真图像(0103)。校正失真图像的一种技术是前向映射,其将原始无失真图像的坐标给出为失真图像的坐标的函数。前向映射将输入像素(失真图像)映射到输出空间(无失真图像)。使用前向映射,每个输出像素可能不对应于有效输入位置,因此输出像素可以是空的或包含许多需要复杂插值算法的附近映射像素。因此,前向映射不适合于校正失真。

另一种技术是反向映射,其将失真图像的坐标给出为无失真输出图像的坐标的函数。校正涉及将每个输出像素反向映射到源失真图像中的位置,因此校正的图像被完全填充。由于失真的像素位置大多落在分数坐标上,因此校正涉及最近的可用像素之间的插值。

图2(0200)总体上示出了反向映射到输入图像(0201)的输出图像(0202)。输入图像(0201)与诸如块(0203、0204、0223、0233)的取回块混合。取回块包含输入块的像素信息。对于任何失真,用户可以确定失真空间和输入图像坐标之间的重叠。仅对失真空间完全位于有效输入图像内的那些点产生有效图像数据。

输出图像被划分成包含输出图像的像素信息的输出块,例如块(0213、0214)包含输出图像中的垫块的部分的信息。输出块具有固定的大小,固定的大小具有恒定的宽度和恒定的高度。输出块的宽度表示块中的布置在一行中的像素的数量。输出块的高度表示块中的行的数量。在当前的反向映射系统中,在透视变换和像素插值之后,输出块中的每个被反向映射到输入块中。例如,输出块(0214)被反向映射到表示图像(0202)中垫块的白色边界的一部分的输入块(0204)。类似地,输出块(0213)被反向映射到输入子块(0203、0223、0233),其表示与来自垫块的中心白色方块的右上角数据对应的数据。使用固定的输出块大小,很明显某些输出块与其他输出块相比需要的信息更少。为了在透视变换之后反向映射,输出块(0214)需要来自一个输入块(0204)的数据,而输出块(0213)需要来自3个输入子块(0203、0223、0233)的数据。输出块需要的输入块在输入图像中可以是一起或分开的。输入取回块存储在芯片之外,通常在ddr存储器中。当输入块在一起时,ddr总线可以适应在一个周期中取回需要的输入块。但是,如果输入块是分开的,由于寻址约束和总线宽度,可能需要多个周期来取回输入块。对于不同的输入块,取回的延迟差异是不同的,导致性能损失和带宽利用率低。因此,对于固定的输出块大小,某些输出块比某些其他输出块需要更少的信息来被取回。输入块大小与输出块需要的输出块大小的大小的比率可以被定义为放大因子或按比例缩放因子。输出块大小的大小由最大放大因子确定。换言之,输出块大小越小,需要被取回到内部存储器的数据量就越大。内部存储器的大小是固定的,并且对于高放大因子输出块的需要被取回的数据可能需要许多周期来取回数据,从而导致高带宽使用和性能损失。因此,需要基于放大因子来编程输出块大小的大小,使得用于将输入块数据取回到内部存储器中的带宽和周期最小化,从而导致增强的性能。

图3(0300)示出了由多个照相机捕获并被拼接成输出图像的现有技术输入图像。输出图像(0310)由不同照相机从不同角度捕获的多个输入图像(0301、0302、0303、0304)合成和拼接。照相机可以安装在汽车的左前角、右前角、左后角和右后角上的仪表板上。在图3中,照相机安装在前、后、左和右上。将如此捕获的图像拼接成输出图像。但是,从不同视点捕获的多个图像包含冗余信息。例如,由中央照相机捕获的区域(0314)也由右照相机捕获在区域(0313)中并且由左照相机捕获在区域(0315)中。冗余区域被双重处理以用于拼接和处理相同的图像。由于在取回和处理冗余块时花费的周期,因此存在相当大的性能损失。因此,需要识别并跳过冗余块的处理。

图4(0400)示出了用于通过反向映射和网格数据生成输出帧缓冲区的输入帧缓冲区的现有技术几何校正框图。在输出帧缓冲区(0402)中的输出块(0403)中的每个通过几何校正引擎(0404)经历透视变换并且进行网格扭曲之后,输出帧缓冲区(0402)被映射到输入帧缓冲区(0401),以生成输入块(0405)。透视扭曲的输出可以是对应于输出块(0403)的四个角的中间块(0406)。保持对应于输出块或中间块的信息的网格表(0407)还可用于将中间块映射到输入块(0405)的四个角。现有技术的输出块具有固定的大小,因此被映射到可包含未使用数据的输入块的所有像素数据需要一起取回。因此,需要一种基于按比例缩放因子来定制输出块大小的方法。



技术实现要素:

本发明是用于几何校正失真输入帧并且生成无失真输出帧的装置和方法。装置包括:外部存储器块,其存储输入帧;计数器块,其基于区域的块大小计算该区域的输出帧的输出坐标;反向映射块,其生成对应于输出坐标中的每个的输入坐标;边界模块,其计算对应于输入坐标中的每个的输入块;缓冲区模块,其取回并存储对应于输入块中的每个的数据;插值模块,其对来自缓冲区模块的数据进行插值;以及显示器模块,其接收区域中的每个的经插值的数据并且拼接输出图像。方法包括基于放大数据确定输出块的大小;以及识别输出图像中的冗余区域。

附图说明

在所附权利要求中阐述了被认为是本发明的特征的新颖特征。然而,当结合附图阅读时,通过参考说明性实施例的以下详细描述,将最好地理解本发明本身以及优选的使用模式、其进一步的目的和优点,其中:

图1示出了几何地转换为输出帧的现有技术的失真输入帧。

图2示出了现有技术的输出帧,其被划分成对应于捕获的输入帧中的块的块。

图3示出了由多个照相机捕获并且被拼接成输出图像的现有技术的输入图像。

图4示出了用于通过反向映射和网格数据生成输出帧缓冲区的输入帧缓冲区的现有技术的几何校正。

图5描绘了根据本发明的一个方面的图2的输出块的按比例缩放数据的示例性直方图和基于按比例缩放阈值的输出帧中的输出块的按比例缩放数据的空间曲线。

图6是根据本发明的一个方面的示例性输出帧的描绘,该输出帧被划分成区域,并且区域中的每个基于按比例缩放数据被划分成具有不同大小的块。

图7示出了根据本发明的一个方面的示例性图像处理系统。

图8示出了根据本发明的一个方面的空间自适应分片装置的示例图。

图9示出了根据本发明的一个方面的透视坐标确定装置的示例图。

图10示出了根据本发明的一个方面的将输出块中的输出坐标反向映射到输入块的输入坐标和插值块的示例性框图。

图11是根据本发明的一个方面的利用空间分片装置校正输入帧并生成输出帧的方法的示例性流程图。

图12示出了根据本发明的一个方面的具有在区域中识别的冗余块的输出帧的示例图。

图13示出了根据本发明的一个方面的具有在多帧处理中在区域中跳过的冗余块的输出帧的示例图。

图14是根据本发明的一个方面的校正输入帧并且在生成输出帧和确定用于最佳近似的区域以避免图像的未使用部分时跳过冗余块的方法的示例性流程图。

图15示出了根据本发明的一个方面的输出帧中的输出块,其被动态地划分以适配和取回到内部存储器中。

图16是根据本发明的一个方面的用于动态划分输出帧中的输出块以适配和取回到内部存储器的方法的示例性流程图。

具体实施方式

虽然本发明可以有许多不同形式的实施例,但是存在在附图中示出并且在本文中将在本发明的详细优选实施例中进行描述的实施例,应当理解的是,本公开被认为是本发明的原理的示例,并且并不旨在将本发明的广泛方面限制于所示实施例。

将特别参考当前优选实施例描述本申请的许多创新教导,其中这些创新教导有利地应用于几何校正引擎的特定问题。然而,应该理解的是,该实施例仅是本文中的创新教导的许多有利用途的一个示例。通常,在本申请的说明书中作出的陈述不一定限制各个所要求保护的发明中的任何一个。此外,一些陈述可能适用于某些发明特征而不适用于其他特征。

虽然已经参考优选实施例具体示出和描述了本发明,但是本领域技术人员将理解,在不脱离本发明的精神和范围的情况下,在其中可以在形式和细节上进行各种改变。发明人期望熟练的技术人员适当地采用这些变化,并且发明人意图以不同于本文具体描述的方式实施本发明。因此,本发明包括适用法律允许的所附权利要求中所述主题的所有修改和等同物。此外,除非本文另有说明或上下文明显矛盾,否则本发明涵盖上述元素的所有可能变型的任何组合。

应当注意,术语“输出图像”和“输出帧”在下文中可互换地使用,以指示在屏幕上显示的类似于帧(0202)的图像。

应当注意,术语“输入图像”和“输入帧”在下文中可互换地使用,以指示在屏幕上显示的类似于帧(0201)的图像。

应当注意,术语“输出块大小”和“输出块的大小”在下文中可互换地使用,以表示输出帧中的输出块的大小。输出块大小由输出块宽度和输出块高度定义。术语“输出块宽度”或“输出块的宽度”在下文中可互换地使用,以表示在一行中布置的像素的数量。类似地,术语“输出块高度”或“输出块的高度”在下文中可互换地使用,以表示输出块中的行的数量。例如,输出块大小可以被定义为16x20以指示输出块宽度为16并且输出块高度为20。换言之,输出块中的在一行中布置的像素的数量是16并且块中的行的数量为20。

应当注意,术语“区域大小”和“区域的大小”在下文中可互换地使用,以表示输出帧中的区域的大小。区域大小由区域宽度和区域高度定义。区域可以包括一个或更多个输出块。例如,区域大小可以被定义为64x40以指示区域宽度为64并且区域高度为40。区域可以被划分成具有16x20的输出块大小的相等输出块。输出块大小16x20可以按4列布置,并且列中的行的数量是2。

具有按比例缩放阈值的按比例缩放数据的直方图(0500)

图5描绘了图2的输出块的按比例缩放数据的示例性直方图(0500)。在最初捕获图像之后,可以在x轴上绘制放大因子(取回的块大小与输出块大小相比的比率)对比于y轴上的块的数量的分布。在为输出图像中的输出块中的每个计算并存储放大数据之后,可以通过离线工具或利用使用hlos或rtos运行的软件绘制直方图。应当注意,术语“按比例缩放数据”、“按比例缩放因子”、“放大数据”、“放大因子”在下文中可互换地使用,以指示针对输出块的对应大小需要被取回的输入块的大小的比率。可以基于直方图(0500)确定按比例缩放阈值。例如,参考直方图(0500),计算或在某些情况下选择3个按比例缩放阈值(0501、0502和0505)。按比例缩放阈值(0501)指示按比例缩放因子约为40,并且具有按比例缩放因子40的块的数量约为5。类似地,按比例缩放阈值(0505)指示按比例缩放因子约为5,并且具有按比例缩放因子5的块的数量多于1200。现有技术的方法基于输出帧中的最高按比例缩放因子来固定输出块大小。在这种情况下,块大小基于按比例缩放因子40。较小块大小和较大按比例缩放因子的组合导致针对具有较小块大小的输出块取回不期望的输入块数据。例如,如果确定输出块大小为16x20,则具有按比例缩放因子5的输出块(“block5”)和具有按比例缩放因子40的输出块(“block40”)取回对应于按比例缩放因子40的相同最大数量的输入块大小。在这个特定的示例中,block5将取回与block40相同数量的输入块数据,即使block5需要实质上更小数量的输入数据被取回,在这种情况下小于1/8。在具有宽变化放大数据(如全景可视)的应用中,其中选择最小尺寸块大小导致额外的存储器带宽,基于本地存储器的大小和校正因子,功率增加并且性能降低50-100%。

跨输出帧的按比例缩放数据的空间曲线(0520)

根据一个优选示例性实施例,针对输出帧绘制基于按比例缩放阈值的输出块的按比例缩放数据的空间曲线(0520)。在直方图(0500)中识别的阈值使得能够基于阈值将输出帧划分成区域。如空间曲线(0520)中所示,区域(0504)表示具有最小放大因子的区域,而区域(0503)表示具有最大放大因子的区域。根据一个优选示例性实施例,基于按比例缩放因子将输出帧划分成区域。根据另一示例性实施例,输出块大小由区域内的按比例缩放因子确定。应当注意,区域内的按比例缩放因子可以基本相同。在其他情况下,区域内的按比例缩放因子可以变化并且在彼此的20%之内。在其他情况下,区域内的按比例缩放因子可以变化并且在彼此的20-40%之内。从直方图中选择的阈值的数量越多,可用块大小的数量就越多,并且将输出帧划分成具有相同按比例缩放数据的区域的灵活性就越大。

示例性空间自适应分片实施例(0600)

图6(0600)是被划分成区域的示例性输出帧的描绘,并且基于按比例缩放数据将区域中的每个划分成具有不同输出块大小的输出块。在按比例缩放阈值被识别为如直方图(0500)中所描绘的并且在空间上绘制按比例缩放数据之后,可以将输出帧划分成多个区域。该过程可以包括识别输出帧并且将输出帧空间分片成多个分片区域,同时适应变换的模式和按比例缩放数据。

应当注意,被划分成9个区域的输出帧(0600)不可以被解释为限制。在考虑到硬件限制下,输出帧可以尽可能被划分成任何数量的区域。帧可以被划分成对应于3个高度rh1、rh2和rh3的3个水平分片(0611、0612和0613),并且帧可以被划分成对应于3个宽度rw1、rw2和rw3的最多3个垂直分片(0601、0602和0603)。可以为该帧创建总共9个区域(0621-0629)。每个区域可以被编程有独立的输出块大小。对于具有较小空间变化(即按比例缩放因子)的区域,输出帧可以被编程有较大的块大小,而对于具有高空间变化的区域,可以被编程有较小的块大小。随着具有较大块大小的图像的部分增加,这可以改善带宽以及性能。例如,在全景可视应用中,对于右照相机,块大小可以从16x20到112x64变化,而对于前照相机,块大小可以从32x8到136x160变化。可以针对来自照相机中的每个的输入图像单独编程输出帧。根据一个示例性实施例,可以实现带宽节省大于40%。根据一个更优选的示例性实施例,可以实现带宽节省大于80%。根据一个最优选的示例性实施例,可以实现带宽节省大于50%。

如输出帧(0600)中所描绘的,可以利用不同的块大小对区域中的每个进行编程。具有最大按比例缩放因子(0503)的区域(0624)被划分成具有最小块大小的16个块,而具有最小按比例缩放因子(0504)的区域(0623)被划分成具有最大块大小的2个块。类似地,区域(0622)和(0621)被划分成4个块,区域(0623)、(0626)和(0629)各自被划分成2个块,区域(0625)被划分成6个块,并且区域(0628)被划分为9个块。如明确所示的,输出块在空间上被分片成具有不同块大小的区域。根据一个优选示例性实施例,输出帧中的区域中的每个的大小可以相等。根据另一个优选示例性实施例,输出帧中的区域中的每个的大小可以不相等。可以在光栅扫描模式中一次一个区域对输出帧进行合成或构造。例如,可以首先处理区域0621,然后按顺序处理区域0622、0623、0624、0625、0626、0627、0628和0629。在区域内,可以遵循光栅扫描来对该区域合成。例如,在区域0621内,首先处理块0631,然后按顺序处理块0641、0651和0661。类似地,在区域0625内,首先处理块0635,然后按顺序处理块0645、0655、0665、0675和0685。类似地,处理块0633,然后处理块0643。块中的每个的处理在下面在图11的方法流程图中进一步进行描述。根据一个示例性实施例,区域中的每个和该区域内的块中的每个的坐标,区域中的每个和该区域内的块中的每个的大小作为输入参数被编程到硬件块中以处理输出图像,如下面图8中所述。

当帧被划分成3x3区域的子集时,可以支持以下区域的组合。

3个垂直分片rw1=x,rw2=y并且rw3=z

2个垂直分片rw1=x,rw2=y并且rw3=0,最后区域宽度必须为零

1个垂直分片rw1=x,rw2=0并且rw3=0,最后两个区域宽度必须为零

3个水平分片rh1=x,rh2=y并且rh3=z

2个水平分片rh1=x,rh2=y并且rh3=0最后区域高度必须为零

1个水平分片rh1=x,rh2=0并且rh3=0最后两个区域高度必须为零

可以通过编程rw3=rh3=0来完成2x2区域分区。

示例性几何图像处理系统

图7示出了根据一个优选实施例的示例性图像处理系统(0700)。该系统包括空间分片装置块(0703)、标量块、噪声滤波器块、传感器块、共享存储器块(0704)、消息管理器(0702)、网络配置块(0701)、内部存储器(0705)、dma端口(0706)和硬件线程调度器块。

空间自适应分片装置(0703)经由ddr或片上从主端口(0707)读取输入帧,并执行透视变换以及失真(包括鱼眼镜头)校正。装置(0703)的输出可以被发送到外部存储器(ddr)或者被发送到诸如标量块或噪声滤波器块的其他硬件块,以用于经由本地共享存储器(0705)进行进一步的预处理。空间自适应分片装置(0703)的目标可以是在具有2m像素帧的每秒120帧(fps)@300mhz下操作。该性能要求可能转换为大约1.5gb的bw。为了满足1.5gb的带宽要求,读取主接口可以被限制为200个周期的最大响应延迟。

标量块从共享存储器(0704)读取数据,并且可以从2个输入生成多达10个按比例缩放的(使用范围从0.5到1的各种按比例缩放比率)输出。标量块到共享存储器(sl2)的输出可以使用噪声滤波器块进行进一步噪声滤波或被写入ddr。

噪声滤波器块将来自存储器(例如,ddr或片上)的数据读取到共享存储器(0704)并执行双边滤波以去除噪声。噪声滤波器块的输出可以从共享存储器(0704)发送到外部存储器(例如,ddr),或者可以使用标量块进一步调整大小。

共享级别2(0704)存储器块可用于跨硬件块交换数据,硬件块诸如装置(0703)、标量块和噪声滤波器块以及dma引擎(udma)。

hts(硬件线程调度器)块可以用于各种硬件块之间的ipc通信,硬件块诸如装置(0703)、标量块和噪声滤波器块以及dma引擎(udma)。消息管理器(0702)可以实施为hts。

配置管理器(0701)可以用于利用典型的网络参数对硬件进行编程。系统(0700)还可以包括典型的硬件输入,诸如时钟、复位、网络、数据和调试信号。

示例性自适应分片装置实施例(0800)

如图8所示,自适应分片装置(0800)包括:计数器块(0802),其经配置以基于区域的输出块的大小来计算区域的输出帧的输出坐标(0803);变换块(0804)和反向映射块(0806),其经配置以生成对应于输出坐标中的每个的输入坐标(0807);边界模块(0808),其经配置以计算对应于输入坐标中的每个的输入块,并且可以包括每个输出块中的每个的位移数据;缓冲区模块(0809),其经配置以取回对应于输入块中的每个的数据并将其存储在内部存储器中;以及插值模块(0810),其经配置以接收来自缓冲区模块的数据进行插值;其中,区域中的每个的经插值的数据被拼接、合成并显示在显示器模块上。外部存储器块(0801)可以存储输入帧,外部存储器在装置的外部。帧缓冲区或外部存储器块(0801)在装置(0800)的外部,并且在大多数情况下,是片外sdram或ddr存储器。外部存储器块存储对应于诸如帧(0201)的输入帧的输入块的取回数据。根据一个优选示例性实施例,利用光学设备捕获输入帧;光学设备选自以下项组成的组:广角镜头、鱼眼镜头或任何类型的汽车照相机镜头。

给定诸如图像(0600)的无失真输出图像的坐标,可以通过组合输出坐标和来自偏移表的偏移来计算失真输入图像的对应坐标。从帧缓冲区读取输入帧的失真像素,并进行缓冲以用于双线性插值。在插值之后,可以将校正的图像写回并存储到sl2共享存储器。

计数器块(0802)基于区域的输出块的大小计算区域的输出帧的输出坐标(0803)。例如,对于图6中的区域(0621),块0631的输出坐标(0803)可以包括块0631的4个角的坐标。可以通过计数器块基于包括帧宽度和帧高度的输出帧大小来计算坐标。可以假设坐标(0,0)(在装置中可编程的帧起始坐标)作为帧的左角,并且可以计算区域中的每个和该区域中的块中的每个的坐标。提供给分片装置的诸如区域宽度和区域高度、块大小和块宽度的输入参数可以进而输入到计数器块中。根据一个优选示例性实施例,装置的输入参数包括输出帧宽度和输出帧高度、区域宽度和区域高度;区域内的输出块宽度和输出块高度。计数器块可以将输出坐标(0803)计算为(huvu)。

为了在时间和帧缓冲区流量方面高效地执行几何校正,硬件处理小输出块中的输出帧。在hlos或rtos上运行的软件可以配置适当的参数,然后通过写入硬件中的控制寄存器来启动空间自适应分片功能。硬件可以存储和维持用于存储控制和数据信息的一组寄存器。硬件通过输出块、dma传输和计算来控制排序,以自主处理整个图像。如果启用了中断,则在输出图像的处理和合成完成时断言(assert)该中断。

还可以通过外部控制器在宏块的基础上停顿和控制硬件。装置(0800)可以提供中间中断以促进硬件的停顿。可以通过在输出写入端口上断言写入请求启用来实现停顿装置(0800)。

当照相机从两个不同位置观看场景时或当多个照相机从不同位置观看场景时,需要在两个视角之间进行变换以对齐图像。在特定条件下,称为“单应性”或平面透视变换的几何变换类将准确地捕获图像之间的几何关系。单应性变换的常见应用是对齐(或拼接)相同场景的多个帧以计算全景输出图像。第二个应用是世界中平面表面的对齐。最后,透视变换在从立体图像对计算深度图时也是有用的。通过修正两个视图,计算两个视图之间的视差的搜索被简化为1-d搜索问题。单应性由3x3变换矩阵定义,如

haff=a*hu+b*vu+c----(1)

vaff=d*hu+e*vu+f-----(2)

z=g*hu+h*vu+1------(3)

hp=haff/z

vp=vaff/z

仿射变换是透视变换的子集。通过设置g=h=0,hp=haff和vp=vaff。从目标坐标到源坐标的映射表示为

haff=a*hu+b*vu+c

vaff=d*hu+e*vu+f

其中hu和vu是源坐标的水平和垂直坐标,而heff和veff是目标坐标的水平和垂直坐标。a、b、c和f是相关和变换因子。

在图像对齐应用中,可以通过定位两个帧中的对应点并估计矩阵参数来计算单应性矩阵,以将一个帧中的点集变换到第二帧中的对应点。在立体校正应用中,在校准步骤确定(预先计算)矩阵并保持固定。

在ycbcr模式中,偏移表(0808)定义用于输出点的规则网格的(□x,□y)矢量。可以对网格进行完全采样或下采样。完全采样的网格将为每个输出像素定义偏移矢量,定义了取回输入数据的位置以计算输出像素。这是最精确的定义,并且可以捕获快速变化的偏移表。缺点是它将需要大量的存储器带宽,因为几何校正引擎将读取每个输出像素的偏移值。由于预期大多数偏移表在小空间区域中不会快速变化,因此可以读取子采样偏移表。偏移表可以在水平和垂直方向两者上以2的幂次数进行子采样,并且子采样因子在寄存器中设置。此模式通过减少经读取以描述偏移矢量的数据量来节省存储器带宽,但需要更多硬件来对丢失的偏移矢量进行插值。

xi=xo+δx

yi=yo+δy

来自计数器块的输出坐标(0803)(huvu)可以被输入到透视变换块(0804),并且在使用上述等式(1、2、3)中的任何一个进行变换之后,变换的输出坐标(0805)(hpvp)可以被输入到网格映射块(0806)。如果在多路复用块(0815)中启用了反向映射,则由反向映射块计算的坐标(0807)(hd,vd)被输入到缓冲区块(0809)。如果在多路复用块(0815)中未启用反向映射,则由透视变换块(0804)计算的坐标(0805)(hp,vp)被输入到缓冲区块(0809)。

图9(0900)和图10(1000)示出了根据一个优选实施例的示例性网格映射和反向映射块。透视变换块(0804)对输出块的4个角进行透视扭曲以找出要取回的网格块。对诸如坐标(0911)的网格映射块(0806)的输入坐标(0805)(hpvp)进行子采样。计算矩形边界框,使得它包含由透视扭曲块生成的4个角像素(子采样的)引用的网格点。可以进行双线性插值以将网格子采样上采样到像素坐标精度。对于网格双线性插值,可以取回右侧的一个额外列和底部的一个额外列。对于给定的输出块(0920),计算诸如左上角的0911的透视扭曲坐标,并且在子采样网格点(0901、0902、0903、0904)之后生成边界框(0930)。在添加缓冲区之后,生成最终输出网格块(0940)。

一旦网格块取回完成,通过在先前计算的透视扭曲角像素坐标上应用反向映射来计算最终输入坐标。基于插值类型,在这些反向映射角坐标的顶部应用附加填充。

由硬件计算的边界框可能不会覆盖生成特定输出块需要的所有输入数据是可能的。在这种情况下,软件可以应用额外的pixelpad,在所有方向上的输入块中的填充量。对于具有obwxobh大小的输出块中的每个输出像素,需要的输入像素确实受到4个角的反向映射加上/减去填充的限制。更确切地,输入块可以通过以下等式确定:

ibx_start=min(truncate(distortx(corner1)),truncate(distortx(corner3)))–hw_pad-pixelpad

ibx_end=max(truncate(distortx(corner2)),truncate(distortx(corner4)))+hw_pad+pixelpad

iby_start=min(truncate(distorty(corner1)),truncate(distorty(corner2)))-hw_pad-pixelpad

iby_end=maxn(truncate(distorty(corner3)),truncate(distorty(corner4)))+hw_pad+pixelpad

其中corner1、corner2、corner3和corner4是obwxobh输出块的左上、右上、左下和右下角,并且distortx(.)、distorty(.)是在相应的扭曲和反向映射之后的角的x和y坐标。

对于几何失真校正,pixelpad被清零以适应所有颜色的相邻组。软件可以设置pixelpad,使得输入块的信息不被丢弃。根据一个优选示例性实施例,边界模块进一步经配置以将缓冲区像素填充添加到输入块中的每个中,从而增加输入块的大小。

可以将obh和obw选择为相当大以用于自适应分片和几何校正操作的高效操作。根据一个优选示例性实施例,区域宽度范围从4到8094;并且区域高度范围从2到8094。根据一个优选示例性实施例,输出块宽度范围从4到254;并且输出块高度范围从2到254。obw受约束以确保高效的外部存储器写入。另一个约束是输入块大小,对于图像的每个输入块,分配的输入缓冲区需要适应而不会溢出。如果参数obh、obw设置得太小或pixelpad太大,性能可能会降低,并且可能发生意外和不期望的外部存储器传输。

可以利用离线工具程序来编程和配置装置(0800)。给定偏移表内容、处理参数和最大输入缓冲区大小,程序计算obw、obh和pixelpad的最佳集合,以最小化输入带宽。可以为另一个工具提供c函数模型,其计算在给定配置的情况下的最小pixelpad和具有obw(输出块宽度)和obh(输出块高度)的处理块大小。

可以利用硬件来处理图像的一部分,而不是整个图像。这允许图像通过多个软件/硬件交互来处理以仅校正图像的一部分以节省时间。

还可以在每个宏块输出写入完成时提供中间中断。这允许几何校正操作与其他任务一起流水线化。装置(0800)在该事件之后输出写入停顿,等待启动信号上的脉冲以开始写入下一个宏块。

由于在大多数情况下由反向映射块(0806)计算的坐标(0807)(hd,vd)不是整数值,所以利用插值块(0810)将双三次或双线性插值应用到失真像素。也可以应用其他插值技术。根据一个优选示例性实施例,利用双三次或双线性插值对插值数据进行插值。根据寄存器配置,使用双三次或双线性插值来对输出y像素进行插值。在双三次插值的情况下,失真输入像素从失真输入位置周围的4x4网格中的16个y像素进行插值,如图6所示。首先沿水平方向,然后沿垂直方向使用双三次插值。图10(1020)示出了输出块(1022)中的数据(1021)的双三次插值。经插值的数据可以通过接口(0814)进一步被存储在存储器(0813)中。在确定与要取回的输入块对应的输入坐标之后,通过缓冲区接口(0811)将输入块取回到缓冲区(0809)中的内部存储器中。根据一个优选示例性实施例,内部存储器的大小范围从10kb到100kb。在某些情况下,内部存储器的大小范围从1kb到100kb。在其他情况下,内部存储器的大小范围从10kb到50kb。

图10(1000)描绘了在透视映射和反向映射之后的示例性输出坐标到输入坐标。根据一个优选示例性实施例,输出坐标包括输出帧/区域中块的四个角的坐标。还可以提供角中的每个的各个坐标作为输出坐标。根据一个优选示例性实施例,输入坐标包括在输出坐标的透视变换和反向映射之后的输入帧中的块的四个角的坐标。还可以提供角中的每个的各个坐标作为输入坐标。由角1001、1002、1003和1004定义的输出块分别被映射到输入块角1011、1012、1013和1014。最终输入块大小利用大小(1005)填充,使得取回更大的输入块(1010)并且在最终输出图像中不丢失信息。根据一个优选示例性实施例,通过经配置以滤波、降低噪声、按比例缩放和格式化的模块来进一步处理经插值的数据。根据另一个优选示例性实施例,输出帧被显示在显示器设备上;显示器设备选自以下项组成的组:汽车显示器、led监视器、电视屏幕和lcd监视器。根据一个优选示例性实施例,在区域中的每个块内和每个区域内,在光栅扫描模式中处理输出帧。

利用空间自适应装置方法的输入帧的示例性几何校正(1100)。

如在图11(1100)的流程图中总体看到的,一种优选示例性几何校正方法可以根据以下步骤被总体上进行描述:

1)分配输出帧的大小并且将输出帧划分成块;块中的每个具有块大小;块大小具有宽度和高度;宽度基于在一行中布置的像素;高度基于行的数量(1101);

如图2中所述,可以基于将被显示在屏幕上的帧分配输出帧的大小。软件或实用程序可以利用帧大小确定、分配和配置硬件寄存器,帧大小包括帧宽度和帧高度。例如,4k的输出帧的显示可以被分派为3840x2160。在另一个示例中,可以分派1920x1080或2兆像素的hd显示。

2)利用光学设备捕获输入图像(1102);

捕获的图像可以与各个取回块一起被存储在外部存储器中。

3)将输出帧中的块中的每个反向映射为对应于输入图像中的块(1103);

软件或工具可以确定并且识别对应于输出块中的每个的取回块。

4)量化输出帧中的块中的每个的按比例缩放数据(1104);

可以基于直方图(0500)确定按比例缩放阈值。例如,参考直方图(0500),3个按比例缩放阈值(0501、0502和0505)被计算或在某些情况下被选择。按比例缩放阈值(0501)指示近似40的按比例缩放因子,并且具有按比例缩放因子40的块的数量近似5。类似地,按比例缩放阈值(0505)指示近似5的按比例缩放因子,并且具有按比例缩放因子5的块的数量超过1200。

5)从输出帧的按比例缩放数据生成直方图(1105);

放大因子(取回的块大小与输出块大小的比率)的分布可以对比于块的数量而被绘制在x轴上。在放大数据被计算并且针对输出图像中的输出块中的每个被存储之后,直方图可以通过离线工具或者利用使用hlos或rtos运行的软件绘制。

6)从直方图识别按比例缩放阈值(1106);

7)利用按比例缩放数据和按比例缩放阈值绘制输出帧的空间域曲线(1107);

基于按比例缩放阈值的输出块的按比例缩放数据的空间曲线(0520)可以针对输出帧被绘制。

8)基于空间域曲线和按比例缩放阈值,将输出帧划分成区域(1108);

9)基于区域内的按比例缩放阈值和按比例缩放数据,计算区域中的每个并将其划分成输出块(1109);

在考虑硬件限制下,输出帧可以被尽可能地划分成任何数量的区域。例如,帧可以被划分成最多3个水平分片(0611、0612和0613)和3个垂直分片(0601、0602和0603),总共9个区域(0621-0629)。每个区域可以被编程有独立的输出块大小。针对具有更少空间变化(即,按比例缩放因子)的区域,输出帧可以被编程有较大的块大小,并且针对具有更高空间变化的区域,输出帧可以被编程有较小的块大小。随着具有较大块大小的图像的部分增加,这可以改善带宽以及性能。例如,在全景可视应用中,块大小可以对于右照相机从16x20到112x64变化,并且对于前照相机从32x8到136x160变化。

10)利用区域中的每个的大小和区域中的每个中的输出块中的每个的大小,对空间自适应分片装置进行编程(1110);以及

例如,输出块大小可以被定义为16x20以指示输出块宽度为16并且输出块高度为20。换言之,输出块中在一行中布置的像素的数量是为16并且块中的行的数量为20。区域大小由区域宽度和区域高度定义。区域可以包括一个或更多个输出块。例如,区域大小可以被定义为64x40以指示区域宽度为64并且区域高度为40。区域可以被划分成相等的输出块,具有16x20的输出块大小。输出块大小16x20可以被布置到4列中,并且列中的行的数量为2。

11)几何校正跨输出帧的区域中的每个的输入帧,在图形设备上合成并显示输出帧(1111)。

图12示出根据一个优选实施例的具有在区域中识别的冗余块的输出帧的示例性图(1200)。输出帧可以被划分成区域(1201、1202、1203、1204、1205、1206、1207、1208和1209)。区域可以大小相等或不相等。区域可以进一步包括输出块。根据一个优选的示例性实施例,可以利用方法(1100)划分输出帧。利用多个照相机捕获输入图像,并且从输入图像混合和拼接输出图像。位置或物体的输入图像可以通过照相机或具有特定视野的任何光学设备捕获。另一个输入图像可以通过照相机或具有特定视野的任何光学设备捕获,其中照相机被安装在不同位置。类似地,多个输入图像可以利用安装在不同位置的不同的照相机捕获,并且从不同的视野捕获相同的输入图像。例如,在图3中,图像0301、0302、0303和0304分别利用安装在汽车的前方、左侧、右侧和尾部的照相机捕获。输入图像的形状还可以是任意的。根据一个优选的示例性实施例,输出图像可以被成形为矩形,尽管任意形状的输入图像可以被成形。从不同视点捕获的多个图像包含冗余信息。例如,由中央照相机捕获的区域(0314)也由左侧照相机被捕获在区域(0313)中以及由右侧照相机被捕获在区域(0315)中。类似地,在图12中,区域1204、1205和1206包含冗余区域。识别的冗余区域中的每个可以包含一个或更多个有效块和一个或更多个冗余块。冗余块被重复地处理以用于拼接和处理相同的图像。由于花费周期取回和处理冗余块,所以存在大量的性能损失。根据一个优选的示例性实施例,一种示例性装置识别并且跳过冗余块的处理。

由于冗余性,帧中的一些区域可以不用于拼接最后的帧。通过对寄存器进行编程以禁用该区域的处理,硬件跳过被识别为冗余的特定区域的处理。可以发送关于最后有效区域的最后像素的帧完成信号。如图12中所示的示例,区域1204、区域1205和区域1206被跳过处理。可以传递关于区域1207的最后像素的帧完成信号。区域的排序和编号将保持相同,即使在跳过某些区域的情况下。

输出图像(1303)的一部分(1301)可以被处理,同时某些区域被跳过,下面的参数可以被编程到装置(诸如,装置(0800))中。

·initx输出帧的左上角的x坐标

·inity输出帧的左上角的y坐标

·framew输出计算帧的宽度

·frameh输出计算帧的高度

·framebase输出帧的左上角的sdram地址(在ycbcr420的情况下可能需要y和cb/cr基础)。

·frameofstsdram帧宽度(以字节为单位)

在一些实施例中,framew可以是obw的倍数,frameh可以是obh的倍数,并且framebase可以是64(字节地址)的倍数。

图13(1300)示出多通(multiple-pass)处理的一个示例性优选实施例,其中中间图像以8位格式被跳过。装置(0800)不将从输入帧跳过的块复制到输出帧,并且软件或工具可以设置并且启动有效区域的存储器复制。输入帧的起始地址对应于输入坐标(0,0),也可以被指定为寄存器。如果输入块中的任何一个落入输入帧外,则装置(0800)可以将该输入块裁剪为输入帧大小。装置(0800)可以充当任意形状的装置以用于方法(1400),其中计数器块的输出坐标(0803)(huvu)被禁用以用于被跳过的区域。类似地,装置(0800)可以充当动态分区装置以用于方法(1600),使得在划分后对应于块的坐标被输入到计数器块、被编程到计数器块,并且从计数器块生成输出坐标(0803)(huvu)。

输入帧的示例性几何校正方法(1400)。

如图14(1400)的流程图中总体看到的,可以根据以下步骤总体上描述用于利用任意形状的装置(0800)进行输入帧的几何校正以生成输出帧的一种优选示例性方法:

1.利用多个光学设备捕获任意形状的输入图像(1401);

2.处理利用多个光学设备捕获的图像中的每个(1402);

3.识别区域中的每个中的冗余块和有效块(1403);

4.利用输出帧大小分配输出帧,并且将输出帧划分为区域,该区域成形为矩形(1404);

在找到未使用的块之后确定区域以用于未使用的块到被跳过的区域的最佳映射。

5.对装置进行编程并且禁用冗余区域中的每个的处理(1405);以及

6.对包含有效块的区域中的每个的输出帧进行合成(1406)。

图15(1500)示出根据一个优选示例性实施例的输出帧中的输出块,其被动态划分以适配并且取回到内部存储器中。来自外部存储器的帧缓冲区中的对应于输出块(1501)的输入缓冲区可以被取回到内部存储器。根据一个示例性实施例,如果对应于输出块(1501)的输入块(1502)的大小适配内部存储器(1512),则输入块(1502)被取回到内部存储器。在这种情况下,可以不需要输入块的动态划分。例如,如果输入块的大小是640x20并且内部存储器的大小是12800字节,则输入块在一个取回事务或周期中被完整取回。根据另一个优选示例性实施例,如果对应于输出块(1501)的输入块的大小大于内部存储器的大小,则输入块通过将输出块划分成子块而被计算。如果每个子输入块的大小小于内部存储器的大小,则子块可以各自单独被取回或者一起被取回到内部存储器。同样,如果任何子输入块的大小大于内部存储器的大小,则子输出块进一步被划分直到在计算和划分之后子输入块的大小小于内部存储器的大小,使得在划分之后的每个子输入块被取回到内部存储器。例如,如果输入块(1502)的大小是640x20并且内部存储器的大小是6400字节,则输出块可以被动态划分成两个子块(1503和1513),使得子块的大小各自为适配内部存储器的640x10。如果内部存储器的大小是3200字节,则划分后的子块进一步被动态划分成子块(1514、1524、1534和1544)。子块的划分可以是水平的或垂直的。换言之,输入块的高度可以按照水平划分进行划分,并且输入块的宽度可以按照垂直划分进行划分。在其他示例中,内部存储器可以是固定的,而输入块大小可以在块之间变化,其中在给定帧中,一些输入块较大,而一些输入块较小。

如图16(1600)的流程图中总体看到的,可以根据以下步骤总体上描述用于利用动态分区装置(0800)进行输入帧的几何校正以生成输出帧的一种优选示例性方法:

1.利用输出帧大小分配输出帧并且将输出帧划分成块;输出块中的每个具有输出块大小;输出块大小具有宽度和高度;宽度基于布置在一行中的像素;高度基于行的数量(1601);

2.利用光学设备捕获输入图像(1602);

3.将输出帧中的输出块中的每个反向映射到输入图像中的输入块(1603);

4.计算对应于每个输出块的输入图像中的输入块的大小(1604);

输入块计算可以按以下处理序列发生。对于每个输出块,下列步骤按顺序完成。

1.计算输入块。

2.取回输入块(假设大小适配内部存储器)。

3.处理像素并且写出。

上述步骤(1-3)按每个输出块的序列执行。

5.对于输出块中的每个,核查输入块的大小与内部存储器的大小(1605);

6.如果输入块的大小小于内部存储器的大小,则利用输入参数对装置进行编程,将输入块取回到内部存储器并且在步骤(1605)中处理下一个输出块,直到所有输出块被处理,并且进行到步骤(1609);否则,进行到步骤(1605)(1606);

例如,如果输入块的大小是640x20并且内部存储器的大小是12800字节,则输入块在一个取回事务或周期中被完整取回,否则可以执行步骤(1607)。

7.将输出块相等地划分成子块,并且核查子块的大小是否小于内部存储器的大小;如果子块的大小小于内部存储器的大小,则利用输入参数对装置进行编程,将输入块取回到内部存储器,处理子块中的每个并且在步骤(1605)中处理下一个输出块,直到所有输出块被处理,并且进行到步骤(1609);否则,进行到步骤(1608)(1607);

例如,如果输入块的大小是640x20并且内部存储器的大小是6400字节,则输入块被划分成子块。子块的大小小于或等于内部存储器的大小,子块被取回到内部存储器并且被按顺序处理以生成输出块。

8.进一步进行划分直到被划分的子块的大小小于内部存储器的大小,利用输入参数对装置进行编程,将输入块取回到内部存储器,按顺序处理被划分的子块中的每个,并且在步骤(1605)中处理下一个输出块,直到所有输出块被处理(1608);以及

9.针对输出帧中的块中的每个,对输出帧进行合成(1609)。

系统概述

本系统可以广义地被总结为一种装置,包括:

a)计数器块,其经配置以基于区域的输出块的大小,计算区域的输出帧的输出坐标;

b)变换和反向映射块,其经配置以生成对应于输出坐标中的每个的输入坐标;

c)边界模块,其经配置以计算对应于输入坐标中的每个的输入块;

d)缓冲区模块,其经配置以取回对应于输入块中的每个的数据,并将其存储在内部存储器中;以及

e)插值模块,其经配置以对接收来自缓冲区模块的数据进行插值;

其中区域中的每个的经插值的数据被拼接、合成并且显示在显示器模块上。

该总体系统概述可以通过本文描述的各种元素得到增强,以产生与该总体设计描述一致的各种发明实施例。

方法概述

本方法可以广义地被总结为一种用于利用空间自适应分片装置几何校正输入图像并且生成输出帧的方法,其中:

方法包括步骤:

a)分配输出帧的大小并且将输出帧划分成块;块中的每个具有块大小;块大小具有宽度和高度;宽度基于布置在一行中的像素;高度基于行的数量;

b)利用光学设备捕获输入图像;

c)将输出帧中的块中的每个反向映射为对应于输入图像中的块;

d)量化输出帧中的块中的每个的按比例缩放数据;

e)从输出帧的按比例缩放数据生成直方图;

f)从直方图识别按比例缩放阈值;

g)利用按比例缩放数据和按比例缩放阈值绘制输出帧的空间域曲线;

h)基于空间域曲线和按比例缩放阈值,将输出帧划分成区域;

i)基于区域内的按比例缩放阈值和按比例缩放数据,计算区域中的每个并将其划分成输出块;

j)利用区域中的每个的大小和区域中的每个中的输出块中的每个的大小,对空间自适应分片装置进行编程;以及

k)几何校正跨输出帧的区域中的每个的输入帧,在图形设备上合成并显示输出帧。

取决于若干因素,该总体方法可以被进行重大修改,其中重新布置和/或添加/删除的步骤被本发明的范围预期。,将此和与本文描述的各种优选示例性实施例系统结合的其他优选示例性实施例方法集成被本发明的总体范围预期。

系统/方法变体

本发明的实施例预期基本构造主旨内的各种范围的变体。先前呈现的示例不表示可能使用的整体范围。它们意味着阐述几乎无限可能中的一些。

该基本系统、方法和方法限定的产品可以利用各种辅助实施例得到增强,包括但不限于:

一种实施例,其中光学设备选择以下项组成的组:广角镜头、鱼眼镜头和汽车照相机镜头。

一种实施例,其中捕获输入图像的步骤进一步包括将输入图像存储在外部存储器中。

一种实施例,其中反向映射的步骤进一步包括:生成对应于输出帧中的块中的每个的输入坐标;输入坐标进一步包括输入帧中的像素信息。

一种实施例,其中输出帧的大小经配置具有输出帧高度和输出帧宽度;输出帧高度范围从8到8094;并且输出帧宽度范围从8到8094。

一种实施例,其中步骤中的行中的像素的数量范围从8到8094。

一种实施例,其中步骤中的行中的行的数量范围从8到8094。

一种实施例,其中反向映射的步骤进一步包括:识别块中的每个的输出角;在角中的每个上执行透视变换;在透视变换之后,使用反向映射找出对应于输出角的输入角。

一种实施例,其中量化按比例缩放数据的步骤进一步包括:确定输出帧中的块中的每个需要取回的输入块的数量。

一种实施例,其中识别按比例缩放阈值的步骤进一步通过利用相似的按比例缩放数据对输出块进行分组而得到确定。

一种实施例,其中将输出帧划分成区域的步骤进一步包括:利用相同的按比例缩放数据对输出块进行分组使得区域中的每个的大小被最大化。

一种实施例,其中对空间自适应分片装置进行编程的步骤进一步包括:将区域中的每个的大小和块中的每个的大小写入寄存器组中的寄存器;寄存器组被维持在装置的内部存储器中。

一种实施例,其中区域中的每个的大小通过区域宽度和区域高度确定;区域宽度范围从8到8094;并且区域高度范围从8到8094。

一种实施例,其中区域中的每个中的输出块中的每个的大小通过输出块宽度和输出块高度确定;输出块宽度范围从4到254;并且输出块高度范围从2到254。

一种实施例,其中校正输出帧的步骤进一步包括:在光栅扫描模式中校正区域中的块中的每个并且在光栅扫描模式中移动到下一个区域。

一种实施例,其中显示输出帧的步骤进一步包括:在没有使得内部存储器溢出的情况下,针对输出块中的每个,将输入块取回到内部存储器中。

本领域技术人员将认识到,基于在以上发明描述内教导的元素的组合,其他实施例是可能的。

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