任何世界视图生成的制作方法

文档序号:25353727发布日期:2021-06-08 14:14阅读:101来源:国知局
任何世界视图生成的制作方法

1.本发明的领域一般而言涉及透视图生成和图像渲染。


背景技术:

2.许多类型的车辆利用一个或多个相机来捕获、显示和/或记录车辆周围的图像和/或视频,以辅助驾驶、导航或其它任务。此外,除了其它可能性之外,相机还广泛地用于监视、安全或娱乐的各种其它实际应用中,以记录特定环境的图像和/或视频。但是,出于实际原因,将相机安装在期望从其记录图像或视频的特定位置可能是困难的或成本高昂的。因此,期望在该领域进行改进。


技术实现要素:

3.描述了用于从多个输入图像渲染输出图像的任何世界视图(any world view)系统和方法的各种实施例,其中输出图像是来自与位置对应的角度,该位置与从中拍摄输入图像的多个位置中的每个位置不同。
4.在一些实施例中,接收多个输入图像,并且从不同的第一位置拍摄每个输入图像。可以接收用于渲染输出图像的视图规范,并且该视图规范包括至少第二位置。在一些实施例中,第一位置和第二位置可以各自由全局坐标系中的三个空间坐标(例如,(x,y,z))指定。视图规范还可以包括姿势规范中的一个或多个,姿势规范包括方位角和/或极角、视场(例如,缩放或放大)、投影表面深度、一个或多个投影表面参数、像素分辨率和混合宽度。
5.第二位置可以与第一位置中的每个第一位置不同。可以至少部分地基于多个输入图像和视图规范来渲染输出图像,并且输出图像可以包括如从第二位置看到的区域的图像。例如,第二位置可以是用于渲染输出图像的“虚拟位置”,即使该位置处可能没有相机。
6.在一些实施例中,确定投影表面,并且至少部分地基于多个输入图像渲染输出图像包括:将多个输入图像的像素映射到投影表面上,以及将投影表面上的位置映射到输出图像的像素。可以确定投影表面以近似用于获取多个输入图像的相机的周围环境。
7.在一些实施例中,至少部分地基于多个输入图像和视图规范渲染输出图像包括:对于输出图像的多个像素块中的每个像素块,确定沿着相应像素块的周边的多个像素与所述输入图像中的一个或多个输入图像中的每个输入图像的多个对应像素之间的映射。例如,沿着相应像素块的周边的多个像素可以是正方形像素块的四个角像素。对于一个或多个输入图像中的每个输入图像以及对于输出图像的多个像素块中的每个像素块,可以对位于输入图像的对应像素的周边内的像素执行到输出图像中的相应像素的投影映射,并且,所述投影映射可以至少部分地基于沿着相应像素块的周边的多个像素与一个或多个输入图像的多个对应像素之间的映射。
8.输出图像可以显示在显示器上。在一些实施例中,基于一系列相应的多个输入图像重复地渲染一系列输出图像,并且该系列输出图像被实时地显示在显示器上以产生实时视频。输出图像和/或输出视频可以用作另一个应用的输入(例如,用于进一步处理),和/或
输出可以存储在存储介质上。
9.本方面内容旨在提供对本文档中描述的一些主题的简要概述。因此,将认识到,上述特征仅是示例,并且不应被解释为以任何方式缩小本文描述主题的范围或精神。根据以下具体实施方式、附图说明和权利要求,本文描述的主题的其它特征、方面和优点将变得显而易见。
附图说明
10.当结合以下附图考虑优选实施例的以下详细描述时,可以更好地理解本发明,其中:
11.图1是根据一些实施例的高级驾驶员辅助系统(adas)平台的示意图;
12.图2a是根据一些实施例的从附接到车辆的四个相机获取的原始相机数据的图示;
13.图2b是根据一些实施例的从图2a所示的原始相机数据产生的双视图输出图像的图示;
14.图2c是根据一些实施例的从车辆上方和后面的视点看从图2a所示的原始相机数据产生的输出图像的图示;
15.图3是图示根据一些实施例的用于从多个输入图像渲染输出图像的方法的流程图;
16.图4是图示根据一些实施例的用于确定投影表面的方法的流程图;
17.图5是图示根据一些实施例的用于执行逐块输出图像渲染的方法的流程图;
18.图6是图示根据一些实施例的用于从多个输入图像校准和渲染输出图像的高级数据流的示意图;
19.图7是根据一些实施例的等角和针孔相机投影模型的图示;
20.图8是根据一些实施例的使用针孔相机模型的原始等角(鱼眼)镜头图像和重投影图像的图示;
21.图9是根据一些实施例的世界坐标系中的对象点到图像点的重投影的图示;
22.图10是根据一些实施例的视图图像点到源图像的重投影的图示;
23.图11是根据一些实施例的在地平面上的对象点的深度的图示;
24.图12是根据一些实施例的汽车周围的圆柱形投影表面模型的图示;
25.图13图示了根据一些实施例的映射到两个鱼眼源图像的视图图像块的网格;
26.图14是根据一些实施例的以javascript
tm
对象通知(json)文件格式的用于blocklnfo的代码结构的伪代码;
27.图15是图示根据一些实施例的作为c/c++结构的用于blocklnfo的代码结构的伪代码;
28.图16是图示根据一些实施例的以json文件格式的用于camdata的代码结构的伪代码;
29.图17是根据一些实施例的世界坐标系的标称朝向的俯视图;
30.图18是图示根据一些实施例的以json文件格式的用于viewspec的代码结构的伪代码;
31.图19是根据一些实施例的相对于汽车上的相机的方位角和高度角的图示;
32.图20图示了根据一些实施例的来自相机校准处理的第一验证图像;
33.图21图示了根据一些实施例的来自相机校准处理的第二验证图像;
34.图22是根据一些实施例的从三个源相机渲染的后视输出图像;
35.图23是图示根据一些实施例的用于两芯片设计的资源分配的并行处理硬件图;
36.图24是图示根据一些实施例的用于芯片三的资源分配的并行处理硬件图;
37.图25是根据一些实施例的用于三芯片设计的示意性数据流程图;
38.图26是根据一些实施例的用于芯片1和芯片2的示意性数据流程图;
39.图27是根据一些实施例的去马赛克组单元格(cell)的内部结构的示意图;
40.图28是根据一些实施例的用于芯片3的示意性数据流程图;
41.图29是根据一些实施例的用于光度对准的示意性数据流程图;
42.图30是图示根据一些实施例的多处理器系统(mps)的一个实施例的框图;
43.图31是图示根据一些实施例的mps连接方案的一个实施例的框图;
44.图32是根据一些实施例的mps架构的一个实施例的更详细的图;以及
45.图33图示了根据一些实施例的根据图32的体系架构示例的由均匀地散布有dmr(圆形)的pe(正方形)组成的示例mps。
46.虽然本发明易于进行各种修改和替代形式,但是在附图中以示例的方式示出了本发明的具体实施例,并且在本文对其进行了详细描述。但是,应该理解的是,附图及其详细描述并非旨在将本发明限制为所公开的特定形式,相反,其意图是涵盖落入如由所附权利要求书定义的本发明的精神和范围内的所有修改、等同形式和替代形式。
具体实施方式
47.通过引用并入
48.以下参考文献通过引用整体并入本文,如同在本文完全和完整阐述一样:
49.术语
50.以下是在本申请中使用的术语的词汇表:
51.存储器介质

各种类型的存储器设备或存储设备中的任何一种。术语“存储器介质”旨在包括安装介质,例如,cd

rom、软盘或带设备;计算机系统存储器或随机存取存储器,诸如dram、ddr ram、sram、edo ram、rambus ram等;或非易失性存储器,诸如磁性介质,例如,硬盘驱动器、光学存储装置或rom、eprom、flash等。存储器介质也可以包括其它类型的存储器,或其组合。另外,存储器介质可以位于其中执行程序的第一计算机中,和/或可以位于通过诸如互联网之类的网络连接到第一计算机的第二不同计算机中。在后一种情况下,第二计算机可以向第一计算机提供程序指令以供执行。术语“存储器介质”可以包括两个或更多个存储器介质,其可以驻留在不同的位置,例如,在通过网络连接的不同的计算机中。
52.载体介质

如上所述的存储器介质,以及物理传输介质,诸如总线、网络和/或其它传递诸如电信号或光信号之类的信号的物理传输介质。
53.可编程硬件元件

包括各种硬件设备,该硬件设备包括经由可编程或硬连线互连连接的多个可编程功能块。示例包括fpga(现场可编程门阵列)、pld(可编程逻辑设备)、fpoa(现场可编程对象阵列)和cpld(复杂pld)。可编程功能块的范围可以从细粒度(组合逻
辑或查找表)到粗粒度(算术逻辑单元或处理器核心)。可编程硬件元件也可以被称为“可重新配置逻辑”。
54.专用集成电路(asic)

该术语旨在具有其普通含义的全部广度。术语asic旨在包括为特定应用定制的集成电路,而不是通用的可编程设备,但是asic可以包含可编程处理器核心作为构建块。蜂窝电话处理器、mp3播放器芯片和许多其它单功能ic是asic的示例。通常以诸如verilog或vhdl之类的硬件描述语言描述asic。
55.程序

术语“程序”旨在具有其普通含义的全部广度。术语“程序”包括1)可以存储在存储器中并且可由处理器执行的软件程序,或者2)可用于配置可编程硬件元件或asic的硬件配置程序。
56.软件程序

术语“软件程序”旨在具有其普通含义的全部广度,并且包括可以存储在存储器介质中并由处理器执行的任何类型的程序指令、代码、脚本和/或数据或其组合。示例性软件程序包括用基于文本的编程语言,例如,命令式或过程式语言,诸如c、c++、pascal、fortran、cobol、java、汇编语言等;图形程序(用图形编程语言编写的程序);汇编语言程序;已编译成机器语言的程序;脚本;以及其它类型的可执行软件编写的程序。软件程序可以包括两个或更多个以某种方式互操作的软件程序。
57.硬件配置程序

例如网表或位文件的程序,其可以用于对可编程硬件元件或asic进行编程或配置。
58.计算机系统

各种类型的计算或处理系统中的任何一种,包括个人计算机系统(pc)、大型计算机系统、工作站、网络电器、互联网电器、个人数字助理(pda)、网格计算系统或其它设备或设备的组合。一般而言,术语“计算机系统”可以广义地定义为包括具有至少一个执行存储器介质中的指令的处理器的任何设备(或设备的组合)。
59.自动

指由计算机系统(例如,由计算机系统执行的软件)或设备(例如,电路系统、可编程硬件元件、asic等)执行的动作或操作,而无需用户直接指定或执行动作或操作。因此,术语“自动地”与其中用户提供输入以直接执行操作的由用户手动执行或指定的操作相反。自动过程可以通过用户提供的输入来发起,但是“自动”执行的后续动作不是用户指定的,即,不是其中用户指定要执行的每个动作来“手动”执行的。例如,通过选择每个字段并提供指定信息的输入(例如,通过键入信息、选择复选框、单选按钮等)来填写电子表单的用户是在手动填写表单,即使计算机系统可以响应于用户动作来更新表单。表单可以由计算机系统自动填写,其中计算机系统(例如,在计算机系统上执行的软件)分析表单的字段并填写表单,而无需指定字段的答案的任何用户输入。如上所述,用户可以调用表单的自动填写,但不参与表单的实际填写(例如,用户不是手动指定字段的答案,而是这些字段被自动完成)。本说明书提供了响应于用户已采取的动作而自动执行的操作的各种示例。
60.缩略语的定义
61.[0062][0063]
详细说明
[0064]
介绍
[0065]
本文的实施例提出了用于产生任何世界视图渲染的输出图像和/或视频的系统和方法,该图像和/或视频利用来自多个相机的图像和/或视频的帧的多视图几何变换来合成环境的虚拟渲染视频,就像由浮动虚拟相机捕获一样。在一些实施例中,该虚拟相机可以具有六个自由度,包括:x、y、z位置;方位角和仰角姿势,以及视场角。有利的是,虚拟相机可以位于与多个相机的每个位置不同的位置。另外,用于渲染输出图像/视频的投影表面可以是动态的,并且可以链接到虚拟相机周围对象的距离估计。可以使用诸如超声波或mmwave测距传感器、雷达、激光雷达的测距传感器,或使用应用于视频帧的计算机视觉技术来获得距离估计。本文的实施例可以用于各种应用中,诸如用于车辆高级驾驶员辅助系统(adas)、无人机视频捕获、办公室或家庭环境,或具有多个相机的其它平台。
[0066]
在一些实施例中,多个相机视图被组合成单个透视图,该单个透视图为操作员提供了对虚拟视点的控制,该虚拟视点是由围绕车辆或其它对象的周边定位的多个相机合成的。该合成视图可以在无缝混合来自每个相机的失真和照明经校正图像时将多个单独的相机流整合在一起。另外,用户可以指定透视图或虚拟视点以显示例如从车辆上方的俯视图。
[0067]
在一些实施例中,可以利用诸如hyperx
tm
技术之类的并行处理体系架构来适应执行摄取多模式传感器数据并向驾驶员和汽车系统提供信息的算法的高计算成本。有利的是,可以渲染虚拟的任何世界视图,从而提供具有动态虚拟相机位置和动态投影表面的360
°
环绕视图。根据一些实施例,图1中示出了任何世界视图系统的组件之间的功能关系的概念图。有利的是,本文的一些实施例创建了一种系统,该系统在车辆周围的视线受到车辆本身的结构或受到物理可视化驾驶员周围所有方向的能力的限制时以安全的方式帮助驾驶员操作车辆。本文描述了用于将从多个数字视频相机捕获的视频数据转换成表示车辆或其它对象周围的虚拟视点的渲染视频显示的方法和系统。在一些实施例中,渲染的(一个或多个)输出图像可以用作另一个应用的输入(例如,用于进一步处理),和/或可以存储在存储器中或另一种类型的存储介质上。
[0068]
图3

