低功率DMA标记转让专利

申请号 : CN201580069388.3

文献号 : CN107111862A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : R·S·哈拉登M·R·塔布斯A·J·姆弗R·A·谢勒

申请人 : 微软技术许可有限责任公司

摘要 :

描述了用于在像素数据从第一存储器(例如,DRAM)到第二存储器(例如,本地高速缓存)的数据传输期间使用直接存储器访问(DMA)引擎来预处理像素数据的各种方法。像素数据可从其中各个像素值不是八位的倍数的图像捕捉设备(例如,彩色相机或深度相机)中导出。在一些实施例中,DMA引擎可以在像素数据被写入第二存储器之前对像素数据执行各种图像处理操作。在一个示例中,DMA引擎可被配置成标识一个或多个像素并将该一个或多个像素标记为在特定的像素值范围内,并且/或者DMA引擎可被配置成基于像素的像素值将这些像素标记为属于一个或多个像素组。

权利要求 :

1.一种用于使用DMA引擎来处理图像的方法,包括:获取针对所述DMA引擎的配置设置,所述配置设置包括最大像素值阈值和最小像素值阈值;

使用所述DMA引擎来发起从第一存储器到第二存储器的所述图像的数据传输;

获取与所述图像的第一部分相关联的第一像素集;

基于与所述第一像素集、所述最大像素值阈值和所述最小像素值阈值对应的第一集合的像素值来生成一个或多个像素分组;

将所述第一像素集的第一像素指派到所述一个或多个像素分组中的第一像素分组;

更新所述第一像素以嵌入所述第一像素分组的标识;以及将经更新的第一像素写入所述第二存储器。

2.如权利要求1所述的方法,其特征在于:所述的更新所述第一像素包括将指定所述第一像素分组的元数据标签嵌入在所述第一像素的未使用的位内。

3.如权利要求1到2中任一项所述的方法,其特征在于:所述第一像素包括不是八位的倍数的第一像素值。

4.如权利要求1到3中任一项所述的方法,其特征在于:所述图像包括深度图像。

5.如权利要求1所述的方法,其特征在于,还包括:确定所述图像包括深度图像,所述配置设置包括针对深度像素的最大像素值阈值、针对深度像素的最小像素值阈值、针对彩色像素的最大像素值阈值以及针对彩色像素的最小像素值阈值;以及所述的生成一个或多个像素分组包括响应于所述的确定所述图像包括深度图像,基于所述针对深度像素的最大像素值阈值和所述针对深度像素的最小像素值阈值来生成所述一个或多个像素分组。

6.如权利要求5所述的方法,其特征在于:所述针对深度像素的最大像素值阈值对应于距被用于生成所述深度图像的捕捉设备的第一距离,并且所述针对深度像素的最小像素值阈值对应于距所述捕捉设备的小于所述第一距离的第二距离。

7.如权利要求1到6中任一项所述的方法,其特征在于:所述第一存储器包括DRAM,而所述第二存储器包括SRAM。

8.如权利要求1所述的方法,其特征在于,还包括:生成与所述一个或多个像素分组相关联的像素组信息,所述像素组信息包括所述第一像素分组的中点像素值;

将所述像素组信息写入与中断请求相关联的存储器位置;以及将所述中断请求发送到与所述第二存储器通信的处理器。

9.如权利要求8所述的方法,其特征在于:所述配置设置包括最大数量的像素分组;

所述的生成一个或多个像素分组包括基于所述最大数量的像素分组来生成所述一个或多个像素分组;以及所述像素组信息包括指示已超过所述最大数量的像素分组的溢出标志。

10.如权利要求1所述的方法,其特征在于:所述第一像素集对应于能够通过将所述第一存储器连接到所述第二存储器的存储器总线被并发地传送的最大数量的像素。

11.如权利要求1所述的方法,其特征在于,还包括:基于所述第一集合的像素值来确定最小数量的新的像素分组;以及所述的生成一个或多个像素分组包括基于所述最小数量的新的像素分组来生成所述一个或多个像素分组。

12.一种DMA引擎,包括:

存储器,所述存储器储存针对所述DMA引擎的配置设置,所述配置设置包括最大像素值阈值和最小像素值阈值;以及与所述存储器通信的一个或多个处理器,所述一个或多个处理器发起图像从第一存储器到第二存储器的图像的数据传输,所述一个或多个处理器获取与所述图像的第一部分相关联的第一像素集,所述一个或多个处理器基于与所述第一像素集和所述配置设置对应的第一集合的像素值来生成一个或多个像素分组,所述一个或多个处理器将所述第一像素集中的第一像素指派到所述一个或多个像素分组中的第一像素分组,所述一个或多个处理器更新所述第一像素以嵌入所述第一像素分组的标识,并将经更新的第一像素写入所述第二存储器。

13.如权利要求12所述的DMA引擎,其特征在于:所述一个或多个处理器更新所述第一像素以将指定所述第一像素分组的元数据标签嵌入在所述第一像素的未使用的位内。

14.如权利要求12到13中任一项所述的DMA引擎,其特征在于:所述图像包括深度图像。

15.如权利要求12到14中任一项所述的DMA引擎,其特征在于:所述第一存储器包括DRAM,而所述第二存储器包括SRAM。

说明书 :

低功率DMA标记