渲染输出图像流程图
[0069]
图3是图示根据一些实施例的用于从多个输入图像渲染输出图像的方法的流程图。在一些实施例中,所描述的方法可以由包括耦合到多相机系统的处理器的计算机系统执行。处理器可以耦合到一个或多个非暂态计算机可读存储器介质,该存储器介质可以具有存储在其上用于执行所描述的方法的程序指令。在一些实施例中,并且如在第5节中更详细描述的,处理器可以是并行处理硬件系统,其可以用于减少计算步骤的时延。在各种实施例中,所示出的方法的一些元素可以以与所示出的顺序不同的顺序同时执行、可以被其它方法元素替代、或者可以被省略。还可以根据需要执行附加的方法元素。如图所示,该方法
可以如下操作。
[0070]
在302处,接收多个输入图像,其中多个输入图像中的每个输入图像是从不同的第一位置拍摄的。换句话说,每个输入图像可以由位于不同的第一位置的相机或另一类型的图像获取设备拍摄,使得多个输入图像对应于多个相应的第一位置。相机可以安装在诸如汽车、卡车、飞机或船;无人机;家具或任何其它类型的对象之类的车辆的各种位置。多个相机每个可以具有其自己的位置、朝向和/或视场,并且多个相机中的各个相机的视场可以部分重叠。
[0071]
在304处,接收视图规范以渲染输出图像。可以响应于用户输入来接收视图规范。例如,用户可以呈现输入以确定视图规范的一个或多个参数,该参数可以提供给计算系统以用于渲染输出图像。视图规范可以包括用于渲染输出图像的第二位置,并且第二位置可以与每个第一位置不同。作为一个示例,如果多个输入图像包括从车辆上的四个不同的第一位置拍摄的四个输入图像(例如,如图2a中所示),那么第二位置可以位于车辆上方或位于车辆外部的另一个位置。视图规范还可以指定用于渲染输出图像的一个或多个附加参数,包括但不限于方位角、极角、视场、投影表面深度、一个或多个投影表面参数、像素分辨率和/或混合宽度。注意的是,打算在以原点为第二位置的球坐标系中测量方位角和极角。方位角和极角由此可以从第二位置的角度指定用于渲染输出图像的视图朝向。视场可以指定输出图像的立体角和/或放大程度。此外,视图规范可以指定输出图像的像素分辨率(例如,1280x720、1920x1080或其它分辨率)和/或用于混合来自不同输入图像重叠部分对输出图像的贡献的混合宽度。投影表面深度可以指定用于渲染输出图像的投影表面的一个或多个深度参数。例如,对于投影表面是椭圆圆柱的实施例,视图规范可以指定椭圆圆柱的长轴和短轴中的一个或两个。一个或多个投影表面参数还可以指定投影表面的不同尺寸、形状或预设。可替代地,并且如下面更详细描述的,投影表面可以由计算系统自动确定。
[0072]
对于其中基于一系列相应多个输入图像来渲染一系列输出图像以产生输出视频的实施例,用户可以动态地更改视图规范以实时地改变输出视频的一个或多个参数。例如,用户可以调整视图规范的一个或多个参数,诸如第二位置和/或视点方向,以实时地平滑地更改输出视频的视点。作为一个示例,这在停车场景中可以是有利的,其中用户可以通过在停车过程中改变视图规范的一个或多个参数来更改输出视频的视角。
[0073]
在一些实施例中,接收指定一个或多个第二视图规范的进一步的用户输入,并且至少部分地基于一个或多个第二视图规范和多个输入图像来渲染一个或多个第二输出图像。换句话说,可以使用单组输入图像数据来从由第一视图规范和第二视图规范描述的不同视点渲染多个不同的输出图像。一个或多个第二输出图像可以显示在与第一输出图像(即,从第一视图规范产生的输出图像)相同的显示器上,或者它们可以被显示在一个或多个不同的显示器上。
[0074]
在306处,至少部分地基于多个输入图像和视图规范来渲染输出图像。输出图像是从第二位置看并根据视图规范的一个或多个其它参数的区域的图像。在一些实施例中,如下面参考图4更详细描述的,输出图像进一步基于投影表面被渲染。附加地或可替代地,可以逐块地渲染输出图像,如下面参考图5更详细描述的。有利的是,可以从与多个输入图像中的任何一个的视点不同的视点(即,位置、方位角和/或极角,以及视图规范的其它潜在特性)来渲染输出图像。
[0075]
在一些实施例中,输出图像的至少一部分源自多个输入图像中的两个或更多个输入图像,并且渲染输出图像的至少一部分包括混合来自该多个输入图像中的这两个或更多个输入图像的贡献。例如,输入图像中的两个可以在其视场中部分重叠,使得重叠区域内来自这两个输入图像的像素可以对输出图像的对应部分有所贡献。
[0076]
在一些实施例中,至少部分地基于两个或更多个输入图像的第一位置与输出图像的至少一个部分的投影位置的接近度来对混合进行加权。例如,当输入图像中的两个在其各自的视场的一部分内重叠时,可以确定重叠区域的投影位置距从中拍摄两个输入图像中的每一个的第一位置有多远。在这个示例中,可以对两个输入图像对输出图像的对应部分的贡献进行加权,使得从比投影位置更近的第一位置拍摄的输入图像被赋予比从更远的第一位置拍摄的另一个输入图像更大的权重。附加地或可替代地,混合可以校正两个或更多个输入图像之间的照明差异。
[0077]
在308处,输出图像被显示在显示器上。显示器可以与渲染输出图像的计算设备并置,或者它们可以彼此远离并通过无线网络连接。在一些实施例中,显示器可以安装在车辆内以向车辆的驾驶员或操作员提供adas服务。可替代地,显示器可以位于远离车辆并且可以被包括在被配置为远程驾驶或操作车辆的设备内。
[0078]
在一些实施例中,可以基于一系列相应的多个输入图像重复地渲染一系列输出图像,并且该系列输出图像被实时地显示在显示器上以产生实时视频。换句话说,虽然参考图3描述的方法列举了从多个输入图像渲染的单个输出图像,但是从多个输入视频产生输出视频在一些实施例的范围内,其中本文描述的方法步骤对于视频的每个帧进行重复。
[0079]
图4

投影表面流程图
[0080]
图4是图示根据一些实施例的用于确定投影表面以帮助渲染输出图像的方法的流程图。可以结合参考图3和/或图5描述的方法步骤来执行图4中描述的方法步骤,作为从多个输入图像渲染输出图像的方法的一部分。在一些实施例中,所描述的方法可以由包括耦合到多相机系统的处理器的计算机系统执行。处理器可以耦合到一个或多个非暂态计算机可读存储器介质,该存储器介质可以具有存储在其上用于执行所描述的方法的程序指令。在一些实施例中,并且如在第5节中更详细描述的,处理器可以是并行处理硬件系统,其可以用于减少计算步骤的时延。在各种实施例中,所示出的方法的一些元素可以以与所示出的顺序不同的顺序同时执行、可以被其它方法元素替代、或者可以被省略。还可以根据需要执行附加的方法元素。如图所示,该方法可以如下操作。
[0081]
在402处,确定环境的几何布局。例如,可以确定围绕与多个输入图像相关联的第一位置的环境的几何布局。几何布局可以被理解为表示第一位置的周围环境的近似,其可以用来确定用于渲染输出图像的有效投影表面。注意的是,步骤302是可选的,并且可以基于一个或多个其它因素来确定投影表面,而无需确定环境的几何布局。例如,如下所述,投影表面默认情况下可以是椭圆圆柱,并且椭圆圆柱的尺寸(例如,长轴和/或短轴的长度)可以基于车辆的速度或其它因素(诸如例如到附近对象的距离)来确定。
[0082]
在一些实施例中,确定环境的几何布局包括确定与围绕第一位置的区域相关的测距信息,并且所述确定投影表面是至少部分地基于测距信息来执行的。例如,一个或多个测距装置可以与用于获取多个输入图像的多个相机中的一个或多个相机并置。(一个或多个)测距装置可以利用雷达、声纳、激光雷达、计算机视觉处理算法、机器学习和/或其它技术来
估计从相应的第一位置到相应的输入图像的各个部分的距离。例如,如果特定输入图像显示道路、另一个车辆和/或树木或其它对象,那么测距装置可以估计从特定输入图像的第一位置到该道路、车辆、树木或其它对象的距离。
[0083]
在404处,确定投影表面。投影表面可以包括基本样条表面,该基本样条表面近似围绕与多个输入图像相关联的第一位置的环境。在一些实施例中,由一个或多个测距装置产生的估计距离可以用于确定投影表面。例如,可以确定从由(一个或多个)测距装置获得的距离得出的投影表面。换句话说,可以确定近似其上安装多个相机的车辆或其它对象的周围环境的投影表面,并且测距信息可以用于通知该近似。
[0084]
在一些实施例中,投影表面可以是基于车辆的环境或其它因素确定的逐段和/或不连续表面。换句话说,可以将投影表面确定为任何期望的特异性或细节水平,直至并包括对于围绕原点的任何期望立体角(例如,直至并包括4π球面度)投影表面相对于原点的位置的逐像素深度规范。
[0085]
在一些实施例中,第一位置是车辆上的位置,并且投影表面包括围绕车辆的水平部分和包围水平部分的垂直部分。在一些实施例中,投影表面的水平部分是围绕车辆的椭圆盘,投影表面的垂直部分是包围椭圆盘的椭圆圆柱,并且投影表面还包括平滑地结合椭圆盘和椭圆圆柱的中间区域。在adas实施例中,在用于拍摄输入图像的相机安装在第一车辆上的情况下,椭圆盘的长轴可以从车辆的前部延伸到车辆的后部,并且椭圆盘的短轴可以从车辆的左侧延伸到车辆的右侧。在一些实施例中,投影表面的椭圆圆柱形状可以被修改以容纳被确定为紧邻第一车辆的一个或多个对象(例如,在本上下文中“紧邻”可以理解为是指在椭圆圆柱的垂直部分内)。换句话说,如果通过测距程序或其它机制确定诸如第二车辆的对象紧邻第一车辆,那么可以修改椭圆形圆柱投影表面以包括该位置的近似和第二车辆的形状。
[0086]
在一些实施例中,水平部分的尺寸至少部分地基于车辆的当前速度来确定,其中车辆的较高当前速度比车辆的较低当前速度确定更大的水平部分。在一些实施例中,至少部分地基于到附近对象的最短距离来确定水平部分的尺寸。例如,可以基于另一个车辆或其它对象与多个相机的接近度来缩放水平部分的尺寸。换句话说,并且作为一个示例,随着车辆接近其上已经安装有产生输入图像的多个相机的车辆,水平部分的尺寸可以减小以匹配到接近车辆的距离。
[0087]
在一些实施例中,步骤402和404之一或两者可以作为校准处理的一部分被执行。换句话说,步骤402和404可以在被设计为渲染输出图像的计算系统的设计或生产期间执行。
[0088]
在406处,至少部分地基于投影表面来渲染输出图像。在一些实施例中,渲染输出图像包括将多个输入图像的像素映射到投影表面上,以及将投影表面上的位置映射到输出图像的像素。例如,多个输入图像中的每个输入图像可以被投影到投影表面上以产生渲染的环境,并且可以通过确定如果从视图规范所描述的角度看,投影表面上渲染的环境将如何出现来渲染输出图像。
[0089]
图5

特定于块的渲染流程图
[0090]
图5是图示根据一些实施例的用于将输出图像划分成多个像素块以辅助渲染输出图像的方法的流程图。可以结合参考图3和/或图4描述的方法步骤来执行图5中描述的方法
步骤,作为从多个输入图像渲染输出图像的方法的一部分。在一些实施例中,所描述的方法可以由包括耦合到多相机系统的处理器的计算机系统执行。处理器可以耦合到一个或多个非暂态计算机可读存储介质,该存储介质可以具有存储在其上用于执行所描述的方法的程序指令。在一些实施例中,并且如在第5节中更详细描述的,处理器可以是并行处理硬件系统,其可以用于减少计算步骤的时延。在各种实施例中,所示出的方法的一些元素可以以与所示出的顺序不同的顺序同时执行、可以被其它方法元素替代、或者可以被省略。还可以根据需要执行附加的方法元素。如图所示,该方法可以如下操作。
[0091]
在502处,在一些实施例中,渲染输出图像包括针对输出图像的多个像素块中的每个像素块分别执行所述渲染。例如,可以将输出图像划分为任意期望的尺寸和/或形状的多个像素块,并且可以逐块地执行渲染输出图像。在一些实施例中,可以使用广角鱼眼镜头或引入失真的另一种类型的镜头拍摄输入图像。通过单独渲染小块(例如,16x16块或其它尺寸),相对于将整个输出图像渲染为一个大块,可以减少在执行从输入图像到输出图像的投影映射时引入的失真程度。在一些实施例中,可以选择块的尺寸以在阈值可接受的失真水平和处理更大数量的块所需的处理资源量之间保持平衡,同时维持期望水平的吞吐量和时延。例如,较小的块尺寸会导致整个输出图像的块数更多,从而可能需要更多数量的并行处理资源来以期望的时延渲染输出图像,并且处理资源和输出图像的失真之间期望的平衡可以取决于处理器系统的计算能力和输出图像的用例(即,期望的吞吐量、分辨率和/或时延,以及其它可能性)来选择。例如,对于其中输出图像序列被渲染以实时地以每秒30帧的速度产生输出视频的实施例,可以针对特定的块尺寸选择一定程度的并行处理资源,使得渲染输出图像的时延小于1/30秒。换句话说,在一些实施例中,可以选择多个像素块中的每个像素块的尺寸,以平衡由投影映射引入的图像失真的程度和用于针对特定用例以可接受的时延渲染输出图像的处理资源的数量。
[0092]
在504处,对于输出图像的多个像素块中的每个像素块,确定沿着相应像素块的周边的多个像素与输入图像中的一个或多个输入图像中的每个输入图像的多个对应像素之间的映射。
[0093]
在一些实施例中,沿着相应像素块的周边的多个像素是相应像素块的四个角像素。例如,像素块可以是4x4、16x16或另一个尺寸的矩形像素块,并且沿着相应像素块的周边的多个像素与输入图像中的一个或多个输入图像中的每个输入图像的多个对应像素之间的映射可以针对输出图像的正方形像素块的四个角来执行。可替代地,在其它实施例中,可以使用其它形状的像素块,并且周边像素可以是相应形状的角。例如,输出图像可以被划分为平铺的三角形块,并且外围像素可以是每个三角形像素块的三个角。根据期望,也可以使用其它平铺形状,诸如五边形、六边形等。可以基于以上参考图4描述的投影表面来执行映射。例如,投影表面可以用于确定输出图像的像素块的四个角像素与一个或多个输入图像中的四个对应像素之间的映射。
[0094]
在506处,对于一个或多个输入图像中的每个输入图像,对位于输入图像的对应像素的周边内的像素到输出图像中的相应像素执行投影映射。投影映射可以至少部分地基于沿着相应像素块的周边的多个像素与一个或多个输入图像的多个对应像素之间的映射。例如,一旦将输出图像的像素块的四个角像素映射到一个或多个输入像素的四个对应像素,位于输出图像的四个角内的像素(例如,位于周边像素内的这些像素可以被称为输出图像
的像素块的“内部像素”)与一个或多个输入图像的像素之间的映射可以通过将角像素映射到像素块输出图像的内部像素的线性外推来执行。
[0095]
输出图像的周边像素到一个或多个输入图像的映射可能比内部像素的像素的投影映射在计算上更加密集。有利的是,仅对相对较少数量的像素(例如,这里描述的具体示例中为四个)执行周边像素的映射,而对较大数量的像素(例如,对于16x16像素块为256

4=252个像素)执行快得多的内部像素的投影映射,从而减少了渲染过程的总体处理负荷。
[0096]
附加说明
[0097]
以下编号的段落提供了关于本文描述的实施例的附加细节和解释。为了便于参考,以下段落的各节和小节按照分层编号系统进行编号。具体而言,节标题用单个数字(例如,“2”)进行标记,小节用两个数字(例如,2.3)进行标记,并且小节的小节用三个数字(例如,2.3.1)进行标记。
[0098]
1.概述
[0099]
以下各节提供了与车辆adas实施例相关的附加细节(第2节);图像处理算法(第3节),包括校准和视图生成功能(第3.1小节)和渲染功能(第3.2小节);软件(第4节),包括参数和配置文件(第4.1小节)和软件组件(第4.2小节);并行处理硬件系统设计(第5节);以及芯片设计(第6节)。
[0100]
2.车辆adas应用
[0101]
在一些实施例中,包括多个相机的系统可以安装在车辆上以生成车辆周围的任何世界视图。在一些实施例中,可以将具有广角视场(fov)光学器件的四个相机定位在车辆的每一侧上并联网到计算平台中。计算平台可以从相机捕获图像并合成单个显示图像,该单个显示图像是从指定视口(例如,从车辆周围的位置,诸如上方,向下看车辆)的组合视图。在已对四个图像校正镜头失真并将这些图像缝合在一起之后,基于数字视觉接口(dvi)的显示器或其它类型的显示器可以呈现合成视图。可以应用最终的透视变换来指定要在显示器中呈现的虚拟视口和/或透视图。
[0102]
可以使用静态校准处理来生成预处理各个相机图像所需的各种空间和强度校正。
[0103]
操作员可以能够使用平板计算机或具有简单用户界面的其它设备来控制对视口的选择。可以从(例如,有线或无线)连接到计算平台的监视器直接显示任何世界视图图像。
[0104]
3.图像处理算法
[0105]
在一些实施例中,任何世界视图系统包括具有鱼眼镜头(~180度fov)的四个相机,以捕获汽车周围的图像样本。在水平平面中,它们可以按每隔90度定向,并且每个相机可以具有180度的视场,从而在相邻相机之间提供很多图像重叠。沿着垂直轴,相机可以按向下45度角定向,以提供对汽车周围地面的完全覆盖和全方位的视图。
[0106]
图像处理算法可以将来自这些多个相机源的图像样本组合成表示特定视图视角的单个输出视图。以下各节更详细地描述了渲染输出视图的功能步骤。
[0107]
图像处理步骤可以被划分为两组。第一组步骤在将相机安装在汽车上之后仅执行一次。使用具有已知位置的校准目标,可以利用第一组步骤来校准每个相机相对于公共世界坐标系的位置和朝向。然后,可以基于四个相机生成每个视图的逐块描述。该第一组功能用于任何世界视图的校准和视图生成。
[0108]
第二组操作包括实时系统,以使用在校准期间计算的逐块视图描述以视频速率渲
染视图透视图。从相机接收图像样本,可以应用去马赛克功能来恢复全分辨率颜色,然后可以执行扭曲(warping)以将样本投影到表示透视图的虚拟直线相机的焦平面上。如果视图透视图的部分用来自不止一个相机的样本填充,那么可以混合来自两个最好相机的样本。还可以实时应用光度对准算法以补偿相机之间的曝光差异,该差异可能随着车辆或其它对象移动通过或经历可变的照明条件而变化。
[0109]
在两种类别中应用这些功能的一般方法是使用多视图几何的基本原理来实现期望的功能。在一些实施例中,模型可以使用诸如opencv之类的开源库来实现许多用于发现和应用图像的投影变换的功能。
[0110]
图6图示了根据一些实施例的模型中包括的两组处理的数据流程图。该图的上部是可以对于每个校准集和视图规范离线执行一次的第一组步骤。可以为每个期望的视图规范生成渲染块参数的数组,并将其提供给第二组操作,该第二组操作可以对来自相机的每个输入图像集执行。
[0111]
3.1校准和视图生成功能
[0112]
校准功能可以在汽车上安装相机之后执行一次。可以针对每个视图规范执行一次视图生成功能,每个视图规范可以包括虚拟相机相对于汽车的位置和朝向。这些功能的输出可以是参数集合,从中可以使用来自一个或四个(或更多个)相机的图像样本重复生成定义的视图以形成视频输出。校准和视图生成功能可以是在标准计算机上运行的离线处理。
[0113]
3.1.1鱼眼失真校正
[0114]
图像的投影变换的概念可以基于诸如基本针孔相机模型之类的底层投影相机模型。在该模型中,射线从中心点延伸,通过直线图像平面到达世界中的对象。对象在世界中的位置可以用射线与图像平面相交处的点来表示。
[0115]
投影相机模型提供了通过绘制射线以穿过直线图像平面和弯曲鱼眼图像表面两者来理解鱼眼镜头图像和对应直线表示之间的映射的基础,如图7中所示。(在本文档的图中,图像平面是在一个维度中以线绘制的,表示图像的2d欧几里得区域)。中央投影相机的射线是在二个维度中绘制的,表示齐次图像坐标和世界对象的3d空间)。
[0116]
有许多不同种类的鱼眼镜头。假定在一些实施例中使用的镜头遵循等角投影模型,也称为等距模型,并由以下方程表示:
[0117]
r
f
=f
f
θ
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
[0118]
其中,r
f
是鱼眼图像表面中从主轴到图像点的距离,θ是射线与主轴之间的角度,并且f
f
类似于焦距。
[0119]
针孔相机模型的对应方程为:
[0120]
r
p
=f
p
tanθ,
ꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0121]
其提供了从鱼眼源图像到其直线表示通过θ的映射。每当源图像涉及投影几何变换时,模型就可以使用该映射。等角鱼眼失真校正的示例如图8中所示。图8的顶部示出了具有等角(鱼眼)失真的源图像(180
°
视场),并且底部示出了使用针孔相机模型的重投影(120
°
视场)。如本文所使用的,“源图像”可以被理解为与参考图3

5描述的输入图像同义。
[0122]
3.1.2相机校准
[0123]
相机校准函数可以找到相对于世界坐标系的相机位置和朝向。该处理的输入可以是如图13中所示的棋盘图案的图像。可以执行以下步骤。
[0124]
1.识别未失真(直线)输入图像中棋盘角的像素位置。这可以使用cv::findchessboardcomers()函数来完成。
[0125]
2.用户提供告诉世界坐标中对应棋盘角位置的数组。
[0126]
3.对旋转矩阵r
source
和平移向量t
source
进行数值求解,使得世界坐标可以被重投影到未失真的源图像中。这可以使用cv::solvepnp()函数来完成。
[0127]
4.报告以像素为单位的均值重投影误差,衡量相机校准处理是否成功。
[0128]
重投影方程可以被描述为:
[0129]
x
source
=r
source
x
world
+t
source
ꢀꢀꢀꢀꢀꢀ
(3)
[0130]
x
source
=kx
source
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0131]
其中:
[0132]
是世界坐标系中的棋盘角位置,
[0133]
x
source
是源相机坐标系中的同一点,
[0134]
k是描述源图像平面的焦距和主要点参数的固有相机矩阵,并且
[0135]
x
source
=s(u,v,1)
t
是源图像像素位置。
[0136]
重投影方程在图9中以图形方式示出。旋转矩阵r
source
将世界坐标系旋转到相机坐标系的朝向,而平移向量t
source
将世界坐标原点移动到相机中心,该相机中心可以是针孔相机的光学中心。r
source
和t
source
足以描述相机在世界中的位置和朝向。
[0137]
注意的是,像素位置x和固有相机校准矩阵k可以与源图像的直线表示相关。然后,可以使用鱼眼镜头映射函数确定鱼眼源图像中与棋盘角对应的实际像素位置。
[0138]
相机校准函数提供旋转矩阵r
source
和平移向量t
source
,它们是相机的外部校准参数。使用这些参数,可以将世界坐标系中的任意点x
world
=(x,y,z)
t
投影到源图像中。如下面更详细描述的,这可以提供基于任何虚拟视点来创建新图像的基础。
[0139]
一旦相机被附接到汽车上,这些外部校准参数就可以被固定。相机校准处理可以执行一次,以找到每个相机的旋转矩阵r
source
和平移向量t
source
。只要相机的相对位置和朝向不变,这些参数就可以用于使用同一源相机集合生成汽车周围的任意数量的视图。
[0140]
3.1.3保护性变换
[0141]
在一些实施例中,如第3.1.2节中所述,在重投影方程中的世界坐标和校准图像之间利用投影变换。世界对象的位置在世界坐标系中是已知的,其z