[0001] 背景
[0002] 一些计算系统提供了其中可以使用姿势或口头命令来控制系统的自然用户界面。例如,这些系统可包括用于捕捉环境的图像以检测运动并标识姿势的彩色相机(例如,RGB相机)和/或深度相机。深度相机可包括利用飞行时间(TOF)或结构化光技术来获得深度信息的主动照明深度相机。彩色相机可将环境的一部分捕获为彩色图像,而深度相机可将环境的一部分捕获为深度图。深度图可包括环境的二维图像,该图像包括与从特定参考点(诸如与深度相机相关联的点)到环境内的对象的距离有关的深度信息。二维图像中的每个像素可与表示距该特定参考点的直线距离的深度值相关联。
[0003] 可使用各种技术来生成深度图,诸如结构化光照明和飞行时间技术。结构化光照明涉及将光图案投射到环境中,捕捉反射的光图案的图像,然后从相对于所投射的光图案的、与反射的光图案相关联的间隔和/或畸变确定距离信息。光图案可使用对裸眼不可见的光(例如,IR或UV光)来投射且可包括单点、单线或各种维度图案(例如,水平和垂直线、或棋盘图案)。飞行时间技术可通过对从光源发射的光行进到对象并反射回图像传感器所花费的时间进行计时来确定到环境内的对象的距离。在一些情况中,短光脉冲(或一系列光脉冲)可在第一时间点被投射到环境中,与该短光脉冲相关联的反射可在第一时间点之后的第二时间点被捕获。飞行时间系统可调整第一时间点和第二时间点之间的时间差,以便检测与时间差相关联的特定距离处(或距离的范围上)的对象。
[0004] 概述
[0005] 描述了用于在像素数据从第一存储器(例如,DRAM)到第二存储器(例如,本地高速缓存或SRAM)的数据传输期间使用直接存储器访问(DMA)引擎来处理像素数据的技术。像素数据可从其中各个像素值不是八位的倍数的图像捕捉设备(例如,彩色相机或深度相机)中导出。在一些实施例中,DMA引擎可在像素数据被写入第二存储器之前对像素数据执行各种图像处理操作。在一个示例中,DMA引擎可被配置成标识一个或多个像素并将该一个或多个像素标记为在特定的像素值范围内,并且/或者DMA引擎可被配置成基于像素的像素值将这些像素标记为属于一个或多个像素组。
[0006] 提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。本概述并非旨在标识出要求保护的主题的关键特征或必要特征,亦非旨在用作辅助确定要求保护的主题的范围。
[0007] 附图简述
[0008] 图1是联网计算环境的一个实施例的框图。
[0009] 图2描绘了利用深度感测以执行对象和/或姿势识别的计算系统的一个实施例。
[0010] 图3描绘了包括捕捉设备和计算环境的计算系统的一个实施例。
[0011] 图4描绘了计算系统的一部分的一个实施例。
[0012] 图5A描绘了示出用于可被嵌入在像素数据内的4位元数据标签的映射的表的一个实施例。
[0013] 图5B描绘了基于经由DMA引擎被传送的像素数据生成的元数据的一个实施例。
[0014] 图6A描绘了示出用于可被嵌入在像素数据内的4位元数据标签的映射的表的一个实施例。
[0015] 图6B描绘了包括被嵌入在图像的一部分内的一个或多个元数据代码的该图像的该部分的一个实施例。
[0016] 图6C描绘了包括被嵌入在图像的一部分内的元数据代码的该图像的该部分的一个实施例。
[0017] 图7A是描述用于使用DMA引擎来预处理像素数据的方法的一个实施例的流程图。
[0018] 图7B是描述用于使用DMA引擎来预处理像素数据的方法的替代实施例的流程图。
[0019] 图7C是描述用于使用与经预处理的像素数据相关联的元数据的方法的一个实施例的流程图。
[0020] 图8描绘了计算系统环境的一个实施例。
[0021] 详细描述
[0022] 描述了用于在像素数据从第一存储器(例如,DRAM)到第二存储器(例如,由CPU使用的本地高速缓存或SRAM)的数据传输期间使用直接存储器访问(DMA)引擎来预处理像素数据的技术。像素数据可从其中各个像素值不与字节边界对应(即,像素值不是八位的倍数)的图像捕捉设备(例如,彩色相机或深度相机)中导出。在一些情况下,像素数据可包括可以使用两个字节的数据来储存(例如,以帮助下游处理)的10位数据值或12位数据值。像素值可与颜色信息和/或深度信息对应。在一个示例中,像素值可包括10位颜色值(例如,10位红色值、10位绿色值和10位蓝色值)。在另一示例中,像素值可包括12位深度值。在一些实施例中,DMA引擎可被配置成当像素数据被传送到本地存储器时生成与像素数据相关联的元数据,并接着将该元数据储存在本地存储器内。在一个示例中,元数据可被储存在本地存储器的与中断向量相关联的一部分中,或者被储存在供储存每个像素值的两个字节的未使用的位内。在像素值为10位数据值的情况下,元数据于是可被写入两个字节的数据的六个未使用位中。
[0023] 使用DMA引擎执行对像素数据的预处理操作以及在一些情况下将在预处理操作期间生成的元数据嵌入在像素数据中的益处可包括用于在系统级执行涉及像素数据的各种类型的图像处理操作的能量和/或功率方面减少。预处理操作还可(例如,通过允许处理器跳过已被标记或被贴标签为不包括在特定的感兴趣范围内的像素值的数据)提高性能。
[0024] 在一些实施例中,DMA引擎可在像素数据被写入可由处理器直接访问的本地存储器之前对像素数据执行各种图像处理操作。在一个示例中,DMA引擎可被配置成基于由处理器提供给DMA引擎的最小和最大像素值阈值来确定与像素数据对应的一个或多个像素是否可被处理器无效或跳过。在另一示例中,DMA引擎可被配置成标识一个或多个像素并将该一个或多个像素标记为在特定的像素值范围内(例如,以标识并标记具有50和80之间的像素值的像素)。在另一示例中,DMA引擎可被配置成基于像素的像素值将这些像素标记为属于一个或多个像素组。在一些情况下,当像素数据被传送到本地存储器时,DMA引擎可确定一个或多个像素组(例如,多达八个不同的像素组),并且随后当像素数据经由DMA引擎被传送到本地存储器时,将每个像素指派或标记为属于一个或多个像素组中的一个。
[0025] DMA引擎可生成与在数据传输期间执行的图像处理操作相关联的元数据,诸如哪些像素基于像素值阈值是有效或者无效的、哪些像素组被生成,以及特定像素已被指派到哪个组。元数据可被储存在与处理器可以发送到处理器的中断相关联的存储器位置中或者使用由像素值被写入两个字节值的数据中以便适合在字节边界内而造成的像素数据中未使用的位来被储存。例如,如果12位像素值被写入两个字节值的数据中,则每个像素值具有可被用于储存由DMA引擎生成的元数据的额外四位的信息。
[0026] 在使用已被传送到本地存储器中的图像的一部分来执行图像处理计算之前,处理器可首先读取与该图像的一部分相关联的元数据,以便确定该图像的一部分内的任何像素值是否需要附加的数据处理。在一个示例中,处理器可读取与该图像的一部分相关联的元数据,并确定该图像的一部分内的像素都不是有效的,或者都不包括特定的像素值范围内的像素值。在另一示例中,处理器可读取与该图像的一部分相关联的元数据,确定仅该图像的一部分内的像素的子集包括特定深度范围内(例如,在1米与1.5米之间)的像素值,并跳过该图像中不是该子集的一部分的部分。
[0027] 在一些实施例中,处理器可配置DMA引擎以取决于由处理器执行的图像处理操作(例如,边缘检测操作或连通分量操作)来执行特定的预处理操作。为了支持图像处理操作,DMA引擎可被配置成基于最小阈值(例如,任何像素组中的最小像素值必须大于或等于50)、最大阈值(例如,任何像素组中的最大像素值必须小于或等于240)、每个像素组的大小或范围(例如,增量可被用来指定相对于中点像素值的经允许的像素值)以及可被生成的像素组的最大数量(例如,最多八个像素组可被生成)来确定像素分组。最大和最小像素值阈值以及每个像素组的范围可被设置,并且取决于正被DMA引擎操作的像素的类型(例如,像素是表示颜色值还是深度值)而变化。每个像素组的像素值范围可为相同的大小或者不同的大小(例如,像素组的第一集合可与第一增量对应,而像素组的第二集合可与大于第一增量的第二增量对应)。在需要多于最大数量的像素组的情况下,可设置元数据内的溢出标志,从而指示溢出已发生并指示最大数量的像素组不足够大来表征在数据传输期间被传送的所有像素值。
[0028] 在一些情况下,针对DMA引擎的配置设置(例如,最小和最大像素值阈值以及每个像素组的范围)可以在每次DMA数据传输期间变化,根据使用DMA引擎传送的每幅图像变化,或者根据每次所传送的图像的一部分而变化。在一个示例中,当DMA引擎在第一时间段期间将像素数据的第一集合传送到本地存储器时,DMA配置设置的第一集合可被应用以生成像素分组的第一集合。当DMA引擎在第一时间段之后的第二时间段期间将像素数据的第二集合传送到本地存储器时,不同于DMA配置设置的第一集合的DMA配置设置的第二集合可被应用以生成像素分组的第二集合。像素数据的第一集合可与从图像捕捉设备捕获的第一图像对应,而像素数据的第二集合可与从图像捕捉设备捕获的第二图像对应。在一个实施例中,对图像执行边缘检测操作的处理器可将图像划分成多个图像块。如果处理器已将边缘像素标识成与第一像素值和第二像素值之间的像素值相关联,则处理器可将DMA引擎配置成在像素的像素值在第一值(例如,特定像素组的最小值)和第二值(例如,特定像素组的最大值)之间的情况下将这些像素标记成属于该特定像素组。
[0029] 在一个实施例中,DMA引擎可包括可以储存128字节的数据(或者另一大小的数据,例如足以储存DRAM突发大小的大小)的存储器缓冲器。当图像(例如,64KB的数据)经由DMA引擎被传送时,位于存储器缓冲器内的像素值可被操作,以便生成与该图像相关联的元数据。在一些情况下,将防止两个或更多个像素分组的像素值范围之间的重叠的中点像素值可被标识。在每个像素包括每像素两个字节的情况下,DMA引擎可在64个像素(即128B/2B)上同时或并行地执行操作。在另一实施例中,DMA引擎可基于由DMA引擎使用的用于传送图像的数据总线的宽度(例如,64位或128位)来执行使用多个像素的操作(例如,生成和指派像素分组)。在每个像素包括每像素两个字节的情况下,DMA引擎可同时或并行地对四个像素(对于64位数据总线)或八个像素(对于128位数据总线)执行操作。
[0030] 图1是可在其中实施所公开的技术的联网计算环境100的一个实施例的框图。联网计算环境100包括通过一个或多个网络180互连的多个计算设备。所述一个或多个网络180允许一特定计算设备连接到另一计算设备以及与其通信。所描绘的计算设备包括计算环境11、捕捉设备12和服务器15。计算环境11可包括服务器、游戏控制台或个人计算机。在一些实施例中,此多个计算设备可包括未示出的其他计算设备。在一些实施例中,此多个计算设备可包括比图1所示的计算设备的数目更多或更少的计算设备。一个或多个网络180可包括诸如企业专用网络之类的安全网络、诸如无线开放式网络之类的不安全网络、局域网(LAN)、广域网(WAN)以及互联网。一个或多个网络180中的每个网络可包括集线器、网桥、路由器、交换机以及诸如有线网络或直接有线连接之类的有线传输介质。
[0031] 计算环境11的一个实施例包括网络接口115、处理器116、DMA引擎118以及存储器117,所有这些都彼此通信。网络接口115允许计算环境11连接到一个或多个网络180。网络接口115可包括无线网络接口、调制解调器、和/或有线网络接口。处理器116允许计算环境
11执行被储存在存储器117中的计算机可读指令以执行在此讨论的过程。
[0032] DMA引擎118可独立于处理器116来促成对存储器117的访问。在一些情况下,处理器116可发起到存储器117的数据传输并且配置DMA引擎118来控制该数据传输。然后,DMA引擎118可生成存储器地址并向存储器117发起读和/或写周期,并且在已完成数据传输之后向处理器116提供中断。DMA引擎118可包括控制逻辑、存储器地址寄存器、字节计数寄存器、存储器缓冲器以及一个或多个控制寄存器。一个或多个控制寄存器可被用来确定数据传输的方向和在数据传输期间要被传送的字节数。在一些情况下,DMA引擎118可执行图像处理操作或图像预处理操作。
[0033] 在一些实施例中,计算环境11可包括一个或多个CPU和/或一个或多个GPU。在一些情况下,计算环境11可将CPU和GPU功能集成在单块芯片上。在一些情况下,该单块芯片可将通用处理器执行与计算机图形处理(例如3D几何处理)以及包括GPGPU计算在内的其他GPU功能集成在一起。计算环境11还可包括用于加速图形处理或执行其他专门处理任务的一个或多个FPGA。在一个实施例中,计算环境11可包括与共享RAM通信的CPU和GPU。共享RAM可包括DRAM(例如,DDR3SDRAM)。
[0034] 服务器15可允许客户端或计算设备从该服务器下载信息(例如,文本、音频、图像和视频文件)或者执行与被储存在该服务器上的特定信息相关的搜索查询。在一个示例中,计算设备可从服务器15下载内容或者将内容上传到服务器15。一般而言,“服务器”可以指在客户端-服务器关系中充当主机的硬件设备或者与一个或多个客户端共享资源或为该一个或多个客户端执行工作的软件过程。客户端-服务器关系下的计算设备之间的通信可通过由客户端向服务器发送要求访问特定资源或执行特定工作的请求来发起。服务器随后可以执行所请求的动作并且将响应发送回客户端。
[0035] 服务器15的一个实施例包括网络接口155、处理器156和存储器157,所有这些都彼此通信。网络接口155允许服务器15连接到一个或多个网络180。网络接口155可包括无线网络接口、调制解调器和/或有线网络接口。处理器156允许服务器15执行被储存在存储器157中的计算机可读指令以执行在此讨论的过程。
[0036] 捕捉设备12的一个实施例包括处理器126、存储器127、相机128、传感器129以及DMA引擎125,所有这些都彼此通信。处理器126允许捕捉设备12执行被储存在存储器127中的计算机可读指令以便执行在此讨论的过程。在一些情况下,处理器126可对由相机128捕获的数据执行图像处理操作。相机128可捕捉环境的彩色图像和/或深度图像。捕捉设备12可捕捉环境的彩色图像和/或深度图像。
[0037] DMA引擎125可独立于处理器126来促成对存储器127的访问。在一些情况下,处理器126可发起到存储器127的数据传输并且配置DMA引擎125来控制该数据传输。然后,DMA引擎125可生成存储器地址并向存储器127发起读和/或写周期,并且在已完成数据传输之后向处理器126提供中断。DMA引擎125可包括控制逻辑、存储器地址寄存器、字节计数寄存器、存储器缓冲器以及一个或多个控制寄存器。一个或多个控制寄存器可被用来确定数据传输的方向和在数据传输期间要被传送的字节数。在一些情况下,DMA引擎125可执行图像处理操作或图像预处理操作。
[0038] 在一些实施例中,计算设备(诸如计算环境11或捕捉设备12)的各种组件可包括可以被集成在单个芯片衬底上的网络接口、处理器和存储器。在一个示例中,各组件可被集成作为片上系统(SOC)。在其他实施例中,各组件可被集成在单个分装内。
[0039] 在一些实施例中,计算设备可通过采用相机、传感器和姿势识别软件向该计算设备的终端用户提供自然用户界面(NUI)。使用自然用户界面,人的身体部位和移动可被检测、解释并被用来控制在计算系统上运行的计算应用的各个方面。在一个示例中,利用自然用户界面的计算设备可检测由与该计算设备交互的终端用户执行的动作(例如,终端用户已执行特定姿势以便控制该计算设备)。
[0040] 联网计算环境100可为一个或多个计算设备提供云计算环境。云计算指的是基于互联网的计算,其中共享的资源、软件和/或信息经由互联网(或其他全局网络)被按需提供给一个或多个计算设备。基于在计算机网络图中使用的云图,术语“云”可被用作对互联网的比喻以将互联网描绘成对其所表示的底层基础设施的抽象。
[0041] 在一个实施例中,诸如DMA引擎118或DMA引擎125之类的DMA引擎可对由DMA引擎传送的像素数据(或其他图像相关的数据)执行各种图像处理操作。在一个示例中,DMA引擎可被配置成基于被提供给DMA引擎的最小和最大像素值阈值来确定与像素数据对应的一个或多个像素是否可被处理器无效或跳过。在另一示例中,DMA引擎可被配置成标识一个或多个像素并将其标记为在特定的像素值范围内(例如,标识并标记具有190和230之间的像素值的像素)。在另一示例中,DMA引擎可被配置成基于像素的像素值将这些像素标记为属于一个或多个像素组。
[0042] 由DMA引擎生成的像素标签和其他元数据可在每像素基础上或者在每像素区域基础上(例如,在图像内的多个像素上)被生成。在一个示例中,元数据可与一行像素(例如,每行像素可包括1024个像素)对应。在另一示例中,元数据可与图像的二维部分(例如,图像内像素的4×4分组、图像内像素的320×640分组或者整个图像的1/4)对应。
[0043] 图2描绘了利用深度感测以执行对象和/或姿势识别的计算系统10的一个实施例。计算系统10可包括计算环境11、捕捉设备20以及显示器16,所有这些都彼此通信。计算环境
11可包括一个或多个处理器。捕捉设备20可包括一个或多个彩色或深度传感相机,该相机可被用来在视觉上监视包括特定环境内的人以及一个或多个其他真实对象的一个或多个目标。捕捉设备20还可包括麦克风。在一个示例中,捕捉设备20可包括深度传感相机和麦克风,并且计算环境11可包括游戏控制台。
[0044] 在一些实施例中,捕捉设备20可包括有源照明深度相机,其可使用各种技术以便生成环境的深度图,或者以其他方式获得与环境相关联的包括从特定参考点到环境内的对象的距离的深度信息。用于生成深度信息的技术可包括结构化光照明技术和飞行时间(TOF)技术。
[0045] 如图2所描绘的,用户界面19被显示在显示器16上,使得计算系统10的终端用户29可控制计算环境11上运行的计算应用。用户界面19包括表示用户可选图标的图像17。在一个实施例中,计算系统10利用一个或多个深度图以便检测正在由终端用户29执行的特定姿势。响应于检测到特定姿势,计算系统10可控制计算应用,向计算应用提供输入或者执行新的计算应用。在一个示例中,特定姿势可被用来标识对与视频游戏的三个不同故事种子之一相关联的用户可选图标之一的选择。在一个实施例中,计算系统10的终端用户可通过使用姿势控制在显示器16上观看到的视频游戏开发环境来生成视频游戏。
[0046] 图3描绘了包括捕捉设备20和计算环境11的计算系统10的一个实施例。在一些实施例中,捕捉设备20和计算环境11可被集成在单个计算设备中。单个计算设备可包括移动设备。
[0047] 在一个实施例中,捕捉设备20可包括用于捕捉图像和视频的一个或多个图像传感器。图像传感器可以包括CCD图像传感器或CMOS图像传感器。在一些实施例中,捕捉设备20可包括IR CMOS图像传感器。捕捉设备20还可包括深度传感器(或深度传感相机),该相机被配置成经由包括例如飞行时间、结构化光、立体图像等在内的任何合适的技术来捕捉带有包括深度图像的深度信息的视频,该深度图像可包括深度值。
[0048] 捕捉设备20可包括图像相机组件32。在一个实施例中,图像相机组件32可包括可以捕捉场景的深度图像的深度相机。深度图像可包括所捕获的场景的二维(2-D)像素区域,其中2-D像素区域中的每个像素都可以表示深度值,诸如所捕获的场景中的对象与图像相机组件32相距的距离,例如以厘米、毫米等为单位。
[0049] 图像相机组件32可包括可被用来对捕捉区域的深度图像进行捕捉的IR光组件34、三维(3-D)相机36以及RGB相机38。例如,在飞行时间分析中,捕捉设备20的IR光组件34可将红外光发射到捕捉区域上,并可接着使用传感器用例如3-D相机36和/或RGB相机38来检测从捕捉区域中的一个或多个对象的表面反向散射的光。在一些实施例中,脉冲式红外光可被使用,使得出射光脉冲和相应的入射光脉冲之间的时间可被测得并被用来确定从捕捉设备20到捕捉区域中的一个或多个对象上的特定位置的物理距离。附加地,可将出射光波的相位与入射光波的相位进行比较来确定相移。然后可以使用该相移来确定从捕捉设备到与一个或多个对象相关联的特定位置的物理距离。
[0050] 在另一示例中,捕捉设备20可使用结构化光来捕捉深度信息。在该分析中,图案化光(即,被显示为诸如网格图案或条纹图案等已知图案的光)可经由例如IR光组件34被投射到捕捉区域上。在撞击到捕捉区域中的一个或多个对象(或目标)的表面时,作为响应,图案可变形。图案的这种变形可由例如3-D相机36和/或RGB相机38捕获并被分析以确定从捕捉设备到一个或多个对象上的特定位置的物理距离。捕捉设备20可包括用于产生准直光的光学器件。在一些实施例中,可使用激光投影仪来创建结构化光图案。光投影仪可包括激光器、激光二极管和/或LED。
[0051] 在一些实施例中,可将两个或更多个不同的相机整合到一个集成捕捉设备中。例如,深度相机和摄像机(例如RGB摄像机)可被整合到共同的捕捉设备中。在一些实施例中,可协同使用相同或不同类型的两个或更多个分开的捕捉设备。例如,可以使用深度相机和分开的摄像机,可以使用两个摄像机,可以使用两个深度相机,可以使用两个RGB相机,或者可以使用任何组合和数目的相机。在一个实施例中,捕捉设备20可包括可以从不同的角度观察捕捉区域的两个或更多个在物理上分开的相机,以获得可以被解析以生成深度信息的视觉立体数据。深度还可通过使用多个检测器(可以是单色、红外、RGB或任何其他类型的检测器)捕捉图像并执行视差计算来确定。也可使用其他类型的深度图像传感器来创建深度图像。
[0052] 如所描绘的,捕捉设备20还可包括一个或多个麦克风40。该一个或多个麦克风40中的每一个都可包括可以接收声音并将其转换成电信号的换能器或传感器。该一个或多个麦克风可包括麦克风阵列,其中一个或多个麦克风可以按预定布局排列。
[0053] 捕捉设备20可包括可以与图像相机组件32通信的处理器42。处理器42可包括标准处理器、专用处理器、微处理器等。处理器42可执行可以包括用于接收和分析图像的指令的指令。应当理解,至少一些图像分析和/或目标分析和跟踪操作可以由一个或多个诸如捕捉设备20的捕捉设备内所包含的处理器来执行。
[0054] 捕捉设备20可包括存储器44,该存储器可储存可由处理器42执行的指令、由3-D相机或RGB相机捕获的图像或图像帧、过滤器或简档或者任何其他合适的信息、图像等等。DMA引擎43可促成来往存储器44的数据传输。在一个示例中,存储器44可包括随机存取存储器(RAM)、只读存储器(ROM)、高速缓存、闪存、硬盘或任何其他合适的存储组件。如所描绘的,存储器44可以是与图像捕捉组件32和处理器42进行通信的分开的组件。在另一实施例中,存储器44可被集成到处理器42和/或图像捕捉组件32中。在其他实施例中,捕捉设备20的组件32、34、36、38、40、42、43和44中的部分或全部可被容纳在单个外壳中。
[0055] 捕捉设备20可经由通信链路46与计算环境11进行通信。通信链路46可以是包括例如USB连接、火线连接、以太网电缆连接等的有线连接和/或诸如无线802.11b、802.11g、802.11a或802.11n连接等的无线连接。计算环境12可向捕捉设备20提供时钟,该时钟可被用来经由通信链路46确定何时捕捉例如场景。在一个实施例中,捕捉设备20可将由例如3D相机36和/或RGB相机38捕获的图像经由通信链路46提供给计算环境11。
[0056] 如图3中所描绘的,计算环境11可包括与应用196通信的图像和音频处理引擎194。应用196可包括操作系统应用或者诸如视频游戏开发程序等的其他计算应用。图像和音频处理引擎194包括对象和姿势识别引擎190、结构数据198、处理单元191和存储器单元192,所有这些都彼此通信。图像和音频处理引擎194处理从捕捉设备20接收到的视频、图像和音频数据。为了辅助对象的检测和/或跟踪,图像和音频处理引擎194可利用结构数据198以及对象和姿势识别引擎190。
[0057] 处理单元191可包括用于执行对象、面部和/或语音识别算法的一个或多个处理器。在一个实施例中,图像和音频处理引擎194可将对象识别和面部识别技术应用于图像或视频数据。例如,对象识别可被用来检测特定对象(例如足球、汽车或陆标),并且面部识别可被用来检测特定个人的面部。图像和音频处理引擎194可将音频和语音识别技术应用于音频数据。例如,音频识别可被用来检测特定的声音。待检测的特定面部、语音、声音和对象可被储存在存储器单元192中所包含的一个或多个存储器中。处理单元191可执行被储存在存储器单元192中的计算机可读指令以执行此处讨论的过程。
[0058] 图像和音频处理引擎194可在执行对象识别时利用结构数据198。结构数据198可包括关于要跟踪的目标和/或对象的结构信息。例如,人类的骨架模型可被储存以帮助识别身体部位。在另一示例中,结构数据198可包括关于一个或多个无生命对象的结构信息以便帮助识别该一个或多个无生命对象。
[0059] 图像和音频处理引擎194还可在执行姿势识别时利用对象和姿势识别引擎190。在一个示例中,对象和姿势识别引擎190可包括姿势过滤器的集合,每个姿势过滤器均包括涉及可由骨架模型执行的姿势的信息。对象和姿势识别引擎190可将由捕捉设备20捕获的数据(其形式为骨架模型以及与其相关联的移动)与姿势库中的姿势过滤器进行比较来标识用户(其由骨架模型来表示)何时已执行了一个或多个姿势。在一个示例中,图像和音频处理引擎194可使用对象和姿势识别引擎190来帮助解释骨架模型的移动并检测特定姿势的执行。
[0060] 图4描绘了计算系统(诸如图2中的计算系统10)的一部分的一个实施例。在一些情况下,计算系统的一部分可位于诸如图3中的捕捉设备20之类的捕捉设备内,或者在诸如图3中的计算环境11之类的计算环境中。如所描绘的,计算系统的一部分包括处理器402(例如,CPU)、本地存储404(例如,用于处理器的本地高速缓存)、存储406(例如,DRAM)以及与本地存储404和存储406通信的DMA引擎408。DMA引擎408可向处理器402发送或传送中断信号
414。例如,DMA引擎408可以在经由DMA引擎408从存储406到本地存储404的数据传输完成之后向处理器402发送中断信号414。DMA引擎408包括控制器410和缓冲器412(例如,128B或
1024KB存储器缓冲器)。
[0061] 在一个实施例中,当像素数据经由DMA引擎408从存储406被传送到本地存储404时,DMA引擎408可对像素数据执行图像预处理操作,并且在一些情况下,在将像素数据写入本地存储404之前修改像素数据。在一些情况下,存储406、DMA引擎408和本地存储404可被连接到存储器总线(例如,64位或128位存储器总线)。在像素数据内的像素各自使用两个字节来被表示的情况下,DMA引擎408可在DMA引擎408正在将像素数据流式传输或者传送到本地存储404的同时对四个像素(对于64位总线)或八个像素(对于128位总线)执行图像预处理操作。图像预处理操作可生成与四个或八个像素相关联的元数据。然后,元数据可被嵌入在四个或八个像素的未使用的位内(例如,如果像素包括被储存在16位的数据内的12位像素值,则将存在4个未使用的位)。DMA引擎408可将元数据嵌入到未使用的位内,并接着将经更新的像素写入本地存储404。在经更新的像素数据已被传送到本地存储404之后,DMA引擎408可向处理器402传送中断信号414,以向处理器402传达像素数据已被传送到本地存储
404。
[0062] 图5A描绘了示出用于可被嵌入在像素数据内的4位元数据标签的映射的表的一个实施例。在这种情况下,如果特定像素使用被储存在16位的数据内的12位像素值来表示,则4位元数据标签可被嵌入在特定像素的四个未使用的位中。如所描绘的,如果元数据标签包含“1xxx”,则特定像素已被指派为像素组“xxx”的有效成员。在一个示例中,包括“1001”的元数据标签可被用来指定特定像素是像素组“001”的有效成员。如果元数据标签包含“0111”,则特定像素是有效的(例如,像素值在有效的像素值范围内),但不是任何像素组的成员。如果元数据标签包含“0000”,则特定像素是无效像素(例如,该特定像素包括高于最大像素值阈值或低于最小像素值阈值的像素值)。
[0063] 图5B描绘了基于经由DMA引擎(诸如图4中的DMA引擎408)被传送的像素数据生成的元数据的一个实施例。DMA引擎408可使用可配置DMA设置502来进行配置。可配置DMA设置502可包括最小像素值(例如,最小像素值为20)、最大像素值(例如,最大像素值为98)以及增量或像素组范围(例如,所生成的每个像素组可围绕中点像素值居中并且包括中点像素值的正或负增量之内的像素值)。如所描绘的,像素数据504的输入流可经由DMA引擎进行缓冲和传送。当像素数据504的输入流在DMA引擎内被缓冲时,DMA引擎可生成元数据(例如,每个像素的将该像素指派到多个像素分组中的一个的标签以及指定由DMA引擎生成的像素分组的信息),并且在将像素数据传送到目标存储器之前将元数据嵌入像素数据中。
[0064] 如所描绘的,由DMA引擎接收到的第一像素具有像素值12。由于像素值低于最小像素值20,所以第一像素被标记为无效,并且与无效像素相关联的元数据标签(例如,“0000”)可被嵌入在第一像素内。由DMA引擎接收到的第二像素具有像素值30。如果第二像素值没有映射到现有像素分组,则只要没有超过像素分组的最大数量,DMA引擎就可生成新的像素分组。在这种情况下,第二像素值30被用作具有像素值为25和35之间的范围的新像素分组(即,像素组0)的中点。由DMA引擎接收到的第三像素具有像素值35。由于第三像素值在与像素组0对应的范围内,所以DMA引擎通过在第三像素内嵌入与像素组0相关联的元数据标签(例如“1000”)来将第三像素标记为属于像素组0。
[0065] 由DMA引擎接收到的第四像素具有像素值60。在这种情况下,DMA引擎生成具有像素值为55和65之间的范围的新的像素分组(即,像素组1)。由DMA引擎接收到的第五像素具有像素值64。由于第五像素值在与像素组1对应的范围内,所以DMA引擎通过在第五像素内嵌入与像素组1相关联的元数据标签(例如“1001”)来将第五像素标记为属于像素组1。由DMA引擎接收到的第六像素具有像素值90。在这种情况下,DMA引擎生成具有像素值为85和95之间的范围的新的像素分组(即,像素组2)。由DMA引擎接收到的第七像素具有像素值
100。由于像素值高于最大像素值98,所以第七像素被标记为无效,并且与无效像素相关联的元数据标签(例如,“0000”)可被嵌入在第七像素内。由DMA引擎接收到的第八像素同样具有大于最大像素值98的像素值,并且同样可被标记为无效像素。
[0066] 由DMA引擎接收到的第九像素具有像素值34,并被指派到像素组0。由DMA引擎接收到的第十像素具有像素值36,并被指派到新生成的像素组3。在这种情况下,像素组3的范围在31和41之间,并且与在25和35之间的像素组0的范围重叠。由DMA引擎接收到的第十一像素具有像素值68,并被指派到新生成的像素组4。在这种情况下,像素组4的范围在63和73之间,并且与在55和65之间的像素组1的范围重叠。由DMA引擎接收到的第十二像素具有像素值42,并被指派到新生成的像素组5。在这种情况下,像素组5的范围在37和47之间,并且与在37和47之间的像素组3的范围重叠。
[0067] 在一些实施例中,可以通过确定在DMA引擎的存储器缓冲器内对多个像素值进行分组所需的最小数量的新像素分组来生成像素分组,而不是在DMA引擎接收到每个单独的像素值时生成新的像素分组。在一个示例中,DMA引擎可将图5B所示的像素数据504储存在存储器缓冲器中,并确定针对像素数据504的最小数量的新像素分组。在这种情况下,DMA引擎可生成四个像素分组。这四个像素分组可包括具有中点35的第一像素分组、具有中点45的第二像素分组、具有中点65的第三像素分组以及具有中点90的第四像素分组。与像素值30、34、35和36对应的像素可用第一像素分组来标记。与像素值42对应的像素可用第二像素分组来标记。与像素值60、64和68对应的像素可用第三像素分组来标记。与像素值90对应的像素可用第四像素分组来标记。因此,新的像素分组的数量可基于被储存在存储器缓冲器内的像素值的数量而被减少。
[0068] 在DMA引擎已生成多个像素分组之后,与经生成的像素分组相关联的元数据可被直接传送到处理器或者被储存在与被传送到该处理器的中断请求对应的本地存储器中。如果像素分组的数量超过像素分组的最大数量,则溢出可被检测到,并且与像素分组相关联的元数据可指定溢出条件已发生。如图5B所示,当经生成的像素分组(对应于像素组0至5)的数量小于像素分组的最大数量(例如,小于八个像素分组的最大值)时,溢出条件没有发生。
[0069] 与像素分组相关联的元数据可包括与多个像素分组对应的多个向量。每个向量可包括16位。第一位(例如,最高有效位)可对应于像素分组是否有效,第二位可对应于溢出条件是否已针对像素分组发生,并且12位可对应于像素分组的中点像素值。如图5B所示,元数据506包括与像素分组0相关联的第一向量(1000_0000_0000_1110)。第一向量指定像素分组0的中点为30。元数据506包括与像素分组1相关联的第二向量(1000_0000_0011_1100)。第二向量指定像素分组1的中点为60。元数据506包括与像素分组2相关联的第三向量(1000_0000_0101_1010)。第三向量指定像素分组2的中点为90。元数据506包括与像素分组
3相关联的第四向量(1000_0000_0010_0100)。第四向量指定像素分组3的中点为36。元数据
506包括与像素分组4相关联的第五向量(1000_0000_0100_0100)。第五向量指定像素分组4的中点为68。元数据506包括与像素分组5相关联的第六向量(1000_0000_0010_1010)。第六向量指定像素分组5的中点为42。元数据506包括被标记为无效向量的两个附加向量。
[0070] 图6A描绘了示出用于可被嵌入在像素数据内的4位元数据标签的映射的表的一个实施例。如所描绘的,4位元数据标签可指定像素数据内的四个区域中的一个或多个区域是否是有效的(例如,像素数据内的特定区域是否包括在最大像素值阈值和最小像素值阈值之间的特定的像素值范围内的像素值)。在一个示例中,元数据标签“0000”可表示四个区域中没有一个包括有效像素值,并且可表示当对像素数据应用进一步的图像处理时,所有四个区域均可被跳过。在另一示例中,元数据标签“1111”可表示所有四个区域都包括有效像素值,并且可表示当对像素数据应用进一步的图像处理时,这四个区域中没有一个可被跳过。在另一示例中,元数据标签“0100”可表示像素数据内的四个区域中仅第二区域包括有效像素值。
[0071] 图6B描绘了包括被嵌入在图像的一部分内的一个或多个元数据代码的该图像的该部分的一个实施例。如所描绘的,图像的一部分包括八行像素值。每行可被划分成四个区域。在一个示例中,每行像素值可包括1024个像素值,并且该行内的每个区域可包括256个像素值。对于每个像素行,与像素行内的区域中的一个或多个区域是否包括有效像素值相关联的元数据代码可被嵌入在像素行内的最后一个像素值内或者被嵌入在像素行内的像素值中的一个内。
[0072] 如图6B所示,由于第一像素行内的像素值都不包括大于最小像素值19的像素值,所以被嵌入在第一像素行的像素内的元数据代码包括表示第一像素行内的区域都不包括有效像素值的“0000”。在第二像素行中,由于四个区域中只有区域3包括在最小像素值19和最大像素值98之间的像素值,所以被嵌入在第二像素行内的元数据代码包括“0010”。在第三像素行中,由于仅区域2和区域3包括有效像素值,所以被嵌入在第三像素行内的元数据代码包括“0110”。在第四像素行中,由于仅区域2、区域3和区域4包括有效像素值,所以被嵌入在第四像素行内的元数据代码包括“0111”。在第五像素行中,由于仅区域2、区域3和区域4包括有效像素值,所以被嵌入在第五像素行内的元数据代码包括“0111”。在第六像素行中,由于仅区域2和区域4包括有效像素值,所以被嵌入在第六像素行内的元数据代码包括“0101”。在第七像素行中,由于仅区域1、区域2和区域4包括有效像素值,所以被嵌入在第七像素行内的元数据代码包括“1101”。在第八像素行中,由于仅区域2和区域4包括有效像素值,所以被嵌入在第八像素行内的元数据代码包括“0101”。因此,根据像素行,处理器可首先读取包括经嵌入的元数据代码的像素行内的一个字节,以便确定该像素行内的四个区域中的一个或多个区域是否包括有效像素值。在四个区域都不包括有效像素值的情况下,处理器可跳过整个行并移动到下一个像素行。在四个区域中只有一个区域包括有效像素值的情况下,处理器仅可从该区域读取256个像素值,而不是从整个像素行读取全部1024个像素值。
[0073] 图6C描绘了包括被嵌入在图像的一部分内的元数据代码的该图像的该部分的一个实施例。如所描绘的,图像的一部分包括四个区域的像素值。四个区域中的第一区域(区域1)与像素行1-4的第一部分内的像素值对应。四个区域中的第二区域(区域2)与像素行1-4的第二部分内的像素值对应。四个区域中的第三区域(区域3)与像素行5-8的第一部分内的像素值对应。四个区域中的第四区域(区域4)与像素行5-8的第二部分内的像素值对应。
由于只有区域2、区域3和区域4包括有效像素值,所以被嵌入在图像的一部分内(例如,被嵌入在图像的一部分内的最后一个像素内或者被嵌入在图像的一部分内的像素之一内)的元数据代码包括表示只有区域1不包括在最小像素值阈值和最大像素值阈值之间的有效像素值的“0111”。因此,处理器可首先读取经嵌入的元数据代码,以便确定图像的一部分内的四个区域中的一个或多个区域是否包括有效像素值。在这种情况下,处理器可跳过区域1内的像素值。
[0074] 图7A是描述用于使用DMA引擎来预处理像素数据的方法的一个实施例的流程图。在一个实施例中,图7A的过程可由DMA引擎(诸如图4中的DMA引擎408)来执行。
[0075] 在步骤702中,从处理器获取针对DMA引擎的配置设置。该配置设置可包括最大像素值阈值、最小像素值阈值、像素组增量以及像素组的最大数量。在步骤704中,使用DMA引擎的从第一存储器到第二存储器的图像的数据传输被发起。在一个实施例中,数据传输可由DMA引擎发起。在另一实施例中,数据传输可由处理器发起,并且该数据传输可由DMA引擎控制。数据传输可包括1D数据传输(例如,与图像内的一行相关联的像素可被传送)或者2D数据传送(例如,与图像的二维部分相关联的像素可被传送)。数据传输可由处理器发起,并且该数据传输可由DMA引擎控制。图像可包括:包括深度像素值的深度图像或者包括彩色像素值的彩色图像。第一存储器可包括DRAM(例如,DDR SDRAM),而第二存储器可包括可由处理器访问的SRAM或本地高速缓存。
[0076] 在一个实施例中,针对DMA引擎的配置设置可包括针对深度像素的最大像素值阈值、针对深度像素的最小像素值阈值、针对彩色像素的最大像素值阈值以及针对彩色像素的最小像素值阈值。在这种情况下,当DMA引擎正在处理与深度图像相关联的像素值时,与处理深度信息(诸如针对深度像素的最大像素值阈值和针对深度像素的最小像素值阈值)相关联的配置设置可被应用于与该深度图像相关联的像素值。当DMA引擎正在处理与彩色图像相关联的像素值时,与处理诸如针对彩色像素的最大像素值阈值和针对彩色像素的最小像素值阈值等的彩色信息相关联的配置设置(例如,RGB像素值)可被应用于与该彩色图像相关联的像素值。
[0077] 在步骤706中,与图像的第一部分相关联的第一集合的像素值被获取。在一个实施例中,第一集合的像素值可对应于可以通过将第一存储器连接到第二存储器的存储器总线被并发地传送的像素值的数量。在一个示例中,存储器总线可包括64位存储器总线,并且可以被并发地传送的像素值的数量可包括四个像素值。在另一实施例中,第一集合的像素值可对应于图像内的一行。在另一实施例中,第一集合的像素值可对应于可以在DMA引擎的存储器缓冲器内被并发地缓冲的像素值的数量。在一个示例中,第一像素集可包括被储存在DMA引擎内的128B存储器缓冲器内的64个像素。
[0078] 在步骤708中,一个或多个像素组基于第一集合的像素值和配置设置来被生成。在一个实施例中,一个或多个像素组可在DMA引擎接收到各个像素值时被生成。在另一实施例中,一个或多个像素组可以通过基于被储存在DMA引擎的存储器缓冲器内的第一集合的像素值的一部分来确定最小数量的新的像素分组来被生成。在一个示例中,DMA引擎可并发地储存64个像素值或128个像素值。一个或多个像素组的每个像素组可跨越由像素组增量设置的像素值的范围(例如,加上或减去围绕中点像素值的像素组增量的值)。一个或多个像素组的每个像素组可包括在最大像素值阈值和最小像素值阈值之间的像素值。在超过最大数量的像素组的情况下,DMA引擎可检测溢出条件已发生并且生成元数据以指定该溢出条件已发生。
[0079] 在步骤710中,第一集合的像素值中的每个像素值被指派到一个或多个像素组中的一个。在一个实施例中,如果像素值在与一个或多个像素组的第一集合相关联的像素值的范围内,则该像素值可被指派到该第一像素组。在步骤712中,第一集合的像素值中的每个像素值被更新以嵌入被指派到该像素值的一个或多个像素组中的一像素组的标识。在一个实施例中,标识已被指派到特定像素的特定像素组的元数据标签(例如,4位元数据标签)可被嵌入在该特定像素的未使用的位内。在步骤714中,经更新的第一集合的像素值被写入第二存储器中。
[0080] 在步骤716中,与一个或多个像素组相关联的像素组信息被生成。在步骤718中,该像素组信息被写入与中断请求相关联的存储器位置。像素组信息可包括多个向量,并且多个向量中的每个向量可包括对特定像素分组是否有效、对溢出条件是否已针对像素分组发生以及对特定像素分组的中点像素值的标识。在一个示例中,像素组信息可被写入在与中断请求对应的特定位置中的第二存储器中。在步骤720,中断请求被发送到处理器。在一个实施例中,DMA引擎可直接将像素组信息传达至处理器,而不是将像素组信息写入第二存储器。
[0081] 图7B是描述用于使用DMA引擎来预处理像素数据的方法的替代实施例的流程图。在一个实施例中,图7B的过程可由DMA引擎(诸如图4中的DMA引擎408)来执行。
[0082] 在步骤722中,针对DMA引擎的配置设置被获取。该配置设置可包括最大像素值阈值和最小像素值阈值。在步骤724中,使用DMA引擎的从第一存储器到第二存储器图像的数据传输被发起。数据传输可由处理器发起,并且该数据传输可由DMA引擎控制。图像可包括:包括深度像素值的深度图像或者包括彩色像素值的彩色图像。第一存储器可包括DRAM,而第二存储器可包括可由处理器访问的SRAM或本地高速缓存。
[0083] 在一个实施例中,针对DMA引擎的配置设置可包括针对深度像素的最大像素值阈值、针对深度像素的最小像素值阈值、针对彩色像素的最大像素值阈值以及针对彩色像素的最小像素值阈值。在这种情况下,当DMA引擎正在处理与深度图像相关联的像素值时,与处理深度信息(诸如针对深度像素的最大像素值阈值和针对深度像素的最小像素值阈值)相关联的配置设置可被应用于与该深度图像相关联的像素值。当DMA引擎正在处理与彩色图像相关联的像素值时,与处理彩色信息(诸如针对彩色像素的最大像素值阈值和针对彩色像素的最小像素值阈值)相关联的配置设置可被应用于与该彩色图像相关联的像素值。在一些情况下,不同的阈值像素值可被用于不同的颜色。例如,配置设置可包括用于红色像素的最大像素值阈值以及用于绿色像素的最大像素值阈值。
[0084] 在步骤726中,与图像的第一部分相关联的第一集合的像素值被获取。在一个实施例中,第一集合的像素值可对应于可以通过将第一存储器连接到第二存储器的存储器总线被并发地传送的像素值的数量。在一个示例中,存储器总线可包括64位存储器总线,并且可以通过存储器总线被并发地传送的像素值的数量可包括四个像素值。在另一实施例中,第一集合的像素值可对应于图像内的一行(或一行的一部分)。在另一实施例中,第一集合的像素值可对应于可以在DMA引擎的存储器缓冲器内被并发地缓冲的像素值的数量。在一个示例中,第一像素集可包括被储存在DMA引擎内的128B存储器缓冲器内的64个像素。
[0085] 在步骤728中,确定第一集合的像素值是否包括处于最大像素值阈值和最小像素值阈值之间的像素值。在一个实施例中,确定第一集合的像素值是否包括大于或等于最小像素值阈值且小于或等于最大像素值阈值的像素值。在步骤730中,第一集合的像素值被更新以嵌入与第一集合的像素值是否包括处于最大像素值阈值和最小像素值阈值之间的至少一个像素值相关联的跳过信息。第一集合的像素值可对应于第一图像的一部分内的第一像素集。在一些情况下,跳过信息可包括第一图像的包括至少一个有效像素的部分内的一个或多个区域的标识。跳过信息可包括对第一像素集的特定分组是否包括至少一个有效像素的标识。在一个实施例中,通过将元数据代码(例如,4位元数据代码)嵌入到与关联于第一集合的像素值中的一个像素值的像素(例如,第一像素集中的最后一个像素)相关联的多个未使用的位中,跳过信息可被嵌入在第一集合的像素值内。在步骤732中,经更新的第一集合的像素值被写入第二存储器中。在一个实施例中,DMA引擎可直接将跳过信息传达至处理器,而不是将跳过信息写入第二存储器。
[0086] 图7C是描述用于使用与经预处理的像素数据相关联的元数据的方法的一个实施例的流程图。在一个实施例中,图7C的过程可由诸如图4中的处理器402之类的处理器来执行。
[0087] 在步骤742中,第一像素集的子集被读取。第一像素集的子集可包括第一像素集中包含经嵌入的元数据的一个或多个像素。经嵌入的元数据可被嵌入到一个或多个像素的未使用的位内。在一个实施例中,元数据可包括像素组标签信息。在另一实施例中,元数据可包括关于第一像素集是否可由于第一像素集不包括至少一个有效像素而被跳过(例如,如果第一像素集不包括具有大于或等于最小像素值阈值且小于或等于最大像素值阈值的像素值的至少一个像素,则第一像素集可被跳过)的跳过信息。在步骤744中,基于元数据检测到第一像素集包括至少一个有效像素值。在步骤746中,响应于检测到第一像素集包括至少一个有效像素值,第一像素集被读取。在一些情况下,如果检测到第一像素集不包括至少一个有效像素值,则第一像素集可被跳过(即,不被读取)。
[0088] 在一个实施例中,处理器(或在处理器上运行的图像处理软件)可配置DMA引擎以生成元数据代码,其包括图像(例如,深度图像或彩色图像)内的特定区域是否包括已由该处理器指定的像素值范围内的至少一个像素值的指示。在一个示例中,处理器可执行与对应于特定深度范围的像素相关联的图像处理操作。在这种情况下,处理器可配置DMA引擎以提供图像内的特定区域是否包括特定深度范围内的像素值的指示。通过首先读取包括图像内的特定区域是否包括特定深度范围内的像素值的指示的元数据代码,处理器可确定处理器是否需要读取与特定区域相关联的像素或者处理器是否可以跳过并且不读取与特定区域相关联的像素,由此节省计算时间和能力。
[0089] 所公开技术的一个实施例包括获取针对DMA引擎的配置设置。配置设置包括最大像素值阈值和最小像素值阈值。该方法还包括使用DMA引擎来发起从第一存储器到第二存储器的图像的数据传输,并获取与图像的第一部分相关联的第一像素集。该方法还包括基于与第一像素集、最大像素值阈值和最小像素值阈值对应的第一集合的像素值来生成一个或多个像素分组。该方法还包括将第一像素集中的第一像素指派到一个或多个像素分组中的第一像素分组、更新第一像素以嵌入第一像素分组的标识,以及将经更新的第一像素写入第二存储器。
[0090] 在一些情况下,更新第一像素可包括将指定第一像素分组的元数据标签嵌入在第一像素的未使用的位内。第一像素可与不是八位的倍数的第一像素值相关联。在一些情况下,该方法还可包括基于第一集合的像素值来确定新的像素分组的最小数量,并且基于新的像素分组的最小数量来生成一个或多个像素分组。
[0091] 所公开的技术的一个实施例包括存储器以及与该存储器通信的一个或多个处理器。存储器储存针对DMA引擎的配置设置。配置设置包括最大像素值阈值和最小像素值阈值。一个或多个处理器发起从第一存储器到第二存储器的图像的数据传输,获取与图像的第一部分相关联的第一像素集,基于与第一像素集和配置设置对应的第一集合的像素值来生成一个或多个像素分组,将第一像素集中的第一像素指派到一个或多个像素分组中的第一像素分组,更新第一像素以嵌入第一像素分组的标识,并且将经更新的第一像素写入第二存储器。
[0092] 所公开技术的一个实施例包括获取针对DMA引擎的配置设置。配置设置包括最大像素值阈值和最小像素值阈值。该方法还包括使用DMA引擎来发起从第一存储器到第二存储器的图像的数据传输,获取与图像的第一部分相关联的第一像素集,基于与第一像素集和配置设置对应的第一集合的像素值来生成一个或多个像素分组,将第一像素集中的第一像素指派到一个或多个像素分组中的第一像素分组,将指定第一像素分组的元数据标签嵌入在第一像素的未使用的位内,并且将第一像素写入第二存储器(或者促使经更新的第一像素被写入第二存储器)。
[0093] 所公开的技术可以在各种计算系统环境中被使用。图8描绘了计算系统环境2200的一个实施例。在一个示例中,计算系统环境2200可包括一个或多个计算设备,诸如图1A中的计算设备154。如所描绘的,计算系统环境2200包括计算机2210形式的通用计算设备。计算机2210的组件可包括但不限于处理单元2220、DMA引擎2221、系统存储器2230以及将包括系统存储器2230在内的各种系统组件耦合到处理单元2220的系统总线2221。处理单元2220可包括用于储存由处理单元2220使用的数据的本地高速缓存。系统总线2221可以是若干类型的总线结构中的任一种,包括使用各种总线体系结构中的任一种的存储器总线、外围总线或局部总线。在一个示例中,系统总线2221可包括64位或128位存储器总线。
[0094] 计算机2210可包括各种计算机可读存储设备。计算机可读存储设备可包括易失性存储设备、非易失性存储设备、可移动存储设备和不可移动存储设备。计算机可读存储设备可被用来储存计算机可读指令、数据结构、程序模块和其他计算机可读数据。计算机可读存储设备可包括随机存取存储器(RAM)、只读存储器(ROM)、基于闪存的存储器、固态存储器、光学存储设备、磁存储设备、磁带或任何其他数据存储设备或者可被用来储存计算机可读数据的非瞬态介质。
[0095] 系统存储器2230可包括ROM 2231和RAM 2232。包含用于(诸如在启动期间)在计算机2210内的元件之间传送信息的例程的基本输入/输出系统2233(BIOS)可使用ROM 2231来被储存。RAM 2232可储存处理单元2220可访问的数据和/或程序模块。系统存储器2230可储存操作系统2234、应用程序2235、其他程序模块2236和程序数据2237。计算机2210可包括硬盘驱动器2241、从可移除的非易失性磁盘2252读取或向其写入的磁盘驱动器2251,以及从可移除的非易失性光盘2256读取或向其写入的光盘驱动器2255。硬盘驱动器2241可被用来储存操作系统2244、应用程序2245、其他程序模块2246和程序数据2247。在一些情况下,被储存在硬盘驱动器2241上的数据可被复制到RAM 2232并由处理单元2220执行。硬盘驱动器2241可通过存储器接口2240被连接到系统总线2221。磁盘驱动器2251和光盘驱动器2255可经由存储器接口2250被连接到系统总线2221。
[0096] 计算机2210的终端用户可通过诸如键盘2262和鼠标2261之类的输入设备将命令和信息输入到计算机2210中。包括麦克风、指示设备或触摸板的其他输入设备(未示出)也可由终端用户使用来将数据输入到计算机2210中。输入设备可通过被耦合到系统总线2221的用户输入接口2260来被连接到处理单元2220。监视器2291或其他类型的显示设备可经由接口(诸如视频接口2290)被连接到系统总线2221。诸如扬声器2297和打印机2296之类的外围输出设备可经由输出外围接口2295被连接到计算机2210。计算机2210可在诸如图1A中的联网计算环境100之类的联网计算环境中工作,并且经由网络2271连接到远程计算机2280。计算机2210可使用网络接口2270来连接到网络2271。网络2271可包括局域网(LAN)、广域网(WAN)或互联网。远程计算机2280可包括诸如个人计算机、服务器或移动计算设备之类的计算设备。
[0097] 所公开的技术可在诸如软件或程序模块等由计算机或处理器执行的计算机可执行指令的上下文中进行描述。计算机可执行指令可包括计算机程序代码、例程、程序、对象、软件组件、数据结构或可被用来执行使用计算机的进程的其他类型的计算机相关的结构的各部分。在一些情况下,硬件或硬件和软件的组合可以替代软件或者代替软件来被使用。
[0098] 被用于实现所公开技术的各种操作或方面的计算机程序代码可使用一种或多种编程语言来开发,包括诸如Java或C++等的面向对象的编程语言、诸如“C”编程语言或Visual Basic等的过程编程语言或者诸如Python或JavaScript等的动态编程语言。在一些情况下,从计算机程序代码导出的计算机程序代码或机器级指令可完全地在终端用户的计算机上,部分地在终端用户的计算机上,部分地在终端用户的计算机上且部分地在远程计算机上,或者完全地在远程计算机或服务器上执行。
[0099] 出于本文档的目的,应当注意,附图中所描绘的各种特征的尺寸可能不一定按比例绘制。
[0100] 出于本文档的目的,说明书中提及的“一实施例”、“一个实施例”、“一些实施例”或“另一实施例”可被用于描述不同的实施例并且不一定指代同一实施例。
[0101] 出于本文档的目的,连接可以是直接连接或间接连接(例如,经由另一方)。在一些情况下,当提到元件被连接或耦合到另一元件时,该元件可被直接地连接到另一元件或者经由居间元件被间接地连接到另一元件。当提到元件被直接地连接到另一元件时,该元件与另一元件之间不存在居间元件。
[0102] 出于本文档的目的,术语“基于”可读作“至少部分地基于”。
[0103] 出于本文档的目的,在没有附加上下文的情况下,使用诸如“第一”对象、“第二”对象和“第三”对象之类的数值项可能不暗示对象排序,但可改为用于标识目的以标识不同的对象。
[0104] 出于本文档的目的,术语对象的“集合”指的是一个或多个对象的“集合”。
[0105] 尽管用结构特征和/或方法动作专用的语言描述了本发明主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例形式公开的。