轴定向垂直于地面。投影变换可以包括将坐标系旋转到相机坐标系的朝向,然后添加平移以将原点移动到相机中心。然后,可以将世界对象的变换后的3d坐标解释为图像投影平面中的齐次坐标,以得出世界对象的像素位置。
[0142]
使用来自源图像的图像样本为某个虚拟相机位置创建新视图可能涉及两个投影变换,如图10中所示。首先,可以将视图图像中的每个像素位置投影到对象在世界坐标系中的位置。如本文所使用的,“视图图像(view image)”可以被理解为与参考图3

5描述的“输出图像”同义。其次,该世界点可以重投影回源图像中的像素位置。
[0143]
可以通过以下步骤序列来描述从视图图像到源图像的映射:
[0144]
1.令是视图图像坐标系中某个像素位置的齐次表示。可以选择特定点值,使得z为在该像素处提供图像的世界对象的实际深度。
[0145]
2.将轴从视图坐标系旋转到世界坐标系。
[0146]
3.通过添加p
view
(视图相机在世界坐标系中的位置),将原点从视图相机中心移位到世界原点:
[0147][0148]
4.将轴从世界坐标系旋转到图像坐标系。
[0149]
5.将原点从世界原点转移到图像相机中心:
[0150]
x
source
=r
source
x
world
+t
source
ꢀꢀꢀꢀꢀꢀ
(6)
[0151]
组合方程示出了从源图像中获取视图图像中像素的样本值的位置:
[0152][0153]
在投影几何中,x
view
表示从相机中心延伸并在x
view
处撞击在世界对象上的射线。该射线穿过图像平面的像素位置处的图像颜色是x
view
处世界对象的颜色。对象的深度可以被定义为x
view
的z

分量。可能期望从添加了t
source
和p
view
的后续步骤中将x
view
缩放为世界坐标单位,因为这些值是以世界坐标单位。注意的是,旋转矩阵r
source
和是正交矩阵。它们是无单位的,并且不会更改由它们变换的向量的长度。
[0154]
3.1.4世界对象的表面模型
[0155]
在一些实施例中,从任意视角相机中心确定对象的深度可能是不平凡的。可以利用世界中对象的三维模型来获得投影表面,这可能不能实际上或容易地从(一个或多个)源图像获得。
[0156]
视图生成算法可以利用具有两个相交表面的混合表面模型。可以假定世界对象在该表面上。用于计算深度的函数可以涉及计算x
view
作为表示具有表面模型的图像像素的射线之间的交点。
[0157]
作为从像素位置开始的数学方程,我们可以首先以齐次表示法表示该位置,
[0158][0159]
然后应用逆固有相机矩阵k:
[0160][0161]
可以找到缩放因子s,使得x
view
的z

分量是对象距视图相机的深度,使得针对后续操作正确缩放x
view
。实际上,针孔相机模型的固有相机矩阵k可以使得s等于对象距视图相机的深度。
[0162]
对于其中汽车周围的世界被假定为z=0的地平面的实施例,深度的计算在11中示出。在这些实施例中,视图相机规范包括在地面上方和海拔θ+φ的某个高度p
view|z
处的相机位置p
view
,其中θ是视图主轴和+z轴之间的角度,并且φ是视图主轴和图像射线之间的角度。
[0163]
到x
view
的射线的长度为:
[0164][0165]
并且深度是该长度沿着视图相机原理轴的分量
[0166]
depth=||x
view
||cosφ
ꢀꢀꢀꢀꢀꢀꢀ
(11)
[0167]
地平面模型对于从上方观看汽车周围的视图工作良好,但是对于包括位于地平线上方的对象点的视图而言,可能不是理想的。前景中的垂直对象在假定水平地平面表面模型的渲染视图中也可能会失真。随着视图的海拔升高以接近水平,视图中更多的对象可以表示垂直表面,诸如建筑物、植被、其它车辆和/或人,以及其它可能性。
[0168]
在一些实施例中,引入了圆柱投影表面模型以为具有非垂直原理轴的视图提供更逼真的渲染。该模型假定对象点在垂直表面上,该垂直表面在一定距离包裹汽车,如图12中所示。圆柱的主轴可以在z

方向上穿过汽车的中心。
[0169]
任何世界视图系统可以假定圆柱表面距汽车有多远,但是在许多情况下,渲染的视图可能并不完全取决于该距离与距世界对象的实际距离的匹配程度。在一些实施例中,圆柱的尺寸可以与汽车正在移动的速度相关。固定的汽车可以使用较小的距离来更准确地渲染相邻的障碍物,而假定较大的圆柱维度,那么在移动的汽车中渲染的视图可能更逼真。
[0170]
一些实施例通过找到在(x,y)平面中射线从虚拟相机中心向相机的主轴延伸的交点进行操作。然后可以增加射线长度以考虑任何垂直分量,从而在圆柱表面上产生假定的对象点x
view

[0171]
在(x,y)平面中圆柱边界的形状可以是椭圆形的,其中长轴沿着汽车的长度定向并且短轴沿着宽度定向。作为视图规范的部分,用户可以指定单个表面深度值,该值表示从汽车的边缘到圆柱表面的距离。
[0172]
在混合实现中,视图生成功能可以采用地平面模型和圆柱表面模型两者。可以使用这两个模型来计算来自视图相机中心的给定射线的深度,并且可以选择较小的值。如果两个模型提供几乎相等的深度值,那么半径函数可以计算减小的值。结果可能是假定的世界对象表面,其形状为底部平坦的碗、围绕汽车的垂直侧面,以及它们之间的平滑圆角界面。
[0173]
如果假定的圆柱维度小于到实际世界对象的距离,那么混合模型可能在渲染的图像中引起有趣的效果。例如,可以用预期的透视图渲染汽车附近的对象,而较远的点可能表现出鱼眼镜头效果。半径函数可以提供在渲染图像中这些区域之间的过渡是平滑的。
[0174]
3.1.5从源图像到视图图像的逐段线性变换
[0175]
前面的各节概述了针对任意视点将源图像(即,输入图像)像素映射到视图图像(即,输出图像)的投影变换,其可以被总结为如下的映射函数:
[0176]
x
source
=r
m4p
x
view
+t
m4p
ꢀꢀꢀꢀꢀꢀ
(12)
[0177]
x=kx
source
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(13)
[0178]
根据针孔相机模型,这可能导致源图像中的像素位置x=s(u,v,1)
t
。作为最后一步,可以应用第3.1.1节中描述的非线性映射来获得原始鱼眼源图像中的像素位置。
[0179]
虽然可以为视图图像的每个像素评估映射函数,但是这可能导致每个视图有大量的映射信息。为了解决这个问题并减少渲染时间和计算负荷,在一些实施例中,可以将输出视图图像划分为像素块的网格(例如,16x16像素块或其它尺寸或形状的像素块),并且映射函数可以仅针对每个块的角进行评估。图13示出了两个鱼眼源图像中的块集合,该图像对应于视图图像中的16x16网格。如图所示,白色块被映射到视图图像,灰色块与来自另一个源图像的块混合并映射到视图图像,并且在视图图像中不使用黑色块,因为可以可替代地
使用更好的源图像。红色轨迹指示两个源图像之间的混合区域的中心线。混合表面模型可以是可见的,其中接近汽车的点被假定为在地面上,并且更远的点被假定为在围绕汽车的圆柱的表面上。
[0180]
可以针对每个输出块计算仿射变换的系数,以将源图像样本扭曲到视图图像中。虽然一般的投影变换可以被实现为3x3矩阵乘法运算,但仿射变换可能是自由度较小的特殊情况;可能不需要使用变换矩阵的最后一行。因此,每个输出块中像素的映射可以减少为:
[0181][0182]
仅利用六个值来描述每个输出块的仿射变换,并且每个视图图像块的四个角的源图像位置提供了足够的信息来求解值a
11
...a
23

[0183]
当将视图图像位置映射到源图像的函数包括对鱼眼镜头失真的校正时,它们可能是非线性的。虽然仿射变换可以是线性的并且可以比一般的投影变换更具限制性,但渲染输出视图可能就足够,因为可以将其单独应用于每个16x16输出块。换句话说,镜头失真的程度可以随着输出图像被划分成的像素块的尺寸而增加。16x16像素块尺寸可能会在引入足够小的失真程度和处理资源之间呈现理想的平衡,因为较小的像素块尺寸会转化为较大的计算负荷。这形成了对底层非线性映射的逐段近似。一些实施例可以平衡实时渲染系统中用于块映射信息的渲染和存储需求的计算。
[0184]
3.1.6混合比计算
[0185]
源相机上的鱼眼镜头可以提供180
°
的视场。在一些实施例中,存在朝四个基本方向定向的四个相机,使得相邻相机捕获的图像之间可能存在明显的重叠。
[0186]
在一些实施例中,混合比率计算可以用于确定哪些源相机对视图图像中的每个块有贡献。对于视图图像中的给定块位置,可以基于距对应源图像块和鱼眼图像中心的距离来计算距离度量。如果为两个源计算的距离度量比相邻块的距离度量更相等,那么可以将视图图像块识别为位于两个源之间的中心线上。该标准可能具有有利于最接近具有最高分辨率的每个图像中心的源样本的效果。
[0187]
在一些实施例中,每个源图像可以包括排除边界以使不应出现在渲染的视图图像中的源样本不合格。如果源图像块接近排除边界,那么可以调整其距离度量以将中心线移离排除边界。
[0188]
在已经识别视图图像中的中心线块之后,可以基于相邻块距中心线的距离为其分配混合比率值。当视图块由来自两个源图像的贡献块组成时,可以为最接近其自身图像中心的源块分配0.5和1.0之间的混合比率,而为另一个源块分配较小的互补值(例如,可以为另一个源块分配一减去分配给更接近的块的值的权重值)。
[0189]
混合比计算可以是相机校准和视图生成功能的最后一步。在一些实施例中,用于重叠视图图像块的比率可以被包括在为渲染功能定义每个视图的参数集合中。
[0190]
3.2渲染功能
[0191]
在一些实施例中,可以重复执行任何世界视图演示系统的渲染功能,以产生用于给定视图规范的视频输出。在一些实施例中,它们可以通过诸如hyperx
tm
应用的并行处理系统来实现,该系统可以在视觉集成显示系统(vids)平台上实时运行。
[0192]
在一些实施例中,还可以利用渲染功能的模型实现。模型实现可以在标准计算机上运行,并且可以在单个框架上操作,以提供评估任何世界视图算法的平台。该模型的功能与实时hyperx
tm
设计紧密相关,因此该模型还可以提供测试向量以支持hyperx
tm
应用的开发。
[0193]
渲染功能的输入可以包括针对给定视点的输出图像的每个16x16块的参数集合。来自四个相机的源图像也可以用作渲染功能的输入。
[0194]
3.2.1去马赛克
[0195]
在一些实施例中,可以通过拜耳(bayer)滤镜捕获来自单ccd数码相机的彩色图像,该滤镜可以是形成红色、绿色和蓝色样本的马赛克(mosaic)的滤色器阵列。去马赛克功能可以将每个像素一个采样值转换成表示完整的红色、绿色和蓝色平面的每个像素的三个值。
[0196]
在实时任何世界视图hyperx
tm
系统中,去马赛克功能可以应用于与视图图像中每个16x16像素块对应的源图像块。源图像块可以具有矩形形状,其尺寸可以小于或大于应用仿射变换之后产生的视图图像块的尺寸。矩形输入块可以被称为“边界框”,因为它完全包含用于每个视图图像块的源图像样本。参考图11中所示的块的网格,边界框可以是完全包含每个源图像块的正交矩形。
[0197]
在各种实施例中,可以选择不同的去马赛克方法。如果边界框为1000个像素或更小,那么可以应用常规的去马赛克算法。在一些实施例中,可以在每个像素位置处内插两个缺失的颜色样本。
[0198]
对于介于1000和4000个单词之间的边界框,可以使用下采样去马赛克算法。可以将每个像素样本计算为对应颜色的相邻样本的加权平均值,以在过滤操作中完成过滤、下采样和内插。相对于输入边界框,输出边界框可以在垂直和水平方向上缩小两倍。仿射变换系数可以被预先补偿以考虑缩小的边界框。
[0199]
下采样去马赛克方法扩展了可以由实时任何世界视图处理的输入块尺寸的范围。去马赛克操作的输出可以是足够大以渲染对应的16x16视图图像块的源图像样本块。
[0200]
3.2.2扭曲和块平均
[0201]
在一些实施例中,采用扭曲函数来应用仿射变换。输入可以是具有来自去马赛克功能的每个像素3个样本的源图像块,并且输出可以是16x16视图图像块。
[0202]
对于每个块像素位置,可以将边界框内的对应像素位置计算为:
[0203][0204]
其中系数a
11
...a
23
可以是由视图生成函数计算的参数集的一部分。位置可以是实值位置,不限于u和v的整数值,使得可以对该位置的红色、绿色和蓝色样本值进行插值。可以使用双线性插值。
[0205]
除了将输入块扭曲为视图图像块之外,还可以跨视图图像块计算平均红色、绿色和蓝色样本值。块平均值可以由下面的3.2.3小节中描述的光度对准函数使用。
[0206]
3.2.3光度对准
[0207]
可以利用光度对准系统来独立地补偿不同的相机,并且响应于从不同方向面向车辆的不同光照条件而自动调整曝光和光圈设置。当两个源图像为视图图像提供重叠的块
时,如果它们的光度特性已经被调整以相互匹配,那么生成的混合区域可能显得更加自然。
[0208]
图13a

13b演示了多个输入图像中的重叠。如图所示,具有中间灰色边界的源图像块位于视图图像的重叠混合区域中。光度对准可以帮助均衡源图像的颜色,以使接缝在渲染的视图图像中消失。
[0209]
在一些实施例中,可以在两个源图像之间的重叠区域中比较块平均样本值。可以为每个源图像计算全局增益校正值,以最佳地均衡共置块中的采样值。可以针对每个红色、绿色和蓝色平面计算单独的增益值。使用在整个视图图像上收集的块平均值,可以为四个源图像计算多达12个增益值。
[0210]
为先前的源图像集合计算的增益值可以应用于当前视图图像中的所有图像样本。每个样本值可以简单地乘以对应颜色和源图像的增益值。
[0211]
3.2.4混合
[0212]
在一些实施例中,渲染处理中的最后步骤被用来混合来自不同相机源的重叠视图图像块。大多数视图图像块仅包含来自单个源图像的样本,并且混合功能可能是这些块的传递功能。对于其余的视图图像块,红色、绿色和蓝色值可以逐像素组合,作为来自两个图像源的两个共置渲染块的加权平均值。
[0213]
如第3.1.6节中所述,在视图生成处理中计算了用于混合的权重值。有助于单个视图图像块的两个权重值之和可以为1。
[0214]
混合功能的输出可以是对于其源图像样本存在于源相机集合中的那些块位置的16x16视图图像块集合。视图图像中的一些块位置可能不会映射到任何源相机,并且这些块可能不会被渲染。
[0215]
输出块可以在外部存储器中被合成为帧图像。单独的任务可以负责逐行从外部存储器读取视图图像,以通过vids平台的dvi输出进行呈现。
[0216]
4.软件
[0217]
在一些实施例中,可以以四个软件程序的形式提供任何世界视图系统,该四个软件程序基于来自一到四个源图像的图像样本一起工作以针对给定的视点渲染单个图像。每个程序都可以独立构建和运行,但是它们可以共享使它们能够一起工作的公共配置和参数文件集合。
[0218]
4.1参数和配置文件
[0219]
模型软件应用套件中的程序可以利用许多参数来描述关于源相机、期望视图以及渲染视图图像中每个16x16块或图块的信息。所有程序都可以从参数文件中获取这些参数;在一些实施例中,通常不使用命令行选项。
[0220]
4.1.1 blockinfo
[0221]
块级别参数被称为blockinfo,并且是第3.1节中描述的视图生成操作和第3.2节中描述的渲染操作之间的桥梁。这些参数可以被包含在javascript
tm
对象通知(json)格式文件中。json可以是从公共web应用编程实践中借用的轻量级数据交换格式,其可以被人类阅读,但也可以容易地被软件摄取。
[0222]
示例blockinfo结构在图14中示出,并且参数在下面的表1中说明。
[0223]
表1.blockinfo参数
[0224][0225]
blockinfo结构可以在文件中使用,该文件包含描述给定视图规范的视图图像中的每个块的所有块参数集。
[0226]
去马赛克模型和实时任何世界视图hyperx
tm
系统可以使用如图15中所示格式化为c或c++构造的blockinfo参数。这可以是二进制格式,该二进制格式可能不是人类可读的,但是可以在软件中高效地处理。
[0227]
4.1.2 camdata
[0228]
在一些实施例中,可以以json格式利用camdata配置文件。它可以被视图生成功能使用,并且可能不需要进行渲染。camera_calibrate程序可以使用camdata文件作为输入和输出,而view_generate程序可以使用它作为输入。示例camdata文件在图16中示出,并且包括三个部分,如表2中所示。如图所示,第一部分包含相机校准所需的最小参数集合。第二部分添加了视图生成所需的参数,这些参数是相机校准处理的结果。第三部分可以是仅供人类读者阅读的信息,并且可能不被任何程序使用。注意的是,由软件用于读取camdata文件的功能可以读取大多数存在的文件,因此第二部分和第三部分中的任何未知参数都可以简单地从文件中省略。
[0229]
表2.camdata文件的参数
[0230][0231][0232]
在一些实施例中,targetposition参数可以基于图17中所示的世界坐标系。汽车的中心不一定是x

y轴的原点,但是相机校准操作可以假定轴方向如图所示。具体而言,在一些实施例中,

y轴方向可以从汽车的前方向前延伸。
[0233]
4.1.3 viewspec
[0234]
viewspec描述了虚拟相机的期望视点。“生成”该视图可能涉及产生用于渲染viewspec中指定的视图的blockinfo结构的文件。在一些实施例中,viewspec文件可以仅在视图生成处理中使用,并且可能不需要被实时渲染系统使用。
[0235]
图18中示出了示例viewspec文件,并且该文件包括表1中描述的参数。描述视图朝向的角度参数参考汽车的前轴,如图19中所示。
[0236]
表3.viewspec文件的参数
[0237][0238][0239]
4.2软件组件
[0240]
用于任何世界视图系统的模型软件可以包括两个库和许多命令行应用。这些库可以实现视图生成和渲染算法的许多功能。应用可以调用库的函数并添加代码来处理高级操作序列和文件i/o。
[0241]
4.2.1 opency
tm

[0242]
opencv
tm
是支持计算机视觉应用的开源库函数。它以打包形式提供给所有标准平台,并提供核心原始数据类型和函数集合。例如,所有涉及射影几何的运算都用c++表达为简单的数学运算,即使它们表示涉及向量和矩阵的线性代数方程。一些函数,诸如用于找到每个视图块的仿射变换的奇异值分解(svd)算法,非常复杂,opencv
tm
的使用可能对模型的高效实现是有利的。在一些实施例中,任何世界视图模型使用opencv
tm
的c++api版本2.4。
[0243]
4.2.2 arthrocv库
[0244]
在一些实施例中,arthrocv库包含模型算法的许多函数。它给出了c++应用编程接口(api),使应用可以访问比opencv
tm
中更原始的函数更特定于任何世界视图应用的公共函数。例如,等角(鱼眼)相机模型和针孔相机模型(第3.1.1节)之间的源图像样本的映射可以是可以作为arthrocv
tm
api的一部分的c++类。
[0245]
arthrocv
tm
库可以作为单个共享对象库、用于windows
tm
的arthrocv.dll或用于linux
tm
的libarthrocv.so提供。
[0246]
4.2.3去马赛克
[0247]
在一些实施例中,去马赛克程序可以是独立程序,以转换由单ccd相机捕获的图像。该函数的输入可以是具有颜色样本的拜耳马赛克的原始二进制图像。作为一个示例,如果原始二进制图像每个像素包含10位,那么输出可以是每个像素文件32位,每个像素位置具有10位红色、绿色和蓝色样本。
[0248]
在一些实施例中,为了转换原始图像文件,可以通过以下方式调用去马赛克程序:
[0249]
demosaic

image blockinfo_image_alignment.bin bayerinputfile.raw outfile.raw
[0250]
其中,“blockinfo_image_alignment.bin”包含单个二进制blockinfo参数集,该参数集描述了包括拜耳图案对准的源图像。
[0251]
可以提供shell脚本,该shell脚本用附加的开源实用程序包装去马赛克程序,以与其它标准图像格式(诸如,便携式灰度图(.pgm)和便携式图形格式(.png))相互转换。
[0252]
4.2.4相机校准
[0253]
根据一些实施例,以上在第3.1.2节中描述了相机校准函数。相机校准的结果可能是旋转矩阵和平移向量,它们告诉相机在世界坐标系中的位置和朝向。
[0254]
相机校准可以在将每个相机安装在汽车上之后对每个相机执行一次。包含棋盘校准目标的相机可以捕获图像。相机和目标的参数可以在camdata配置文件的第1节中指定,如第4.1.2节和表2中所述。
[0255]
随后,可以通过以下方式调用相机校准:
[0256]
camera_calibrate cam0.json
[0257]
根据一些实施例,程序可以在第2节和第3节中用更新的参数重写相机配置文件。在一些实施例中,它还可以显示两个图像以验证正确的操作。第一图像的示例在图20中示出,并且可以是原始源图像,具有鱼眼镜头视场的圆形边界的标识。软件可以自动发现圆形图像的中心和半径,其可以用来在等角(鱼眼)相机模型和图像数据的理想针孔相机模型表示之间创建准确的映射。第一验证图像还可以显示在camdata配置文件中指定的排除边界。
[0258]
第二验证图像的示例在图21中图示,并且示出了在已校正鱼眼镜头失真之后的校准目标。如图所示,棋盘图像的角在图像中被自动检测到。校准程序将这些角用于求解相机的位置和朝向。
[0259]
camera_calibrate程序可以报告重投影误差,该重投影误差是被重投影回源图像的世界坐标系中的棋盘角位置的平均误差。重投影误差的单位可以是源图像的针孔相机表示中的像素。在一些实施例中,可能期望大约1个像素或更小的重投影误差。
[0260]
多个相机可以用于形成用于任意视图的混合视图图像。视图生成算法可以取决于相机在校准之后彼此维持固定的相对位置和朝向。因此,可能期望在汽车停放在地面上的一个位置时捕获所有相机的校准图像。
[0261]
4.2.5视图生成
[0262]
在一些实施例中,单个程序包含在第3.1.3

3.1.6节中描述的所有视图生成操作。输入可以是viewspec配置文件(例如,参见4.1.3),该文件提供了虚拟相机的位置、朝向、尺寸和视场。输出可以是包含为渲染图像中的每个16x16图块设置的blockinfo参数的文件。该文件可以是实时视图渲染系统的输入。
[0263]
blockinfo参数集可以参考来自命令行上提供的那么多相机(例如,多达四个)的源图像数据。例如,为了为给定视图创建blockinfo参数的文件,可以使用以下命令:
[0264]
view_generate top_down_view.json cam1_front.json cam2_rear.json cam3_left.json cam4_right.json
[0265]
其中,view0.json是viewspec配置文件,并且命令行上的其它文件是camdata配置
文件。可以指定任意数量的camdata配置文件(在这个实施例中,多达四个),并且它们在命令行上的顺序可以是任意的。
[0266]
在一些实施例中,当view_generate运行时,它示出了与每个camdata配置文件对应的源图像,其具有输出视图图像中使用的块的覆盖。图13a

b示出了这些带注释的源图像的示例。如图所示,浅色块被映射到视图图像,灰色块与来自另一个源图像的块混合并映射到视图图像,并且褪色的黑色块不用于视图图像,因为可以使用更好的源图像代替。一系列标记指示图13a和图13b的两个源图像之间的混合区域。
[0267]
4.2.6视图渲染
[0268]
在一些实施例中,view_render程序被用作在第3.2节中描述的整个渲染处理的模型实现。
[0269]
由view_generate产生的blockinfo参数文件可以是如何从多个相机源渲染给定视图的完整的逐块描述。命令行上利用的唯一附加数据可以是源图像本身的文件名及其cameraid值。
[0270]
示例命令行是:
[0271]
view_render blockinfo.json 1 front_c.png 2 rear_c.png 3 left_c.png 4 right_c.png
[0272]
其中第一自变量可以是由view_generate产生的blockinfo参数文件。接下来的自变量是在该生成的视图中使用的所有相机的{camerald,sourceimage}对。
[0273]
图像文件名可能不需要与提供用于校准的文件相同,因为该功能模型可能用于通过从以视频速率运行的相机实时捕获来提供多达四个源图像的系统。但是,可能期望每个图像文件与与由相同相机捕获的校准图像相同的camerald相关联。
[0274]
图22是渲染视图的示例。图像中心中的缺失块是由于汽车本身挡住了来自四个相机的地面视线所致。图像的其余部分可以由来自三个相机的数据组成,它们之间具有混合过渡。即使可能已在命令行上指定了第四个相机,但如果它们的图像样本不在viewspec配置描述的视场内,那么可能无法在渲染图像中使用这些图像样本。
[0275]
5.并行处理器系统设计
[0276]
根据一些实施例,以下各节概述了任何世界视图系统和方法的视图渲染部分的设计。该设计可以基于包括四个gige vision相机输入和用于dvi显示器的直接输出的hyperx
tm
开发系统中的hyperx
tm
hx3100处理器,或者它可以基于另一种类型的并行处理硬件系统。
[0277]
5.1功能分析
[0278]
功能分析可以考虑视图渲染算法的计算操作,如上面第3.2节所述。可以针对每个功能估计基本操作的数量,然后可以提供关于可以利用多少处理器周期来执行该功能的估计。通过了解用于处理视图图像的一个块的每个功能的周期计数,可以知道系统可以利用多少个处理器元素实时运行以产生以特定帧速率(例如,每秒30或60帧)的特定分辨率(例如,1440x900或其它分辨率)的视图图像。
[0279]
根据一些实施例,在以下各节中描述了任何世界视图渲染功能的主要计算步骤。根据以下示例规范集,该处理中每个步骤的块吞吐量要求可以基于目标视图图像尺寸和帧速率。
[0280]
5.1.1去马赛克
[0281]
在一些实施例中,可以将两个函数核心用于去马赛克算法(例如,如第3.2.1节所述):一个用于在拜耳马赛克图案中的绿色位置插值红色和蓝色像素,并且第二个用于在蓝色/红色位置插值绿色和红色/蓝色像素。
[0282]
接下来,可以假定去马赛克处理的块尺寸。这可以是用于渲染单个输出16x16块的源图像数据的边界框。该分析假定每个块的最坏情况尺寸为1000个样本。回想一下,如果边界框的尺寸在1000到4000个样本之间,那么可以使用替代的下采样去马赛克算法。
[0283]
5.1.2扭曲器
[0284]
如第3.2.2节中所述,扭曲函数可以从源图像样本的矩形块中计算16x16视图块的256个像素。该函数的两个部分可以包括应用仿射变换以获得输入样本块中的(非整数)位置,以及基于该位置对输入样本进行插值。还可以在扭曲器中计算块平均红色、绿色和蓝色值,以供光度对准算法使用。
[0285]
5.1.3光度对准
[0286]
光度对准算法(第3.2.3节)可以在两个单元格中实现,一个用于增益估计,另一个可以是增益校正,其可以应用增益值来调整颜色样本值。增益估计单元格计算平方差之和,并应用阈值函数使匹配不良的块不合格。
[0287]
在每一帧的末尾,增益估计单元格还求解方程组,该方程组涉及所存储的差值平方和。
[0288]
5.1.4混合
[0289]
混合视图块可以是具有两个贡献样本值的源图像的视图块。在该示例实施例中,假定20%的视图图像块被混合,并且其余的80%未被混合。混合计算只能应用于混合视图块。其它块可以简单地从单个输入复制到输出。
[0290]
5.2体系架构考虑
[0291]
本节列出了可以对系统设计施加限制的各种体系架构考虑,包括硬件平台的详细信息和高级功能规范。在一些实施例中,任何世界视图系统可以执行其功能并满足这些考虑所描述的要求。这些考虑以及上一节中的功能分析可能是决定系统设计性能的重要因素。
[0292]
5.2.1高级功能规范
[0293]
作为体系架构考虑的高级功能规范可以是那些确定系统的目标输入/输出和计算吞吐量的规范。在一些实施例中,可以在任何世界视图系统要求文档中建立以下规范。
[0294]
演示系统可以提供显示用户选择的车辆视图的视频监视器。该显示器的标称分辨率为1440x900,并且可以使用dvi信号接口。
[0295]
演示系统可以以至少30fps的速率从相机捕获图像,并以相同的速率将帧处理到显示器。显示器的实际刷新速率可能更高,但是系统处理的内容的更新速率可以至少为30fps。
[0296]
5.2.2硬件平台
[0297]
在一些实施例中,用于任何世界视图应用的计算平台可以是配备有三个标记为芯片1、芯片2和芯片3的hyperx
tm
处理器的hyperx
tm
开发系统。芯片1和2可以各自在具有千兆位以太网接口的板上提供,包括hyperx
tm
单元格形式的软件驱动程序,以发送和接收udp/ip
数据包,如图23中所示。软件i/o驱动程序单元格可以支持gige vision图片传输协议,并且每个芯片可以同时从两个相机接收视频。
[0298]
图19.芯片1和2资源
[0299]
在一些实施例中,芯片1和2可以各自具有这些附加能力和资源:
[0300]
1.四个外部存储器,每个外部存储器至少为128mb大小
[0301]
2.到左邻居的两个lvds i/o接口,原始带宽为125mw/s
[0302]
3.到右邻居的两个lvds i/o接口,原始带宽为125mw/s
[0303]
4.核心时钟设置为500mhz
[0304]
5.100个处理器元件和121个数据存储器路由器,少于用于千兆位以太网驱动程序单元格的处理器元件和数据存储器路由器。
[0305]
图24中所示的第三芯片被提供在具有用于视频输出的dvi接口的板上。可以提供软件视频输出驱动程序单元格,以允许从运行在芯片3上的hyperx
tm
应用通过板上的硬件线路驱动程序直接连接到标准dvi计算机监视器。
[0306]
在一些实施例中,芯片3可以具有以下附加能力和资源:
[0307]
1.三个可用的外部存储器,每个外部存储器至少为128mb大小
[0308]
2.到右邻居的两个lvds i/o接口,原始带宽为125mw/s
[0309]
3.核心时钟设置为425mhz(该速率用于1440x900x60fps dvi输出)
[0310]
4.100个处理器元件和121个数据存储器路由器,少于用于dvi输出驱动程序单元格的处理器元件和数据存储器路由器
[0311]
6.芯片设计
[0312]
先前的各节描述了用于以视频速率实时渲染视图图像的任何世界视图系统的系统设计。第3.2节描述了渲染系统可以执行的算法,并且第4.2.6节为其提供了软件模型。第5.2.1节描述了高级性能规范,并且在5.2.2节中描述了目标平台。
[0313]
在各种实施例中,针对该应用的系统设计可以有不止一种解决方案,并且不同的解决方案的实现细节可以不同。本节中描述的特定解决方案旨在满足规范要求,并支持单元格复用和设计可维护性的一般工程化目标。
[0314]
6.1三芯片设计
[0315]
在一些实施例中,由开发平台施加的体系架构约束可能是从两个不同芯片中的每个芯片上的两个相机接收视频。这可以使在两个芯片之间平均划分渲染处理的主要计算工作变得很方便。在一些实施例中,这可以通过高级工作负载分区来实现,如图25中所示。如图所示,从右到左,可以在标记为hx1和hx2的芯片1和芯片2中接收和处理视频。每个芯片上的处理可以利用对所有四个相机的视频样本的访问,因此两个芯片可以交换它们未直接接收的视频数据。
[0316]
标记为hx3的第三芯片可以从前两个芯片接收部分处理的视图块,并且可以完成渲染过程并将视频帧发送到dvi显示器。
[0317]
在以下各节中将更详细地描述三个芯片的内部设计。
[0318]
6.2芯片1和2设计
[0319]
图26图示了根据一些实施例的芯片1和2的数据流设计。如图所示,相机数据的gige vision输入位于图的右上方。处理网络可以包括以下元素中的一个或多个元素:
[0320]
1.两条并行路径用于解包并将输入图像写入到ddr外部存储器
[0321]
2.memsvr3和memsvrext3单元格允许将四个相机流存储在外部存储器中,其中两个来自本地以太网接口,另外两个来自另一个芯片
[0322]
3.blockinfo参数存储在不同的ddr外部存储器中并由生成单元格读取
[0323]
4.inputreader读取如在每个块的每个blockinfo参数中指定的边界框
[0324]
5.去马赛克组包括许多去马赛克单元格
[0325]
6.扭曲器组包括多个扭曲器单元格
[0326]
7.在一些通信信道上包括fifo,以吸收由于不同尺寸的blockinfo而引起的块处理速率的变化。
[0327]
8.来自芯片1和芯片2的输出可以是发送到芯片3的视图图像块的流。
[0328]
6.2.1去马赛克组
[0329]
demosaic_group单元格可以是具有两个输入和一个输出的单个单元格。在去马赛克组内,有许多去马赛克单元格和其它专用于工作负载分配的pe。根据一些实施例,demosaic_group单元格的内部结构在图27中示出。扭曲器组除了只有单个输入外可以具有类似的结构。
[0330]
6.3芯片3设计
[0331]
芯片3从芯片1和芯片2接收视图块的流,如图28中所示。它们可以被合并为单个流,使得可以将输出图像中的所有视图块一起考虑用于光度对准。对芯片3上的单元格的功能分析表明,每个功能可能不需要多于一个或两个pe(参见第5.1.3和5.1.4节)。
[0332]
光度对准复合单元格的输出可以是其最终形式的视图块的流。可以将这些块写入到外部存储器中的帧缓冲器。然后可以从外部存储器逐行读取完成的渲染帧,以通过dvi输出单元格进行显示。
[0333]
6.3.1光度对准复合单元格
[0334]
在一些实施例中,芯片3中的所有图像处理功能可以被光度对准复合单元格包围,如图29中所示。功能可以包括第3.2.3、3.2.4、5.1.3和5.1.4节中所述的增益估计、增益校正和混合。
[0335]
6.4系统设计目标
[0336]
可能存在不止一个系统设计,该系统设计可以为任何世界视图系统产生渲染的视图图像。选择前面的图和段落中描述的特定设计以满足许多常规设计目标,这些目标对于基于hyperx
tm
技术的大多数高度并行的实现而言是公共的。但是,这些特定设计参数仅旨在说明,并且应理解为利用其它设计参数和系统来实现本文描述的实施例是在本公开的范围内。
[0337]
6.4.1本地化
[0338]
在前面的各节中执行的不同功能可以被划分为不同的单元格。一些单元格,诸如外部存储器接口单元格,可以主要用于数据移动,而非计算。本地化可以是所选择的设计分解(例如,算法在许多单元格之间的划分)的重要目标。本地化可以被认为是指每个单元格可以在不知道设计中其它单元格正在执行的功能的情况下执行其功能。可以在其输入上接收单元格可以用来执行其任务的唯一信息,并且单元格可以仅发送要用于下游单元格执行其任务的工作产品。
[0339]
可以观察到任何世界视图系统中的本地化示例,因为设计中的许多单元格在处理视图块时不知道其工作负载属于哪个帧。每个块的功能可能相同。其它单元格可能负责跟踪帧边界并根据需要更新外部存储器中的帧指针。
[0340]
系统中单元格的界面可以证明设计中是否存在良好的本地化。如果每个单元格的接口尽可能简单,那么本地化可能良好。与其它一些设计分解相比,简单的接口可能具有少量的输入和输出端口,并且每个工作负载的输入和输出数据尺寸最小。
[0341]
着重于本地化的设计可以使得简单的单元格往往在设计和其它设计中重用。根据各种实施例,去马赛克和扭曲器组是设计内单元格重用的示例,并且外部存储器接口是可以在许多设计中重用的单元格的示例。
[0342]
6.4.2前馈
[0343]
在一些实施例中,可以利用前馈设计,其可以被理解为是指设计中的每个单元格从上游单元格接收数据、对数据执行其功能,然后将结果发送到下游单元格。该设计可能没有显式反馈通信,诸如将数据发送回设计中的上游单元格的单元格。
[0344]
纯粹前馈的设计可以具有用于流程控制和性能的简单模型。任何世界视图系统的期望吞吐量可以是每秒30帧,这可以转换成特定的块处理速率。如果设计中的每个单元格都能够以期望的速率执行其功能,那么只要设计中没有反馈路径,整个设计也可以达到性能目标。流程控制模型可以定位在每个单独的单元格内;每个单元格可以简单地依靠其上游邻居以期望的速率向其提供工作负载,并依靠下游邻居以期望的速率接受其产品。
[0345]
6.4.3分布式控制
[0346]
在一些实施例中,分布式控制的原理对于基于hyperx
tm
技术的并行处理应用以扩展到任意规模的计算可能是有利的。分布式控制可以被认为是指单元格仅从上游邻居接收其指令,并且仅向下游邻居发送指令。在一些实施例中,这可能是本地化的一个方面。
[0347]
分布式控制的反面是全局控制,其中一侧上可能存在控制器单元格,该控制器单元格正在通过星形或其它类型的通信拓扑向设计中的各种其它单元格发送指令。分布式控制的问题可能是同步。例如,全局控制单元格应何时发送指令?设计的一部分可能正在处理视频帧中与另一个部分所处理的不同的位置,这是因为它们之间的处理流水线所致。使用分布式控制,设计内的时间偏移可能不那么重要,并且可能不需要加以考虑。
[0348]
在任何世界视图系统中的分布式控制的示例可以在两组帧缓冲器中看到,一组用于源图像,并且另一组用于显示图像。从一帧前进到下一帧的决定可以在写入器和读取器单元格中本地处理。有利的是,在一些实施例中,这可以在不协调源图像缓冲器和显示图像缓冲器之间的帧同步的情况下实现。
[0349]
mps系统概述
[0350]
根据一些实施例,以下段落提供了关于用于多处理器系统(mps)的硬件配置的附加细节,该多处理器系统诸如hyperx
tm
体系架构或另一种类型的mps。
[0351]
描述了多处理器系统(mps)和相关联方法的各种实施例。多处理器系统(mps)可以被定义为包括多个处理元件(pe)的系统。mps可以具有散布在pe之间的多个存储器,或者可替代地可以具有单个共享存储器。如本文所使用的,术语“处理元件”是指处理器或cpu(中央处理单元)、微处理器或处理器核心。虽然mps可以包括两个或更多个pe中的任何一个,但要注意的是,一些mps可以包括比传统的计算机系统多得多的pe,传统的计算机系统通常仅
包含一个通用处理器(gpp)或几个gpp。例如,一些mps可以包括4、8、16、32或64个pe(其它示例包括例如数十个、数百个甚至数千个pe)。在一些实施例中,适用于大型mps的pe可能比传统计算机系统使用的通用处理器具有更高的能源效率,这是因为它们具有用于低功耗的特殊构造。
[0352]
mps还可以包括将pe和/或存储器互连的互连网络(in)。pe和存储器可以以一维、两维、三维或更多维互连,包括圆形维度(例如,环路(loop)或环(ring))。可以将维度更高的mps映射到维度更小的制造介质上。例如,可以将具有四维(4d)超立方体形状的mps映射到硅集成电路(ic)芯片的3d堆栈上,或映射到单个2d芯片上,甚至映射到计算单元的1d线上。同样,低维mps可以映射到更高维介质。例如,计算单元的1d线可以呈蛇形布置在ic芯片的2d平面上,或盘绕成3d芯片堆叠。mps可以包括多种类型的计算单元以及处理器和存储器的穿插布置。从广义上讲,mps还包括mps的层次结构或嵌套布置,尤其是由互连的ic芯片组成的mps,其中ic芯片包含一个或多个mps,它们也可能具有更深的层次结构。
[0353]
如本文所使用,术语mps既涵盖相对同质的处理器集合,也涵盖通用的异构集合以及集成在所谓的“平台ic”芯片上的专用处理器。平台ic芯片可以包含从几个到很多的处理器,通常与共享存储器以及可能片上网络互连。mps和“平台ic”芯片之间可能有差异,也可能没有差异。但是,可以销售“平台ic”芯片以解决特定垂直市场中的特定技术要求。
[0354]
一般而言,用于mps的存储器可以按层次结构进行组织,其中快速存储器位于顶部,速度较慢但容量较高的存储器在层次结构向下的每一步中。在mps中,位于层次结构顶部的支持存储器(sm)可以位于每个pe附近。每个支持存储器可以专用于仅保持指令或仅保持数据。特定pe的支持存储器可以是该pe专用的,或者与其它pe共享。
[0355]
在存储器层次结构的更下方,可以有更大的共享存储器,诸如半导体同步动态随机存取存储器(sdram),其比特容量比与每个pe相邻的支持存储器的容量大很多倍。sdram可以位于与pe和支持存储器分开的一个或多个ic芯片上,以专门其制造。在存储器层次结构的更下方,可能还有其它类型的存储器,诸如闪存、磁盘和光盘。
[0356]
mps可以用软件程序来编程以完成特定功能。每个功能可以由mps中的一个或多个pe执行。通常,多个程序可以在mps上彼此并发执行。通过采用并行处理技术,程序可以一起执行并彼此通信以执行更复杂的功能或更快地执行更简单的功能。pe之间的这种协调在本文中称为协作处理。
[0357]
mps可以足够快地执行应用或程序,以使其可以比相关联的数据源更快地接受输入数据和命令,并且命令可以提供它们并且可以提供具有足够低以致可以被忽略的时延的结果。这样的应用被称为实时没有延迟的操作,或者被称为“实时应用”。相关联的输入数据(或命令)可以被称为“实时数据”(或“实时”命令)。例如,mps可以经由输入信号接收实时数据。应用、程序或功能中的一个或多个可以处理输入信号,并可能基于一个或多个程序产生具有经修改或附加的实时数据的输出信号。
[0358]
图30

mps框图和概述
[0359]
图30是图示多处理器系统(mps)的一个实施例的框图。在所示的实施例中,mps 10包括多个处理器元件(pe)和多个数据存储器路由器(dmr),它们也可以被称为动态可配置的通信器或动态可配置的通信元件,其耦合以彼此传送数据和指令。如本文所使用的,pe也可以被称为pe节点,并且dmr也可以被称为dmr节点。
[0360]
处理系统(mps)10可以用于当前使用gpmc、dsp、fpga或asic的各种系统和应用中的任何一种。因此,例如,处理系统10可以用在各种类型的计算机系统或需要计算的其它设备中的任何一种中。在一个预期的实施例中,处理系统10用作数字视频显示系统中的信号处理设备。
[0361]
在一个实施例中,pe可以包括被配置用于操纵数据的一个或多个算术逻辑单元(alu)、被配置用于控制alu的一个或多个指令处理单元(ipu)、被配置用于保持指令或数据的一个或多个存储器,以及各种复用器和解码器。这样的实施例可以包括多个端口(“处理器端口”),其中一些可以被配置用于连接到dmr,而其它可以被配置用于连接到其它pe。
[0362]
在一个实施例中,dmr可以包括被配置为保持数据和指令的一个或多个随机存取存储器(ram)、可配置控制器、诸如交叉开关之类的网络交换机、寄存器和多路复用器。这样的实施例可以包括多个端口,其中一些端口可以被配置用于连接到pe(本文称为pe型端口),并且其它端口可以被配置用于连接到dmr(本文称为dmr型端口)。注意的是,对于任何给定的端口,无论是配置用于连接到dmr或pe还是从dmr或pe连接,在特定的时钟周期内可通过该给定端口传输的数据量在各种实施例中可能不同。例如,在一个实施例中,给定端口可以被配置为每个时钟周期传输一个数据字,而在另一个实施例中,给定端口可以被配置为每个时钟周期传输多个数据字。在又一个实施例中,给定端口可以采用诸如时分多路复用的技术来在多个时钟周期上传输一个数据字,从而减少包括该端口的物理连接的数量。
[0363]
在mps 10的一个实施例中,每个pe可以包括为指令保留的小的本地存储器,并且可以包括非常少的本地数据存储。在这样的实施例中,邻近每个pe的dmr可以被配置为向给定的pe提供操作数。在特定实施例中,对于许多pe指令,给定的pe可以在一个时钟周期中从相邻的dmr读取操作数、执行alu操作,并将alu结果存储到给定的相邻的dmr。因此,在紧接着执行之后的一个时钟周期内,来自一个pe的alu结果可以用于其它几个pe。以这种方式产生结果可以使相邻pe的执行紧密协调或“紧密耦合”。
[0364]
如本文所使用的,从给定的dmr或pe的角度来看,相邻的dmr或pe是指可以在特定的时延内从给定的dmr或pe访问的dmr或pe。在一些实施例中,定义相邻关系的程度的时延可以例如取决于诸如时钟速度的因素而变化。此外,在一些实施例中,可以定义多个相邻度,该多个相邻度可以对应于不同的访问时延。例如,在一个实施例中,“最近邻居”可以被定义为可以在数据被请求的相同时钟周期期间提供数据的设备,“最近邻居”可以被定义为可以在数据被请求之后的一个时钟周期内提供数据的设备,依此类推。在其它实施例中,可以预期,可以使用其它度量来量化相邻关系。
[0365]
在给定的mps实施例中,一些dmr和pe在逻辑上可以与其它dmr和pe相邻。如本文所使用的,“在逻辑上相邻”是指两个设备之间的关系,诸如一个dmr和另一个dmr,或一个dmr和一个pe,使得一个设备的一个或多个端口直接连接到其它设备的相应端口,而无需通过中间的dmr或pe。此外,在给定的mps实施例中,一些dmr和pe可以在物理上与其它dmr和pe相邻。如本文所使用的,“物理上相邻”是指两个设备(诸如一个dmr和另一个dmr,或者一个dmr和一个pe)之间的关系,使得没有其它dmr或pe物理上位于该两个设备之间。
[0366]
在一些mps实施例中,逻辑上和/或物理上相邻的诸如dmr和pe之类的设备也是相邻或邻居设备。但是,应该注意的是,在一些实施例中,给定的设备之间的逻辑和/或物理相邻并不意味着需要给定设备之间的相邻关系或特定程度的相邻关系。例如,在一个实施例
中,一个dmr可以直接连接到相距相当远的另一个dmr。这样的一对可能在逻辑上相邻但在物理上不相邻,并且从一个dmr到另一个dmr的信号传播时间可能太大而无法满足邻居的时延要求。类似地,在一个实施例中,一个dmr可以在物理上与另一个dmr相邻,但是不直接与其连接,因此在逻辑上不与其相邻。从一个dmr到另一个dmr的访问可能会遍历一个或多个中间节点,并且所产生的传输延迟可能太大而无法满足邻居的时延要求。
[0367]
取决于mps 10的给定实施例的技术和实现,可以将特定数量的dmr的多个端口以及dmr存储器的尺寸与dmr的总体期望执行速度和尺寸进行平衡。例如,一个dmr实施例可以包括4个pe型端口、4个dmr型端口和4k字的存储器。这样的dmr实施例可以被配置为提供直接存储器访问(dma)机制。dma机制可以允许给定的dmr在pe正在计算结果的同时向其它dmr或从其它dmr或向mps 10外部的位置或从mps 10外部的位置高效地复制数据。
[0368]
在mps 10的一个实施例中,可以以几种不同方式之一在dmr之间传输数据和指令。可以将串行总线提供给mps 10中的所有存储器;这样的总线可以用于从外部存储器初始化mps 10或支持对mps数据结构的测试。对于短距离传输,可以对给定的pe进行编程,以直接将数据移入或移出其邻居dmr。为了在更长的距离上传输数据或指令,可以在dmr的网络中动态创建和销毁通信通路。
[0369]
为了这种更长距离的数据传输,mps 10内的互连dmr网络可以构成用于通信通路的交换路由架构(srf)。在这样的实施例中,可能存在至少两种用于管理srf中的通信通路的方法。第一种方法是通过全局编程,其中可以通过软件控制(例如,由人类程序员或具有路由能力的编译器)选择路径,并且可以将指令编码到dmr配置控制器中以对交叉开关进行适当编程。为了创建通路,可以使用特定的路由功能对沿着通路的每个dmr进行显式编程。在频繁创建和销毁通路的动态环境中,可能需要大量的交叉开关配置代码,其存储可能进而消耗潜在有限的dmr ram资源。
[0370]
用于管理通信通路的第二种方法被称为“虫洞路由”。为了实现虫孔路由,每个dmr可以包括导向功能集合和通过srf停止和重启字(被称为消息)序列的进展的机制。因为导向功能可能会被所有通信通路共同使用和重复使用,因此可能占用dmr ram的配置代码量可能比上述全局编程方法小得多。对于虫洞路由方法,软件控制仍可以用于选择要由通路使用的特定链接,但是通路创建(本文也称为建立)和破坏/链接释放(本文也称为“拆除”)的处理可以用最少的软件干预在硬件中实现。
[0371]
为了防止通路上的数据字的潜在丢失,mps 10的实施例可以实现沿着通路在接收器和发送器之间的流程控制。流程控制是指可以在发送器的对应接收器不再接收数据时停止发送器,并在发送器的对应接收器准备好接收数据时重启发送器的机制。由于停止和重启通路上的数据流程与在虫洞路由中停止和重启消息的进度有许多相似之处,因此可以将两者组合为集成方案。
[0372]
在一个实施例中,mps 10可以包括以均匀阵列连接在一起的多个pe和dmr,这些pe可以是相同的,并且这些dmr可以是相同的。在均匀阵列中,大多数pe可以是相同的,并且大多数pe中的每一个可以具有与dmr相同数量的连接。而且,在均匀阵列中,大多数dmr可以是相同的,并且大多数dmr中的每一个可以具有与其它dmr和pe相同数量的连接。在一个mps实施例中,pe和dmr可以以基本上同质的方式散布。如本文所使用的,基本上同质的散布是指其中pe与dmr的比率在阵列的大部分子区域上一致的布置。
[0373]
以基本同质的方式布置的均匀阵列可以具有某些有利的特性,诸如提供可预测的互连模式并使软件模块能够在整个阵列上重复使用。在一个实施例中,均匀的阵列可以使得能够设计和测试pe和dmr的少量实例。然后,可以通过制造包括dmr和pe的单元,然后多次重复或“平铺(tiling)”这种单元来组装系统。这种方法可以通过重复使用公共系统元素来降低设计和测试成本。
[0374]
还应该注意的是,pe和dmr的可配置性质可以允许将各种各样的非均匀行为编程为在物理均匀的阵列上发生。但是,在替代实施例中,mps 10也可以形成有非均匀的dmr和pe单元,其可以以规则或不规则的阵列或者甚至以随机的方式连接。在一个实施例中,pe和dmr互连可以被实现为例如集成电路(ic)、陶瓷基板或印刷电路板(pcb)上的电路迹线。但是,在替代实施例中,此类互连可以是各种微型通信链路中的任何一种,诸如例如用于电磁能(即,无线电或光能)的波导、无线(即,非引导)能量、粒子(诸如电子束),或分子上的势能。
[0375]
mps 10可以在单个集成电路上实现。在一个实施例中,多个mps集成电路可以组合以产生更大的系统。mps 10的给定实施例可以使用硅集成电路(si

ic)技术来实现,并且可以采用各种特征来考虑这种技术的特定特性。例如,可以将si

ic芯片上的电路限制在薄平面上。相应地,mps 10的给定实施例可以采用pe和dmr的二维阵列,诸如图30中所示。但是,可以预期包括pe和dmr的不同布置的替代mps实施例。
[0376]
此外,si

ic芯片上的可用布线密度可能远高于此类芯片之间的布线密度,并且每个芯片可能具有专用输入/输出(i/o)电路的周边以对接片上信号和片外信号。相应地,mps 10的给定实施例可以采用稍微不均匀的阵列,该阵列由芯片核心中的pe和dmr的均匀阵列以及沿着芯片周边的经修改的pe/dmr单元组成。但是,可以预期包括均匀和经修改的pe/dmr单元的不同布置和组合的替代mps实施例。
[0377]
此外,由si

ic电路执行的计算操作可能产生热量,该热量可以通过ic封装被去除。增加的ic封装可能需要附加的空间,并且通过ic封装及其周围的互连可能会导致与路径长度成比例的延迟。因此,如上所述,可以通过互连多个芯片来构造非常大的mps。这样的多芯片mps实施例的编程可以考虑芯片间信号延迟比芯片内延迟长得多。
[0378]
在给定的si

ic mps 10实施例中,可以在单个芯片上实现的pe和dmr的最大数量可以通过可能用给定的si

ic技术实现的小型化以及每个pe和dmr的复杂性来确定。在这样的mps实施例中,可以在达到计算吞吐量的目标水平的情况下使pe和dmr的电路复杂度最小化。这种最小化的pe和dmr在本文中可以被称为被简化(streamlined)。在一个mps 10实施例中,pe的吞吐量的目标水平可以与以相同si

ic技术制造的最佳数字信号处理器(dsp)的算术执行单元的目标水平相当。但是,可以预期可以其中使用用于目标pe吞吐量的替代参考的其它mps实施例。
[0379]
在一些实施例中,mps 10可以采用dsp和fpga体系架构的最佳特征。像dsp一样,mps 10可以是具有多个处理单元和片上存储器的可编程芯片。但是,相对于dsp,mps处理单元可以被简化、可以有更多的处理单元,并且它们可以以新颖的方式互连,以使它们之间的数据移动以及芯片上和芯片外的数据移动的带宽最大化。具有比dsp多的处理单元可以允许mps 10每单位时间进行更多的乘法运算,并且简化的处理单元可以使能耗最小化。许多具有内部并行性的dsp可能是面向总线的体系架构。在一些实施例中,mps 10可以不包括总
线,而是可以包括嵌入在srf中诸如在dmr中的相邻共享本地存储器,其可以提供比面向总线的体系架构高得多的总带宽。
[0380]
与fpga方法相比,一些mps实施例可能粒度更粗糙。例如,在一个mps实施例中,如果操作使用自然字长的倍数的数据来执行,那么操作可以具有自然字长(例如,16位)并且计算可以是最高效的。在一些mps实施例中,pe和dmr可能比fpga中实现的等效结构更密集,这可能导致平均布线长度更短、布线电容更低以及能耗更少。与fpga实现相比,在一些mps实施例中,mps中的每个alu可以是处理器(即,pe)的一部分,这可以促进操作数的获取以及将结果写回到dmr中的周围快速存储器。针对alu、取回和写回操作的时序和时钟偏斜问题可以在ic芯片设计期间解决一次,而不必像在典型的fpga实现那样在每个新应用中都需要重新解决。
[0381]
mps拓扑和通信
[0382]
图30中所示的mps 10通过在pe之间散布dmr可以为pe提供到快速存储器的充足连接,如图所示。相对于分离的(即,非散布的)布置,这样的布置可以减少给定的pe访问dmr中的存储器所需的时间,并且在本文中可以被称为散布的网格布置。在图3的实施例中,pe与dmr的比率大约为1:1。但是,预期了可以包括pe与dmr的不同比率的其它mps实施例。
[0383]
在图3中未明确示出dmr与pe之间的连接,因为使用不同类型和数量的连接可以存在许多可能的连接方案。
[0384]
图31

mps连接方案
[0385]
图31是图示mps连接方案的一个实施例的框图。mps连接方案20包括多个dmr和pe,并且可以说明图30的mps的一部分。在mps连接方案20中,每个pe连接到四个邻居dmr,而每个dmr连接到四个邻居pe以及四个邻居dmr。因此,mps连接方案20可以说明上面讨论的planara连接方案。
[0386]
为了在mps连接方案20中支持高带宽端口,端口之间的连接(pe到dmr或dmr到dmr)可以是短的(即,限于邻居)和字宽的,这意味着连接的数据部分中的电导体(线)的数量可以与alu操作数中使用的位数相同。pe到dmr连接可以包括地址线。dmr到dmr连接可以不一定具有地址线,但可以具有用于流程控制的线。
[0387]
通过保持pe节点简单,可以以适度的成本在单个vlsi ic上放置大的阵列(例如,在一个mps实施例中,16行乘以16列=256pe)。合适的vlsi技术可以包括但不限于互补金属氧化物半导体(cmos)场效应晶体管,在硅或其它半导体中带有或不带有双极晶体管。
[0388]
在一些mps实施例中,节点之间的通信可以在程序员的控制下。在mps中,每个pe可以与相邻的dmr传送数据/指令,并且可选地通过那些dmr与其它dmr和pe通信。这对于短距离传输少量数据非常有效。但是,对于更大的数据块或更长的距离,使用dma引擎移动数据更高效,从而释放pe来执行alu操作。
[0389]
对于更长距离的块移动,一些mps实施例可以提供用于在不涉及pe的情况下在dmr之间进行存储器到存储器的传输的部件。pe可以通过与此类端口相关联的特殊sm地址间接访问邻居dmr中的dmr类型的端口。这可以允许pe创建用于发送消息的新通路,并且随后将这种通路拆除,或者可替代地接收消息。pe还可以将要传输的数据块保存在邻居dmr中的sm缓冲器中,然后通过与此类操作相关联的特殊sm地址指示邻居dmr开始dma操作。这可以允许pe在邻居dmr协调数据的dma传输时继续其它任务。
[0390]
mps的各种实施例可以提供用于执行有用算法的有利环境。关注的算法(例如,用于分析图像数据)可以分解成alu的流程图。每个流程图可以作为树、晶格或任何任意网络(包括多个反馈/前馈路径)映射到mps阵列上。通过组合几个pe和dmr,可以扩展一个alu的有限精度,以获得多字的精确结果。当将流程图映射到mps时,与节点之间的距离成比例的pe/dmr节点之间的通信延迟可能会升高。另外,如果通信队列很大或者如果重新配置频繁,那么映射可能需要在每个节点处有更多的存储器。这些因素可以通过仔细编程来补偿,这些编程可以考虑通信延迟、排队和重新配置。
[0391]
收缩(systolic)算法表示可以特别高效地映射到mps的各种实施例的一类算法。收缩算法已被开发用于矩阵算术、图像处理和信号处理中的各种应用。在收缩算法中,许多处理器可以以同步方式协作以执行困难的计算。在理想的算法实现中,只要需要算法,每个处理器就可以反复执行相同的操作(或小的操作循环),并且数据可以通过相邻连接流经处理器的网络,平衡生产和数据字的消耗。如果然后产生的每个中间结果数据字立即被后续计算消耗,那么所需的存储器量可以被最小化。收缩算法的优势可以包括使用简化的处理器、最小化存储器需求以及使用标准的低成本vlsi技术实现高算术运算速率的能力。
[0392]
mps实施例每个芯片可以具有许多处理器和整个mimd体系架构,其可以被配置为模拟其它类系统(诸如simd系统和分布式mimd系统)的操作。在一些实施例中,mps可以同时在芯片的不同区域中运行不同的算法。而且,为了节省功率,在一些实施例中,程序员可以选择性地启用和禁用至少一些pe和dmr的时钟。因此,未使用的pe和dmr可以被禁用。
[0393]
pe/dmr架构
[0394]
图32是图示mps架构的一个实施例的更详细的图。在图32中,每个pe都被四个dmr围绕,可以与它们传送存储器请求和消息。每个dmr被四个其它dmr围绕,不同之处在于它靠近其可能与芯片i/o端口相邻的架构边缘。每个dmr可以与相邻的dmr或芯片i/o端口通信以建立通信通路并在所述通路上发送/接收消息。
[0395]
mps操作
[0396]
图33图示了根据图32的体系架构示例的示例mps,该示例mps由均匀地散布有9x 9阵列的dmr(圆圈)的8x 8阵列的pe(正方形)组成。程序可以被编译成分配给pe的任务。第一个示例程序已使用taskid=62进行编译,并已分配给数组左上角的特定pe。变量(u,v,w)在程序源代码中声明为通信变量,并分配给相邻dmr中的特定存储器地址;u和v是用于i/o端口的缓冲器,并且w是与其相关联的dmr进行片上网络通信的缓冲器。第二个示例程序已使用taskid=71进行编译,并已分配给阵列内部的特定pe。变量x是声明的通信变量,并分配给所示的dmr。与变量x相关联的通信通路从其分配的dmr经由其它dmr到达最上一行的i/o端口。如图所示,这两个示例程序彼此不通信,但是可以通过向任务71添加另一个通信变量以及在其dmr和与任务62相邻的dmr中的变量w之间的通路来使它们容易地通信。
[0397]
***
[0398]
本公开的实施例可以以各种形式中的任何形式来实现。例如,在一些实施例中,本发明可以被实现为计算机实现的方法、计算机可读存储器介质或计算机系统。在其它实施例中,可以使用一个或多个定制设计的硬件设备(诸如asic)来实现本发明。在其它实施例中,可以使用一个或多个可编程硬件元件(诸如fpga)来实现本发明。
[0399]
在一些实施例中,非暂态计算机可读存储器介质可以被配置为使得其存储程序指
令和/或数据,其中如果程序指令由计算机系统执行,那么该程序指令使计算机系统执行方法,例如,本文描述的方法实施例中的任何一种、或本文描述的方法实施例的任何组合、或本文描述的方法实施例中的任何一种的任何子集、或此类子集的任何组合。
[0400]
在一些实施例中,计算设备可以被配置为包括处理器(或处理器集合)和存储器介质,其中存储器介质存储程序指令,其中处理器被配置为从存储器介质中读取和执行程序指令,其中程序指令是可执行的,以实现本文描述的各种方法实施例中的任何一种(或本文描述的方法实施例的任何组合、或本文描述的方法实施例中的任何一种的任何子集、或此类子集的任何组合)。设备可以以各种形式中的任何一种来实现。
[0401]
虽然以上已经描述了具体实施例,但是即使在关于特定特征仅描述单个实施例的情况下,这些实施例也不旨在限制本公开的范围。除非另有说明,否则本公开中提供的特征的示例旨在是说明性的而非限制性的。上面的描述旨在涵盖对于受益于本公开的本领域技术人员将显而易见的这样的替代、修改和等同形式。
[0402]
本公开的范围包括本文(明确地或隐含地)公开的任何特征或特征的组合或其任何概括,无论其是否减轻了本文所解决的任何或所有问题。因此,可以在本申请(或要求其优先权的申请)的过程期间针对特征的任何这种组合制定新的权利要求。特别地,参考所附权利要求,可以将从属权利要求中的特征与独立权利要求中的特征进行组合,并且可以以任何适当的方式而不是仅以所附权利要求中列举的具体组合来组合相应独立权利要求中的特征。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1