用于图形处理的像素值精简的制作方法
【专利摘要】一般来说,本发明的各方面描述用于将图形处理单元GPU的固定数据速率处理有效地用于可变数据速率处理的实例技术。举例来说,所述GPU可耦合到像素值处理单元,所述像素值处理单元接收由所述GPU处理的图像中的像素的像素值。所述像素值处理单元可确定所述像素值是否用于需要进一步处理的像素,且将需要进一步处理的所述像素的所述像素值存储在缓冲器中。
【专利说明】用于图形处理的像素值精简
【技术领域】
[0001]本发明涉及像素值的有效存储,且更特定来说,涉及像素值的有效存储以用于在图形处理单元(GPU)中进行处理。
【背景技术】
[0002]图形处理单元(GPU)提供用于图形应用的像素处理。在一些实例中,GPU可经配置以支持并行的处理操作。GPU可产生像素的矩形栅格以用于在屏幕上显示。GPU可执行若干功能,例如着色、挑选、混合、照明,以及其他功能,从而产生将显示于屏幕上的像素的像素值。由GPU进行的并行处理可促进有效处理,以用于快速地渲染将显示的像素。
【发明内容】
[0003]本发明描述用于精简数据以用于由GPU使用的缓冲器中的有效处理和有效存储的技术。作为两个实例,所述缓冲器可为帧缓冲器或显示器缓冲器。图形处理单元(GPU)可产生像素值的输出流以供输出到缓冲器来驱动屏幕,或者支持一个或一个以上基于图像的计算应用。所述输出流可包含可能所需GPU进行后续处理的像素的像素值,以及可能不需要GPU进行后续处理的像素的像素值。
[0004]在一些实例中,像素值处理单元可从GPU接收输出流。所述像素值处理单元可经配置以有效地存储可能需要在缓冲器中进行后续处理的像素的像素值。所述像素值处理单元可经配置以不存储不需要在缓冲器中进行后续处理的像素的像素值。
[0005]如更详细地描述,像素值处理单元可允许经配置以用于固定数据速率处理的GPU有效地利用其固定数据速率处理来用于可变数据速率处理。然而,本发明的各方面不应被视为受限于仅固定数据速率处理GPU。
[0006]在一个实例中,本发明描述一种方法,其包括用耦合到图形处理单元(GPU)且在GPU外部的像素值处理单元从所述GPU接收包含由所述GPU处理的图像中的一个或一个以上像素的像素值的输出流。所述方法还包括用所述像素值处理单元确定所述输出流中的所述像素值是否用于需要由所述GPU进行进一步处理的像素。所述方法进一步包括将需要由所述GPU进行进一步处理的所述像素的所述像素值存储在位于所述像素值处理单元外部且耦合到所述像素值处理单元的缓冲器中。
[0007]在另一实例中,本发明描述一种设备,其包括:图形处理单元(GPU),所述图形处理单元经配置以处理图像以产生包含所述经处理图像内的一个或一个以上像素的像素值的输出流;以及缓冲器。所述设备还包含像素值处理单元,其在所述GPU外部、耦合到所述GPU和所述缓冲器,且经配置以确定所述输出流中的所述像素值是否用于需要由所述GPU进行进一步处理的像素,且将需要由所述GPU进行进一步处理的所述像素的所述像素值存储在所述缓冲器中。
[0008]在另一实例中,本发明描述一种设备,其包括:图形处理单元(GPU);缓冲器;以及像素值处理单元,其在所述GPU外部且耦合到所述GPU和所述缓冲器。所述像素值处理单元包括用于从所述GPU接收包含由所述GPU处理的图像中的一个或一个以上像素的像素值的输出流的装置、用于确定所述输出流中的所述像素值是否用于需要由所述GPU进行进一步处理的像素的装置,以及用于将需要由所述GPU进行进一步处理的所述像素的所述像素值存储在所述缓冲器中的装置。
[0009]在另一实例中,本发明描述一种包括指令的非暂时性计算机可读存储媒体,所述指令致使像素值处理单元用耦合到图形处理单元(GPU)且在所述GPU外部的所述像素值处理单元从所述GPU接收包含由所述GPU处理的图像中的一个或一个以上像素的像素值的输出流。所述指令还致使所述像素值处理单元确定所述输出流中的所述像素值是否用于需要进一步处理的像素,且将需要进一步处理的所述像素的所述像素值存储在位于所述像素值处理单元和所述GPU外部且耦合到所述像素值处理单元的缓冲器中。
[0010]一个或一个以上实例的细节陈述于附图及以下描述中。其它特征、目标及优势将从描述及附图以及从权利要求书中显而易见。
【专利附图】
【附图说明】
[0011]图1是说明像素值存储系统中的图形处理单元(GPU)的方框图。
[0012]图2A是进一步详细地说明图1的图形处理单元(GPU)的一个实例的方框图。
[0013]图2B是进一步详细地说明图1的图形处理单元(GPU)的另一实例的方框图。
[0014]图3是进一步详细地说明图1的像素值处理单元的一实例的方框图。
[0015]图4A是说明将存储在缓冲器中的图像内的像素的符号图。
[0016]图4B、4C和4D是说明存储在图1的缓冲器的一个实例的存储位置中的像素值的符号图。
[0017]图5是说明可经配置以实施本发明的各方面的装置的方框图。
[0018]图6是说明像素值处理单元的实例操作的流程图。
[0019]图7是说明像素值处理单元的另一实例操作的流程图。
[0020]图8是说明像素值处理单元的另一实例操作的流程图。
【具体实施方式】
[0021]本发明的各方面针对于用于在可经设计以主要用于固定数据速率处理的图形处理单元(GPU)上流线化可变数据速率处理的技术。图形应用产生在图像中表示的视觉内容,所述图像是用于在屏幕上显示的像素的矩形栅格。将显示于屏幕上的像素的数目可相对大,在一个实例中例如为640 X 480,或307,200个像素。
[0022]GPU可经设计以使用多级并行处理来有效地处理此类大量像素,且假设大多数或者所有像素将被处理,且此些像素需要类似的(如果不等同)操作。如本发明中所使用,短语“固定数据速率处理”可一般指代将显示于屏幕上的图像中的所有或者大多数像素的GPU处理。举例来说,假设图像包含屏幕,且所述屏幕包含640X480个像素,即,307,200个像素。在此实例中,GPU将需要处理包含640X480个像素的屏幕上的所有307,200个像素的像素值。
[0023]如更详细地描述,对于一些图像应用,GPU可能不需要处理图像中的所有像素,且可能仅需要处理选定的一些像素。如本发明中所使用,短语“可变数据速率处理”可一般指代需要处理图像中的选定的一些像素而不是所有像素的GPU处理。举例来说,对于一些图形应用,GPU可能需要起初处理图像中的所有或者大多数像素。随后,对于后续处理回合,GI3U可能需要处理图像中的选定的一些像素。
[0024]GPU的并行处理功能性可良好适合于固定数据速率处理,因为在大多数情况下,GI3U可能处理图像中的所有像素。换句话说,可将固定数据速率处理视为其中GPU将处理的像素的数目在每一处理回合中一般是固定的情况。因此,GPU可经设计以用于固定数据速率处理。然而,当将处理图像中的选定的一些像素而不是图像中的所有像素时,此固定数据速率处理可能不促进有效处理。举例来说,假设对于特定的图形应用,将仅需要处理307,200个像素中的3,072个像素。在此实例中,归因于固定数据速率处理,GPU可能处理所有307,200个像素,而不是选定的一些像素,例如3,072个像素。
[0025]本发明描述一种像素值处理单元,其可允许GPU甚至在仅需要处理选定的一些像素(即,少于图像中的所有像素的像素子集)时有效地利用其固定数据速率处理结构和功能性,例如,从而提供可变数据速率处理。所述像素值处理单元可被称作像素值精简单元。所述像素值精简单元,例如像素值处理单元,可耦合到GPU,且可从所述GPU接收输出数据流。来自所述GPU的输出数据流可包含可需要进一步处理的像素的像素值以及可不需要进一步处理的像素的像素值。作为一个实例,当所述GPU实施如下文所描述的空间不变特征变换(SIFT)时,可不需要进一步处理的像素的像素值可为空值。
[0026]所述像素精简单元可确定哪些像素值用于可需要进一步处理的像素,以及哪些像素值用于可不需要进一步处理的像素。举例来说,所述像素值精简单元可评估色彩值或坐标值以确定哪些像素值用于可需要进一步处理的像素,以及哪些像素值用于可不需要进一步处理的像素。基于所述确定,所述像素值精简单元可将可需要进一步处理的像素的像素值存储在缓冲器内,例如帧缓冲器或显示器缓冲器(作为两个实例),且可不将可不需要进一步处理的像素的像素值存储在帧缓冲器或显示器缓冲器内。举例来说,所述像素值精简单元可将需要由GPU进行进一步处理的像素的像素值存储在缓冲器中,且丢弃不需要由GPU进行进一步处理的像素。
[0027]所述GPU可随后检索需要进一步处理的像素的像素值,而不是包含不需要进一步处理的像素的像素值的所有像素值。以此方式,GPU可处理需要进一步处理的像素,而不在处理不需要进一步处理的像素上浪费计算资源。换句话说,因为像素值精简单元动态地减少GPU需要处理的像素数目,所以GPU可对选定的一些像素的像素值而不是所有像素的像素值利用其固定数据速率处理。
[0028]图1是说明像素值存储系统10中的图形处理单元(GPU) 12的框图。像素值存储系统10可为装置的一部分,如图6中更详细地说明。像素值存储系统10可包含GPU12、像素值处理单元16和缓冲器18。像素值处理单元16可称为像素值精简单元。缓冲器18的实例包含但不限于帧缓冲器和显示器缓冲器。
[0029]GPU12可经配置以渲染屏幕上的图像。举例来说,处理器(未图示)可执行产生待在屏幕上显示的图像的图形应用程序。所述图像可包括多个像素。处理器可将图像分成多个多边形,且确定所述多边形的顶点的坐标。处理器还可确定顶点的各种其它属性,例如多边形的亮度值、色彩值或其它此些像素值。
[0030]GPU12可接收图像内的像素的像素值,且处理所述像素值以渲染屏幕上的图像。GPU12的实例包含但不限于数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA),或其它等效集成或离散逻辑电路。在一些实例中,GPU12可实施图形管线,其使用像素值来渲染图像。图形管线可实施为在GPU12上执行的软件、在GPU12上执行的固件、形成于GPU12上的一个或一个以上硬件单元,或其组合。
[0031]图形管线可包含多个组件。举例来说,GPU12的图形管线可包含顶点着色器,其检索顶点数据,并将顶点的坐标变换为另一坐标系,且计算顶点的光值。GPU12的图形管线还可包含图元组装器,其确定像素在多边形内的深度(z)。GPU12的图形管线还可包含早期深度测试引擎,其在多边形内的像素后来被其它像素堵塞的情况下,将那些像素从进一步处理去除。GPU12的图形管线还可包含像素着色器,其基于多边形的顶点的色彩值将像素的色彩值内插在多边形内。
[0032]图形管线的各种组件是出于说明目的而提供,且不应被视为具有限制性。在替代实例中,图形管线可包含比上文所述的组件多的组件。图形管线还可包含比上文所述的组件少的组件。在图2A和图2B中进一步详细说明GPU12的实例。
[0033]GPU12可能够以其并行处理执行上述实例功能。在一些例子中,需要处理图像内的所有或大多数像素,其可为相对较大数目的像素,且并行处理可允许GPU12快速且高效地处理像素。GPU12将处理图像中的所有或大多数像素的实例可称为“固定数据速率处理”,因为图像中待处理的像素的数目可通常为固定的。因为大多数图形应用程序要求GPU12处理图像中的所有或大多数像素,所以GPU12可经设计以实施固定数据速率处理。
[0034]然而,对于一些图形应用程序,GPU12可无需处理图像中的所有或大多数像素。对于这些图形应用程序,GPU12可需要处理图像中的选定较少像素。GPU12将处理图像中的选定较少像素的实例可称为“可变数据速率处理”,因为待处理的像素的数目不是固定的,而是可改变。归因于GPU12的固定数据速率处理本质,GPU12可能不像可变数据速率处理中那么高效。举例来说,甚至在应处理图像中的选定较少像素时,GPU12自己也可能处理图像中的所有像素。因此,对于不要求对图像中的所有或大多数像素进行处理而是要求对选定较少像素进行处理的图形应用程序,GPU12自己可能不像为此图形应用程序处理像素中那么闻效。
[0035]举例来说,如果存在D个像素,且每一像素需要A个处理循环,那么根据固定速率处理方案,GPU12所执行的像素循环的总数可表示为A*D。如果D个像素中大约1%需要进一步处理,且这些像素中的每一者需要B个处理循环,那么GPU12的效率损失可表示为(0.01+1.01*(Β / Α))。此效率损失是GPU12处理了所有像素的情况下GPU12的效率与GPU12仅处理了需要进一步处理的那些像素的情况下GPU12的效率相比的比较结果。如果D个像素中的1%随机且分散地位于图像内的情况下,可进一步放大GPU12的效率损失。
[0036]如上文所指示可称为像素值精简单元的像素值处理单元16可允许GPU12甚至在仅需要处理选定较少像素时也高效地利用其固定数据速率处理,例如藉此支持可变数据速率处理。像素值处理单元16可为固定功能硬件单元。像素值处理单元16可耦合到GPU12,且可接收来自GPU12的输出流14。输出流14可包含仅用于需要进一步处理的像素的像素值,或用于需要进一步处理的像素和不需要进一步处理的像素两者的像素值。
[0037]像素值处理单元16可确定输出流14内的哪些像素值是需要进一步处理的像素的像素值,且输出流14内的哪些像素值是不需要进一步处理的像素的像素值。在一些实例中,像素值处理单元16可将需要进一步处理的像素的像素值存储在缓冲器18中,且可不将不需要进一步处理的像素的像素值存储在缓冲器18中。
[0038]缓冲器18可包括2维存储位置阵列。在一些实例中,缓冲器18中的存储位置的数目可大体上类似于显示图像的屏幕上的像素的数目。举例来说,如果屏幕包含640X480个像素,那么缓冲器18可包含640X480个存储位置。然而,本发明的实例不限于此。在一些实例中,缓冲器18内的存储位置的数目可大于或小于屏幕上的像素的数目。
[0039]在一些实例中,像素值处理单元16可将需要进一步处理的像素的像素值存储在缓冲器18的连续存储位置内。缓冲器18的连续存储位置可为连续行或列,或连续块。举例来说,像素值处理单元16可接收来自处理器(未图示)的存储模式选择。存储模式选择可指示像素值处理单元16是否应将需要进一步处理的像素的像素值存储在缓冲器18的连续行或列或连续块内。
[0040]GPU12可检索存储在缓冲器18中的像素值以供进一步处理。举例来说,像素处理单元16可向GPU12指示存储在缓冲器18中的像素值的数目。GPU12基于所述指示,可检索存储在缓冲器18中的所述数目的像素值以供进一步处理。以此方式,GPU12可不会不必要地处理不需要进一步处理的像素的像素值,且可处理需要进一步处理的像素的选定较少像素值。
[0041]出于说明的目的,以下是为便于理解而提供的像素值存储系统10的实例实施方案。然而,本发明的方面不应被视为限于以下实例。
[0042]在一些实例中,可在图像辨识应用程序(例如支持所谓的视觉搜索的基于图像的计算应用程序)中利用GPU12。举例来说,GPU12可为移动装置的一部分。GPU12可接收图像,例如产品的图像,且提取所述图像的特征,称为特征描述符。移动装置可经由网络将特征描述符发射到一个或一个以上服务器。所述一个或一个以上服务器可将特征描述符与数据库中的图像的特征进行比较。基于所述比较,所述一个或一个以上服务器可发射匹配图像的估计、发射显示在图像中的内容的网络链接(例如网页),或发射其它相关信息。在替代实例中,移动装置(而不是服务器)可将特征描述符与所下载数据库中的图像的特征进行比较,以找出匹配图像的估计。
[0043]为了提取图像的特征,GPU12可实施标度不变特征变换(SIFT)。SIFT包含三个级,包括标度级、关键点像素位置级以及关键点像素描述符级。一般来说,SIFT包含识别图像的特征,以及产生所识别特征的用于图像辨识的特征描述符。所识别的特征可为图像内的关注点。所识别的特征可对应于如下文更详细描述的关键点像素。
[0044]在标度级和关键点像素位置级中,GPU12可开始处理图像中的每一和每个像素以识别关键点像素。对于这些级,GPU12的固定数据速率处理可促进高效像素处理。接着,对于关键点像素描述符级,GPU12可无需处理图像中的每个像素。相反,GPU12可需要处理图像中的选定较少像素,以界定用于SIFT的关键点特征描述符。如更详细地描述,像素值处理单元16可将关键点像素描述符级中的后续处理所需的选定较少像素的像素值存储在缓冲器18中,且不存储不需要进一步处理(例如不需要进一步处理以界定关键点像素描述符,例如特征描述符)的像素的像素值。以此方式,GPU12可处理这些选定较少像素,其需要进一步处理且少于图像的所有像素,而不是处理包含可能不需要额外处理的像素的所有像素。[0045]根据SIFT算法,在标度级中,GPU12可处理所接收图像内的像素的像素值,以产生图像的标度空间。标度空间可包含图像的多个经处理版本,其中图像的每一经处理版本可为经按比例缩放图像。作为一个实例,图像的经处理版本可包含图像的经滤波版本。举例来说,GPU12可用六个低通滤波器对图像进行滤波,其中每一滤波器为具有不同低通带宽的滤波器。通过用六个低通滤波器来对图像进行滤波,GPU可产生六个经低通滤波的图像,例如低通滤波图像I到低通滤波图像6。出于说明目的而提供六个低通滤波器的利用。在替代实例中,GPU12可利用多于或小于六个滤波器的滤波器。
[0046]作为另一实例,图像的经处理版本可包含图像的经滤波和经空间下取样的版本。举例来说,在一些实例中,GPU12还可对六个经低通滤波的图像中的每一者进行空间下取样。图像的空间下取样包含混合像素以减少图像内的像素的数目。举例来说,为了以二为因子进行空间下取样,GPU12可将两个像素混合成单个像素或具有降低的分辨率的多个像素。以此方式,GPU12可使像素的总数减少到二分之一。
[0047]在其中GPU12对图像进行低通滤波且下取样经低通滤波的图像的实例中,经低通滤波且下取样的图像可称为经按比例缩放图像。在其中GPU12对图像进行低通滤波但不下取样经低通滤波的图像的实例中,经低通滤波的图像可称为经按比例缩放图像。因此,在以上实例中,GPU12可产生六个经按比例缩放图像,例如经按比例缩放图像I到经按比例缩放图像6。经按比例缩放图像不应被视为仅限于图像的经滤波或经滤波且经下取样版本。一般来说,GPU12可利用其它处理技术产生经按比例缩放图像。
[0048]根据SIFT算法,在关键点像素位置级中,GPU12可确定若干对经按比例缩放图像之间的差。GPU12可基于若干对经按比例缩放图像之间的差产生差图像。GPU12可利用高斯差技术在逐像素基础上确定若干对经按比例缩放图像之间的差,但GPU12可利用不同于高斯差技术的技术。举例来说,GPU12可在逐像素基础上确定经按比例缩放图像I与经按比例缩放图像2之间的高斯差,以产生差图像I。GPU12可在逐像素基础上确定经按比例缩放图像2与经按比例缩放图像3之间的高斯差,以产生差图像2,等等。举例来说,GPU12可在逐像素基础上确定经按比例缩放图像5与经按比例缩放图像6之间的高斯差,以产生差图像5。
[0049]基于所述差图像,例如差图像I到5,GPU12可识别关键点像素。作为一个实例,GPUl 2可选择差图像I内的3 X 3个像素的块,以及差图像2和3内位于同一位置的块。GPUl 2可接着将所述差图像的一者内的像素的像素值(例如,亮度值)与所有其它像素的像素值进行比较。举例来说,GPU12可将差图像2的3X3像素块内的中心像素的亮度值与差图像2的3X3像素块内的其它像素以及差图像I和3内位于同一位置的块内的像素的亮度值进行比较,总共进行26个比较。如果中心像素的亮度值为最大值或最小值,那么在3X3块的像素之中,GPU12可将中心像素识别为关键点像素。GPU12可反复地对差图像2上的多个3X3像素块上的差图像1、2和3内的所有像素执行比较,以识别差图像2内的关键点像素。
[0050]关键点像素可随机定位且分散地填充在差图像2、3和4的像素内。举例来说,差图像2、3和4内的关键点像素的数目可为差图像2、3和4内的像素的总数的较小百分比。在一些例子中,差图像2、3和4的关键点像素可分别构成差图像2、3和4的总像素的小于1%。
[0051]GPU12可将像素值的输出流14发射到像素值处理单元16,以用于包含关键点像素的差图像(例如,差图像2、3和4)中的每一者。可存在GPU12发射到像素值处理单元16的输出流14的类型的多个实例。一般来说,GPU12可利用任何技术来指示输出流14中属于关键点像素的像素值。作为一个实例,输出流14可为关键点像素的差图像2、3和4内的坐标值的输出流。作为另一实例,输出流14可为差图像2、3和4内的关键点像素的色彩值(例如亮度值和/或红-绿-蓝(RGB)值)的输出流。在这些实例中,GPU12可不输出非关键点像素的坐标值或色彩值,或可输出非关键点像素的坐标值或色彩值的空值。在又一实例中,输出流14可为包含关键点像素的像素值的直方图值的输出流。在此实例中,GPU12可不输出非关键点像素的像素值的直方图值,或可输出非关键点像素的直方图值的空值。
[0052]在此实例中,像素值处理单元16可例如通过评估输出流14中的像素值来确定输出流14中的所接收像素值是用于关键点像素还是非关键点像素。举例来说,如果像素值为空值,那么像素值处理单元16可确定像素值不是非关键点像素的坐标值。如果像素值是非空值,那么像素值处理单元16可确定像素值为关键点像素的坐标值。
[0053]像素值处理单元16可接着将关键点像素的像素值存储在缓冲器18中,且不将非关键点像素的像素值存储在缓冲器18中。此存储方法可将非关键点像素从进一步处理去除,从而导致像素值精简。如本发明中所使用,像素值精简可指示需要处理的像素的数目的减少,其中在精简之后缓冲器18中剩余的像素的数目可大体上小于图元图像中的像素的数目。在一些实例中,可相对于GPU12的每一处理循环的开始时像素的数目逐步减少像素的数目。
[0054]GPU12可接着检索存储在缓冲器18中的关键点像素的像素值,以用于例如关键点描述符级等后续处理级。关键点描述符级可包含关键点细化和描述符产生。关键点细化可包含藉此GPU12可计算可在每一关键点附近的不同图像中的像素的三维空间梯度的算法。以此方式,GPU12可将来自每一关键点附近的像素的坐标从像素分辨率内插到子像素分辨率。描述符产生可包含藉此GPU12可计算关键点位置处的初级空间梯度以及每一关键点位置周围的三维区域的空间梯度的直方图的算法。
[0055]空间梯度的直方图(其可被视为图像的像素值的直方图)可为关键点特征描述符的一个实例。在一些实例中,GPU12还可将像素值的直方图存储在缓冲器18中。举例来说,GPU12可将像素值的直方图作为输出流14的一部分发射到像素值处理单元16。像素值处理单元16可将像素值的直方图与阈值进行比较。如果像素值的直方图大于阈值,那么像素值处理单元16可将像素值的此直方图存储在缓冲器18中。然而,如果像素值的直方图小于阈值,那么像素值处理单元16可不将像素值的此直方图存储在缓冲器18中。
[0056]在一些实例中,像素值处理单元16可对像素值存储在缓冲器18中的关键点像素的数目进行计数。像素值处理单元16可向GPU12输出计数器值,其指示像素值存储在缓冲器18中的关键点的数目。以此方式,GPU12可知晓要从缓冲器18检索多少像素值,且可仅检索那些像素值。如更详细地描述,像素值处理单元16可将像素值存储在缓冲器18的连续存储位置中。
[0057]在一些实例中,本发明中所描述的技术可允许像素值精简,而不增加传送等待时间、计算循环,或不要求同步。举例来说,由科纳斯组织(Khronos Group)开发的开放式图形库(OpenGL?)规范(例如OpenGL ES2.0)允许一种技术,其中GPU将包含分散填充的关键点像素的位置的数据地图传送到中央处理单元(CPU)。CPU接着将关键点像素的像素值精简为小得多尺寸的紧密数据地图,并将所述数据地图传送到GPU,以供后续处理。
[0058]如OpenGL ES2.0规范中所允许,此方法可增加因像素值在CPU与GPU之间来回传送而导致的数据传送等待时间。像素值处理单元16可减少此传送等待时间,因为像素值处理单元16可无需将关键点像素的像素值传回到GPU12。并且,在OpenGL ES2.0方法中,CPU可能需要多个CPU计算循环来对关键点像素执行像素值精简,这可能是处理低效的。像素值处理单元16可能够精简像素值,而不增加任何计算循环。举例来说,作为一个非限制实例,像素值处理单元16可能够在单个精简循环内精简像素值。此外,在OpenGL ES2.0方法中,GPU和CPU可需要同步,使得CPU准备好从GPU接收数据地图,且反之亦然。像素值处理单元16可不需要与GPU12的任何同步。举例来说,GPU12可在其完成其处理时产生输出流14,而无需首先确保像素值处理单元16准备好接收输出流14。
[0059]举例来说,在一些实例中,像素值处理单元16可经配置以执行例如本发明中所述功能等受限功能。在这些实例中,像素值处理单元16可不需要调度除所述任务之外的任何其它任务。像素值处理单元16可持久地就绪以接收输出流14,且在其可接收输出流时,不需要调度特定时间。举例来说,从GPU12的角度来看,GPU12可相信其正将输出流14输出到缓冲器18。像素值处理单元16可充当精简像素值的中间单元。然而,GPU12可能不知道像素值处理单元16的此功能性,且可在其完成其处理时输出流14。
[0060]本发明中所述的技术还可在不增加编程复杂性的情况下允许像素值精简。举例来说,也由科纳斯组织开发的开放式计算语言(OpenCL?)规范允许修改根据OpenCL规范定义的程序核的技术,以对关键点像素的像素值进行排序,且将序列输出到帧缓冲器的连续存储位置中。
[0061]OpenCL规范所提出的方法可增加在GPU上执行的程序核的复杂性,且可需要用于核之间的同步的执行开销。像素值处理单元16可能够进行像素值精简,而不增加在GPU12上执行的程序核的复杂性,因为像素值处理单元16可为在GPU12外部的外部硬件。并且,像素值处理单元16可不需要在GPU12上执行的程序核之间的任何额外同步。
[0062]在一些实例中,像素值处理单元16可以线性形式或块形式将相关像素值存储在缓冲器18中。像素值处理单元16可基于GPU12的特定硬件或在GPU12上执行的软件,以线性形式或块形式将像素值存储在缓冲器18中。举例来说,如果GPU12经配置以实施用于OpenGL ES2.0的图形管线,那么每一像素值可包含表示像素值的至多四个信道。在此实例中,像素值处理单元16可精简所述像素,例如针对依据应用程序的需要的灵活性,基于四个信道中的一者或一者以上,确定哪些像素值应存储在缓冲器18。
[0063]此外,尽管先前实例描述像素处理单元16通过将像素值与阈值(例如可编程阈值)进行比较来确定哪些像素值应存储在缓冲器18中,但本发明的方面不限于此。在一些替代实例中,像素值处理单元16可将用于能量的像素值的平方、梯度的可编程间距的像素对的差以及包含直方图的其它统计等与可编程阈值进行比较,以确定所述像素值应存储在缓冲器18中。
[0064]图2A是进一步详细说明图1的GPU12的一个实例的框图。如图2A中所说明,GPU12可实施类似于在2008年4月24日发布且公开可用的OpenGL ES2.0规范中所描述的图形管线。如图2A中所说明,GPU12包含着色器核20。着色器核20可实施为一个或一个以上硬件单元、在硬件单元上执行的软件模块,或其组合。如图2A中所说明,着色器核20包含顶点着色器22、图元组装单元24、光栅化器26、片段着色器28、深度模板单元30、色彩混合单元32以及抖动单元34。一般来说,着色器核20的这些单元可执行类似于通常归于OpenGLES2.0规范中的此些组件的那些功能的功能。着色器核36的这些单元是出于说明目的而提供,且不应被视为具有限制性。着色器核36可包含比图2A中所说明的单元多或少的单元。
[0065]处理器(未图示)(例如在GPU12外部的CPU)可产生待显示于平面上的图像。处理器可包含图元处理单元,其将图像分为多个图元,例如,图元可为例如三角形等多边形。图元处理单元还可确定图元的顶点的顶点坐标,以及所述顶点的像素值。图元处理单元可将图元的顶点的坐标和像素值发射到GPU12。
[0066]顶点着色器22可基于接收到的像素值计算顶点的光值。图元组装单元24可基于顶点的坐标计算图元的线性等式的系数。光栅化器26将顶点坐标变换为图像将在其上显示的屏幕的坐标。光栅化器26还可计算像素在图元内的坐标。
[0067]片段着色器28可计算图元内的像素的像素值,例如色彩值和深度值。深度模板单元30可利用来自片段着色器28的深度值来确定像素是否被另一像素堵塞,且如果像素被完全堵塞,那么可将所述像素从进一步处理去除。色彩混合单元32可将不同像素的色彩混合在一起。抖动单元34可增加像素的色彩深度,以解决处理期间的细节损失。
[0068]在图2A的实例中,着色器核20的抖动单元34的所得输出可为输出流14。在此实例中,输出流14可包含例如像素将显示在屏幕上何处的坐标、像素的色彩值等像素值,以及其它此类像素值。输出流14中的像素值可针对图像中的连续像素。举例来说,第一像素值可针对位于图像的左上角中的像素,第二像素值可针对位于图像的左上角的紧接右侧的像素,且以光栅形式依此类推。
[0069]像素值处理单元16可接收输出流14,且确定特定像素的像素值是否应存储在缓冲器18。举例来说,如果特定像素的色彩值为零,那么像素值处理单元14可确定所述像素的像素值不应存储在缓冲器18中。可存在其它准则,藉此像素值处理单元16可确定特定像素的像素值是否应存储在缓冲器18中。
[0070]基于所述确定,像素值处理单元16可存储应存储到缓冲器18中的像素的像素值。在一些实例中,像素值处理单元16可将像素值存储在缓冲器18的连续存储位置中。作为一个实例,像素值处理单元16可将像素值存储在缓冲器18的连续行或列中。作为另一实例,像素值处理单元16可将像素值存储在缓冲器18的连续块中。
[0071]图2B是进一步详细说明图1的GPU12的另一实例的框图。如图2B中所说明,GPU12可包含任务分配控制单元36、任务分配单元38、一个或一个以上并行着色器核40A到40N (总称为着色器核40)和任务合并单元42。任务分配控制单元36、任务分配单元38、着色器核40和任务合并单元42可实施为一个或一个以上硬件单元、在硬件单元上执行的软件模块,或其组合。
[0072]在一些实例中,着色器核40可大体上类似于着色器核20 (图2A)。举例来说,着色器核40中的每一者可实施图形管线中的着色器核20的单元中的一者或一者以上。在替代实例中,着色器核40可实施其它功能,例如上文所述的标度不变特征变换(SIFT)。在一些其它实例中,着色器核40可实施图2A中所说明的图形管线,以及执行例如SIFT等其它功倉泛。
[0073]在图2B的实例中,例如CPU等处理器(未图示)可将图像分成若干个块,并将待执行的任务指派到所述块中的每一者上。处理器可将任务信息发射到任务分配控制单元36。任务信息指示处理器将图像分为若干块的方式,例如所述块在图像内的坐标。处理器还可将任务数据发射到任务分配单元38。任务数据可指示应对图像的块中的每一者执行什么任务。
[0074]任务分配单元38可从任务分配控制单元36接收任务信息。基于来自处理器的任务数据以及来自任务分配控制单元36的任务信息,任务分配单元38可指派着色器核40中的每一者来执行所述任务。举例来说,基于待执行的任务的类型以及着色器核40中的每一者执行任务的可用性,任务分配单元38可调度各个着色器核40执行所述任务的时间。
[0075]着色器核40中的每一者可执行其所指派的任务,且将其任务的结果输出到任务合并单元42。来自着色器核40中的每一者的结果可为图像内的各种像素的像素值。任务合并单元42可将着色器核40所执行的任务的结果合并成单个输出流。由任务合并单元42产生的单个输出流可为输出流14。举例来说,如上文所述,输出流14可包含例如像素的坐标、亮度值、色彩值等像素值,以及其它此类像素值。
[0076]类似于图2A中所说明的实例,像素值处理单元16可接收输出流14,且确定是否应将特定像素的像素值存储在缓冲器18中。基于所述确定,在一些实例中,像素值处理单元16可存储应存储在缓冲器18的连续行或列或缓冲器18的连续块中的像素值。
[0077]图3是进一步详细说明图1的像素值处理单元16的实例的框图。在一些实例中,像素值处理单元16可为固定功能硬件单元,且称为精简单元。短语“固定功能硬件单元”表示像素值处理单元16可经设计以执行归于像素值处理单元16的功能,而不是其它功能。像素值处理单元16可在一个或一个以上电路或逻辑元件中实施,作为驻存在GPU12和缓冲器18外部的独立集成或离散逻辑电路。举例来说,像素值处理单元16可为数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或在GPU12和缓冲器18外部且耦合到两者的其它等效集成或离散逻辑电路。在一些实例中,其中像素值处理单元16为DSP、ASIC或FPGA,DSP、ASIC或FPGA可经设计以执行归于的功能,且不经设计以执行任何其它功能。
[0078]像素值处理单元16可包含像素值处理器44、计数器46和地址产生器48。像素值处理器44可接收来自GPU12的输出流14。如所描述,输出流14可包含由GPU12处理的图像中的像素的像素值。作为一个实例,如上文所述,像素值可为其中GPU12实施SIFT的实例中用于关键点像素或关键点像素和非关键点像素两者的像素值。作为另一实例,像素值可为在图形管线中处理的像素。输出流14中的像素的像素值可用于分散且随机地位于由GPU12处理的图像中的像素。
[0079]输出流14中可存在各种类型的像素值。举例来说,像素值可包含待显示于屏幕上的图像中的像素的坐标值。像素值还可包含像素的色彩值。在一些实例中,取决于应用程序的需要,像素值可为坐标、能量值等。并且,在一些实例中,如上文所述,像素值可为计算为关键点特征描述符的一部分的像素值的直方图。
[0080]像素值处理器44可接收输出流14,且针对像素的所接收像素值中的每一者,可确定是保持还是丢弃每一像素的像素值。如果将保持像素的像素值,那么像素值处理器44可将所保持像素的像素值发射到缓冲器18以供存储。如下文所述,像素值处理器44可将所保持像素的像素值存储在缓冲器18内由地址产生器48确定的位置处。在一些实例中,如果像素值处理器44确定将丢弃像素的像素值,那么像素值处理器44可将那些像素从进一步处理取消。
[0081]像素值处理器44可利用各种准则来确定是保持还是丢弃像素的像素值。举例来说,在SIFT中,像素值处理器44可将关键点像素的像素值存储在缓冲器18中,且不将非关键点像素的像素值存储在缓冲器18中。在SIFT中,非关键点像素的像素值(包含坐标值或色彩值)可基于GPU12的处理为空值或零值,且对于关键点像素,可为除空值或零值之外的值。在此实例中,如果像素的所接收像素值为空值或零值,那么像素值处理器44可确定所述像素为非关键点像素,且如果像素的所接收像素值不是空值或零值,那么可确定像素为关键点像素。
[0082]作为另一实例,像素值处理器44可确定像素的色彩值的亮度。如果所述像素的亮度大于阈值亮度,那么像素值处理器44可确定应存储所述像素的像素值。如果所述像素的亮度小于或等于阈值亮度,那么像素值处理器44可确定不应存储所述像素的像素值。
[0083]在SIFT实例或图形管线实例中,输出流14可以预定次序包含像素的像素值。作为一个实例,第一接收到的像素值可为由GPU12处理的图像的左上像素的像素值,第二接收到的像素值可为左上像素右边的像素的像素值,且依此类推。在此实例中,像素值处理器44可基于像素值处理单元16接收输出流14中的像素值的次序来确定哪些像素值属于哪一像素。以此方式,像素值处理器44可知晓保持哪些像素以供进一步处理,以及将哪些像素从进一步处理丢弃。
[0084]像素值处理器44用来确定将像素的像素值存储在缓冲器18中还是不将像素的像素值存储在缓冲器18中的以上实例技术是出于说明目的而提供,而不应被视为具有限制性。像素值处理器44可利用除上文所述的实例之外或代替于上文所述的实例的准则,来确定是将像素的像素值存储在缓冲器18中还是不将像素的像素值存储在缓冲器18中。
[0085]在确定特定像素的像素值应存储在缓冲器18中之后,像素值处理器44可将所述像素的像素值发射到帧18以供存储,即,将像素值写入到缓冲器18。另外,地址产生器48可确定缓冲器18内应存储所述像素的像素值的位置。
[0086]如图4B到4D中进一步详细说明,缓冲器18可为存储位置的二维阵列。在一些实例中,缓冲器18中的存储位置的数目可大体上类似于屏幕上的像素的数目。举例来说,如果屏幕包含640X480个像素,那么缓冲器18可包含640X480个存储位置。然而,在一些实例中,缓冲器18内的存储位置的数目可大于或小于屏幕上的像素的数目。
[0087]地址产生器48可产生存储地址,使得缓冲器18内的存储地址是连续的。地址产生器48可基于存储模式选择以至少两种不同模式操作。存储模式选择可指示地址产生器48是应以线性模式还是块模式操作。
[0088]在线性模式下,地址产生器48可产生待存储在缓冲器18内的连续行或列中的像素的像素值在缓冲器18内的存储位置的地址。在块模式下,地址产生器48可产生待存储在缓冲器18内的连续块中的像素的像素值在缓冲器18内的存储位置的地址。举例来说,假定缓冲器18包括8X8个存储位置。在此实例中,缓冲器18可被划分成四个4X4连续存储位置。在块模式下,地址产生器48可产生像素值待存储的像素的地址,使得前十六个像素值存储在第一个4X4存储位置块中,接下来的十六个像素值存储在第二个4X4存储位置块中,且依此类推。[0089]像素值处理器44可将像素的像素值(例如坐标值、色彩值、直方图值,作为三个实例)存储在缓冲器18内的由地址产生器48界定的地址处。举例来说,对于第一像素,地址产生器48可产生将为(1,1)的在缓冲器18内的地址。像素值处理器44可将第一像素的像素值存储在缓冲器18中的位置(1,1)处。对于第二像素,地址产生器48可产生将为(1,2)的在缓冲器18内的地址。像素值处理器44可将第二像素的像素值存储在缓冲器18中的位置(1,2)处,且依此类推。
[0090]如图3中所说明,像素值处理单元16还可包含计数器46。计数器46可对其像素值被存储在缓冲器18中的像素的数目进行计数。举例来说,当GPU12实施特征描述符处理以支持SIFT时,对于每一差图像,例如,如上文所描述的差图像2、3和4,计数器46可对存储在缓冲器18中的像素的数目进行计数。
[0091]计数器46可将其像素值被存储在缓冲器18中的像素的数目传输到GPU12。基于计数器46的计数,GPU12可知晓应从缓冲器18检索多少像素值。在一些实例中,对于第一处理回合,GPU12可从缓冲器18的左上存储位置检索像素值,且以光栅方式移动以检索由计数器46指示的数目的像素值。GPU12可知晓缓冲器18中的哪一存储位置是GPU12在第一回合中从其检索数据的最后存储位置。随后,对于后续回合,GPU12可从缓冲器18内的下一存储位置检索像素值。
[0092]以此方式,GPU12可甚至针对可变数据速率处理来有效地利用其固定数据速率处理。举例来说,在没有像素值处理单元16的情况下,GPU12将把每个单一像素的像素值存储在缓冲器18内,即使不是所有像素都需要进一步处理也如此。随后,对于进一步处理,GPU12将检索所有所存储的像素值,评估像素值中的每一者,且确定是否需要进一步处理。对所有像素的此评估可为计算上低效的。举例来说,如果少于I %的像素需要进一步处理,那么GPU12可能在不需要进一步处理的99%的像素上浪费计算资源。
[0093]在具有耦合在GPU12与缓冲器18之间的像素值处理单元16的情况下,不需要进一步处理的像素可不被存储在缓冲器18中。替代地,像素值处理单元16可丢弃不需要进一步处理的此些像素。计数器46将向GPU12指示要检索多少像素值,且GPU12将随后检索由计数器46指示的数目的像素值。以此方式,GPU12可不浪费评估不需要进一步处理的像素的像素值的计算资源。而且,GPU12可能够在处理了由计数器46指示的数目的像素之后终止其处理。
[0094]像素值处理单元16还可能够在单一计算循环内确定应保留哪些像素值以及应丢弃哪些像素值。举例来说,像素值处理单元16可不需要像素值的任何反馈,或需要处理器调度。举例来说,像素值处理单元16可允许输出流14中的将被存储的像素值在单一回合中从GPU12馈送到缓冲器18,而不需要像素值处理单元16与GPU12之间的任何同步,或需要像素值的多个处理。
[0095]此外,像素值处理单元16可允许GPU12将其固定数据速率处理用于可变数据速率处理,而不对在GPU12上执行的软件代码进行大量修改。举例来说,修改在GPU12上执行的软件代码以执行像素值精简可为复杂的,且需要在GPU12上执行的不同指令之间的调度。在具有像素值处理单元16的情况下,可不需要对在GPU12上执行的指令的复杂改变,或对在GPU12上执行的指令的调度的任何改变。换句话说,像素值处理单元16可对GPU12编程透明,可需要GPUl2上的零运行时间开销,且可容易经配置以与GPUl2 —起操作。[0096]另外,像素值处理单元16可能够支持针对不同大小图像的像素值精简。像素值处理单元16对于其它应用也可为有用的,其可进一步增强GPU12的性能。
[0097]在本发明中所描述的一些实例实施方案中,GPU12可不需要重复地清理缓冲器
18。举例来说,当GPU12实施SIFT以产生输出流14时,像素值处理器44可将来自第一差图像的关键点像素的像素值存储在缓冲器18内。随后,在不清理缓冲器18的情况下,像素值处理器44可将来自第二差图像的关键点像素的像素值存储在缓冲器18内,且以此类推。在此实例中,GPU12可能够基于计数器46的计数来识别哪些关键点像素属于第一差图像且哪些关键点像素属于第二差图像。可通过减少需要清理缓冲器18的次数来促进有效的电力利用和处理。
[0098]图4A是说明将存储在缓冲器18中的图像内的像素的符号图。图4B、4C和40是说明存储在缓冲器18的一个实例的存储位置中的像素值的符号图。在图4A中所说明的实例中,图像50可为由GPU12处理的图像,且可包含从位于(0,0)处的像素开始到位于(7,7)处的像素的64个像素。在此实例中,假设将在其上显示图像50的屏幕也包含64个像素。
[0099]在图4A中,灰度级中的像素是将被存储在缓冲器18中的像素。举例来说,位于图像50中的(1,1)处的像素的像素值可为I ;位于图像50中的(6,2)处的像素的像素值可为2 ;位于图像50中的(5,4)处的像素的像素值可为3 ;且位于图像50中的(0,7)处的像素的像素值可为4 ;所有其它像素的像素值可为空值。
[0100]像素值处理单元16可以输出流14的形式接收图像50的像素值。在此实例中,输出流14中的第一像素值可为位于图像50中的(0,0)处的像素的像素值。输出流14中的第二像素值可为位于图像50中的(1,0)处的像素的像素值,且以此类推。在此实例中,在位于(7,0)处的像素之后的像素的像素值可为位于(1,0)处的像素的像素值,且以此类推。
[0101]在此实例中,像素值处理器44可确定仅位于(1,1)、(6,2)、(5,4)和(0,7)处的像素的像素值应被存储在缓冲器18中,因为这些像素的像素值不是空值,且所有其它像素的像素值是空值。而且,此实例中,在像素值处理器44确定应存储一像素的像素值之后,计数器46可递增其计数。在此实例中,在输出流14的结束处,计数器46可向GPU12指示缓冲器18在此回合中存储了四个像素。以此方式,GPU12可知晓其应从缓冲器18检索多少像素值来进行后续处理。
[0102]杜宇将被存储在缓冲器18中的像素值,地址产生器48可确定应将像素值存储在缓冲器18中的何处的位置。如上文所描述,地址产生器48可基于地址产生器48是在线性模式还是在块模式中操作而确定应存储像素值的地址。在任一操作模式中,计数器46可对其像素值被存储在缓冲器18中的像素的数目进行计数。
[0103]图4B和4C说明当地址产生器48在线性模式中操作时将像素值存储在缓冲器18中。举例来说,在线性模式中,地址产生器48可产生缓冲器18中的用于缓冲器18的列或行内的邻接存储位置的地址。举例来说,在图4B的实例中,地址产生器48产生用于将被存储在行Rl内的邻接存储位置中的像素值的地址。在图4C的实例中,地址产生器48产生用于将被存储在列Cl内的邻接存储位置中的像素值的地址。像素值处理器44可基于由地址产生器48产生的地址而将像素值存储在邻接行或列中。
[0104]图4D说明当地址产生器48在块模式中操作时将像素值存储在缓冲器18中。在块模式中,可将缓冲器18视为被划分为多个块,每一块包含至少一行和至少一列。举例来说,在图4D的实例中,缓冲器18可被划分为十六个块,其中每一块包含2X2个存储位置。在此实例中,地址产生器48可产生包含行Rl和R2的前两个存储位置以及列Cl和C2的前两个存储位置的存储位置的地址,从而存储前四个像素值。如图4D中所说明,像素值处理器44可将像素值存储在缓冲器18中的包含行Rl和R2的前两个存储位置以及列Cl和C2的前两个存储位置的第一块内。
[0105]图5是说明可经配置以实施本发明的各方面的装置52的方框图。装置52的实例包含(但不限于)无线通信装置、移动无线电话、个人数字助理(PDA)、耦合到视频显示器的视频游戏控制台、移动视频会议单元、膝上型计算机、桌上型计算机、平板计算机、电视机顶盒、具有集成式媒体解码器的电视、数字媒体播放器、便携式游戏装置等。装置52可包含图形处理单元(GPU) 12、像素值处理单元16、缓冲器18、处理器54、屏幕56、存储装置58、收发器模块60、用户接口 62,和相机64。
[0106]装置52可包含图5中出于清楚起见而未展示的额外模块或单元。举例来说,装置52可包含扬声器和麦克风(其任一者都未在图5中展示),从而在其中装置52是移动无线电话的实例中实现电话通信,或在装置52是媒体播放器的情况下实现扬声器。此外,装置52中所展示的各种模块和单元在装置52的每个实例中可能不是必需的。举例来说,在一些实例中,屏幕56和用户接口 62可在装置52外部。而且,在一些实例中,可能不需要相机64,或所述相机可在装置52外部。
[0107]图5的GPU12、像素值处理单元16和缓冲器18可大体上类似于图1到4中所说明的GPU12、像素值处理单元16和缓冲器18。举例来说,图5的GPU12、像素值处理单元16和缓冲器18可执行上文相对于图1到4所描述的功能大体上类似的功能。
[0108]处理器54可执行一个或一个以上应用。由处理器54执行的应用的一些实例包含(但不限于)网络浏览器、电子邮件应用、电子表格、视频游戏,或产生供显示的可观看内容的其它应用。由处理器54执行的应用的另一实例包含图像辨识应用。
[0109]举例来说,装置52的用户可用相机64获取图像的图片。所述用户可随后用处理器54执行图像辨识应用。处理器54可将由相机64获取的图像提供给GPU12,且致使GPU12执行SIFT以从所述图像提取特征。处理器54可随后致使收发器模块60将所提取的特征传输到一个或一个以上服务器。所述一个或一个以上服务器可将所提取的特征与数据库中的图像的特征进行比较。
[0110]基于所述比较,所述一个或一个以上服务器可将匹配图像的估计或将用于显示于图像中的内容的网络链接(例如,网页)传输到收发器模块60,所述收发器模块又将所述匹配图像的估计或网页提供给处理器54。在替代性实例中,处理器54(而非服务器)可将所提取的特征与所下载的数据库中的图像的特征进行比较,以找到匹配图像的估计。处理器54可随后经由屏幕56向用户显示匹配图像的估计或网页。
[0111]用于由处理器54执行的应用的指令可存储在存储装置58内。在一些实例中,处理器54可经由收发器模块60下载一个或一个以上应用。处理器54可基于由用户经由用户接口 62进行的选择来执行一个或一个以上应用。在一些实例中,处理器54可在没有用户交互的情况下执行一个或一个以上应用。
[0112]处理器54还可执行归于上文所描述的处理器的功能。举例来说,处理器54可选择像素值处理单元16的操作模式。举例来说,如上文所描述,像素值处理单元16的地址产生器48可产生用于缓冲器18内的处于邻接行或列中(例如,线性模式)或处于邻接块中(例如,块模式)的位置的地址。处理器54可指令地址产生器48在线性模式或块模式中操作。
[0113]作为另一实例,处理器54可产生将显示于屏幕56上的图像。举例来说,处理器54可基于其执行的应用而产生图像。处理器54还可包含图元处理单元,所述图元处理单元将图像划分为多个图元、确定所述图元的顶点的顶点坐标以及所述顶点的像素值,如上文关于图2A所描述。作为又一实例,处理器54可将图像划分为若干块、指派将对所述块中的每一者执行的任务,以及将任务信息和任务数据传输到GPU12,如上文关于图2B所描述。
[0114]处理器54的实例包含(但不限于)DSP、通用微处理器、ASIC、FPGA,或集成到离散逻辑电路的其它等效物。存储装置58可包括一个或一个以上计算机可读存储媒体。存储装置58的实例包含(但不限于)随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、CD-ROM或其它光盘存储装置、磁盘存储装置,或其它磁性存储装置、快闪存储器,或可用于携载或存储呈指令或数据结构的形式的所要程序代码且可由计算机或处理器存取的任何其它媒体。
[0115]在一些方面中,存储装置58可包含致使处理器54和/或像素值处理单元16执行归于本发明中的处理器54和像素值处理单元16的功能的指令。因此,存储装置58可为包括致使像素值处理单元16执行各种功能的指令的计算机可读存储媒体。
[0116]在一些实例中,存储装置58可被视为非暂时性存储媒体。术语“非暂时性”可指示所述存储媒体未体现于载波或所传播信号中。然而,术语“非暂时性”应被解释为是指存储装置58是非可移动的。作为一个实例,存储装置58可从装置52被移除,且移动到另一装置。作为另一实例,大体上类似于存储装置58的存储装置可插入到装置52中。在某些实例中,非暂时性存储媒体可存储可随着时间改变的数据(例如,在RAM中)。
[0117]用户接口 62的实例包含(但不限于)跟踪球、鼠标、键盘,以及其它类型的输入装置。用户接口 62还可为触摸屏且可被集成为屏幕56的一部分。收发器模块60可包含用以允许装置52与另一装置或网络之间的无线或有线通信的电路。收发器模块60可包含调制器、解调器、放大器以及用于有线或无线通信的其它此类电路。相机64可为可获取图像的任何类型的相机。相机64可形成于装置52内,且可在装置52外部且耦合到装置52。
[0118]屏幕56可包括液晶显示器(IXD)、阴极射线管(CRT)显示器、有机发光二极管(OLED)显示器、等离子体显示器,或另一类型的显示装置。屏幕56包含水平地且垂直地布置在2维(2D)像素阵列中的多个像素。举例来说,屏幕56可包含水平地且垂直地布置的640X480个像素。
[0119]图6是说明像素值处理单元16的实例操作的流程图。仅出于说明的目的,参考图1到4。
[0120]像素值处理单元16可从GPU12接收包含由GPU12处理的图像中的一个或一个以上像素的像素值的输出流出6)。举例来说,GPU12可对图像进行图形处理以产生包含经处理图像内的一个或一个以上像素的像素值的输出流14。举例来说,GPU12可实施图2A中所说明的图形管线以产生输出流14。作为另一实例,GPU12可实施如上文所描述的SIFT。
[0121]在SIFT中,GPU12可从处理器54接收图像。GPU12可随后用具有不同低通带宽的若干低通滤波器对所接收图像进行低通滤波,以产生图像的经缩放版本。在一些实例中,GPU12可对所述图像进行低通滤波且对所得图像进行下取样以产生图像的经缩放版本。
[0122]GPU12可随后识别图像的经缩放版本内的关键点像素。举例来说,GPU12可确定图像的经缩放版本的若干对之间的差。GPU12可随后定位其在至少三个差图像的位于同一地点的块内的亮度像素值是最大亮度值或最小亮度值的像素。具有最大或最小亮度值的像素可为关键点像素。
[0123]可在GPU12外部且耦合到GPU12的像素值处理单元16可确定输出流14中的像素值是否用于需要进一步处理的像素(68)。像素值处理单元16可利用各种准则来确定输出流14中的像素值是否用于需要进一步处理的像素。举例来说,在SIFT中,非关键点像素的像素值可为空值或零值,且可为除了关键点像素的空值或零值之外的值。在此实例中,像素值处理单元16可确定其值为空值或零值的像素可为需要进一步处理的像素,例如关键点像素。在一些实例中,对于不需要进一步处理的像素,像素值处理单元16可除去那些像素而不进一步处理。
[0124]还可耦合到缓冲器18的像素值处理单元16可将需要进一步处理的像素的像素值存储在缓冲器18中(70)。举例来说,像素值处理单元16可产生缓冲器18内的用于存储需要进一步处理的像素的像素值的地方的地址。像素值处理单元16可随后将需要进一步处理的像素的像素值存储在缓冲器18中的其地址对应于所产生的地址的存储位置中。
[0125]而且,在一些实例中,像素值处理单元16可确定所述像素值是否用于需要进一步处理的像素,且在像素值处理单元16的单一计算回合中存储此些像素值。举例来说,像素值处理单元16可不需要所述像素值中的任一者通过像素值处理单元16反馈,且可实现从GPU12到缓冲器18的直接路径。而且,像素值处理单元16可不需要与GPU12的任何同步。举例来说,GPU12可能够将输出流14传输到像素值处理单元16,而不需要向像素值处理单元16指示GPU12将要传输输出流14。
[0126]图7是说明像素值处理单元16的另一实例操作的流程图。仅出于说明的目的,参考图3和5。
[0127]像素值处理单元16的地址产生器48可从处理器(例如,处理器54)接收操作模式(72)。地址产生器48可随后基于所接收的操作模式而产生用于需要进一步处理的像素的像素值被存储在缓冲器18何处的地址。
[0128]举例来说,所接收的操作模式可为线性模式和块模式中的至少一者。在所接收的操作模式是线性模式的情况下,地址产生器48可产生缓冲器18的邻接行或列内的地址
(74)。在所接收的操作模式是块模式的情况下,地址产生器48可产生缓冲器18的邻接块内的地址(76)。
[0129]图8是说明像素值处理单元16的另一实例操作的流程图。仅出于说明的目的,参考图3。
[0130]计数器46可对存储于缓冲器18中的像素的数目进行计数(78)。举例来说,在像素值处理器44确定应存储像素的像素值之后,计数器46可递增计数器以指示像素的像素值被存储在缓冲器18中。计数器46可针对其像素值被存储在缓冲器18中的每个像素来重复此步骤。
[0131]GPU12可基于所述计数来检索存储于缓冲器18中的像素值(80)。举例来说,计数器46可指示在当前处理回合中有多少像素被存储在缓冲器18中。GPU12可随后知晓存储于缓冲器18中的像素的数目,且可仅针对需要进一步处理的那些像素来检索像素值。
[0132]GPU12可随后进一步处理所检索的像素值(82)。以此方式,GPU12可能够甚至针对可变数据速率处理来利用其固定数据速率处理。在此实例中,因为GPU12可仅检索需要进一步处理的像素的像素值,且不检索不需要进一步处理的像素的像素值,所以GPU12可不浪费评估不需要进一步处理的像素的像素值的计算资源。
[0133]在一个或一个以上实例中,所描述的功能可以硬件、软件、固件或其任何组合来实施。如果以软件来实施,则可将功能作为一个或一个以上指令或代码存储在包括非暂时性计算机可读媒体的制品上。计算机可读媒体可包含计算机数据存储媒体。数据存储装置可为可由一个或一个以上计算机或一个或一个以上处理器存取以检索指令、代码和/或数据结构来用于实施本发明中所描述的技术的任何可用媒体。举例来说(且并非限制),所述计算机可读媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置,快闪存储器,或可用于携载或存储呈指令或数据结构的形式的所要程序代码且可由计算机存取的任何其它媒体。如本文中所使用,磁盘及光盘包括压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软磁盘及蓝光光盘,其中磁盘通常磁性地再现数据,而光盘使用激光光学地再现数据。以上各者的组合也应包含在计算机可读媒体的范围内。
[0134]代码可由一个或一个以上处理器执行,例如,一个或一个以上DSP、通用微处理器、ASIC、FPGA或其它等效集成或离散逻辑电路。另外,在一些方面中,本文中所描述的功能性可提供于专用硬件模块和/或软件模块内。并且,可将所述技术完全实施于一个或一个以上电路或逻辑元件中。
[0135]本发明的技术可实施于广泛多种装置或设备中,包含无线手持机、集成电路(IC)或一组IC(例如,芯片组)。本发明中描述各种组件、模块或单元来强调经配置以执行所揭示的技术的装置的若干功能性方面,但不一定需要通过不同的硬件单元来实现。而是,如上文所描述,各种单元可联合合适的软件和/或固件而组合于硬件单元中或通过互操作的硬件单元的集合(包含如上文所描述的一个或一个以上处理器)来提供。
[0136]已描述了各种实例。这些及其它实例处于所附权利要求书的范围内。
【权利要求】
1.一种方法,其包括: 用耦合到图形处理单元GPU且在所述GPU外部的像素值处理单元从所述GPU接收包含由所述GPU处理的图像中的一个或一个以上像素的像素值的输出流; 用所述像素值处理单元确定所述输出流中的所述像素值是否用于需要由所述GPU进行进一步处理的像素;以及 将需要由所述GPU进行进一步处理的所述像素的所述像素值存储在位于所述像素值处理单元外部且耦合到所述像素值处理单元的缓冲器中。
2.根据权利要求1所述的方法,其中确定所述像素值是否用于需要进一步处理的像素包括在所述像素值处理单元的单一计算回合中确定所述像素值是否用于需要进一步处理的像素,而不需要所述像素值处理单元与所述GPU之间的同步,且其中存储需要进一步处理的所述像素的所述像素值包括在所述像素值处理单元的所述单一计算回合中存储需要进一步处理的所述像素的所述像素值,而不需要所述像素值处理单元与所述GPU之间的同步。
3.根据权利要求1所述的方法,其进一步包括:产生所述缓冲器内的用于被确定为需要进一步处理的所述像素的所述像素值的地址, 其中存储需要进一步处理的所述像素的所述像素值包括将需要进一步处理的所述像素的所述像素值存储在所述缓冲器的所述所产生的地址处。
4.根据权利要求3所述的方法,其进一步包括: 接收操作模式, 其中产生所述缓冲器内的地址包括基于所述所接收的操作模式而产生所述缓冲器内的地址。
5.根据权利要求4所述的方法,其中所述操作模式包括线性模式和块模式中的至少一者,其中产生所述缓冲器内的地址包括在所述操作模式包括所述线性模式时产生所述缓冲器的邻接行或列内的地址,且其中产生所述缓冲器内的地址包括在所述操作模式包括所述块模式时产生所述缓冲器的邻接块内的地址。
6.根据权利要求1所述的方法,其进一步包括: 对其像素值被存储在所述缓冲器中的像素的数目进行计数; 基于所述所计数的像素数目而检索需要进一步处理的所述像素的所述像素值;以及 处理需要进一步处理的所述像素的所述所检索的像素值。
7.根据权利要求1所述的方法,其进一步包括: 产生所述图像的经缩放版本;以及 基于所述图像的所述经缩放版本而识别关键点像素, 其中确定所述输出流中的所述像素值是否用于需要进一步处理的像素包括确定所述输出流中的所述像素值是否用于所述所识别的关键点像素,且其中存储需要进一步处理的所述像素的所述像素值包括将所述所识别的关键点像素的所述像素值存储在所述缓冲器中。
8.根据权利要求1所述的方法,其中所述像素值包括坐标值和色彩值中的至少一者。
9.根据权利要求1所述的方法,其进一步包括除去不需要进一步处理的像素的像素值而不进一步处理。
10.根据权利要求1所述的方法,其进一步包括不将不需要由所述GPU进行进一步处理的像素的像素值存储在所述缓冲器中。
11.一种设备,其包括: 图形处理单元GPU,其经配置以对图像进行处理以产生包含所述经处理图像内的一个或一个以上像素的像素值的输出流; 缓冲器;以及 像素值处理单元,其在所述GPU外部、耦合到所述GPU和所述缓冲器,且经配置以确定所述输出流中的所述像素值是否用于需要由所述GPU进行进一步处理的像素,且将需要由所述GPU进行进一步处理的所述像素的所述像素值存储在所述缓冲器中。
12.根据权利要求11所述的设备,其中所述像素值处理单元在所述像素值处理单元的单一计算回合中确定所述像素值是否用于需要由所述GPU进行进一步处理的像素,且存储需要由所述GPU进行进一步处理的所述像素的所述像素值,而不需要所述像素值处理单元与所述GPU之间的同步。
13.根据权利要求11所述的设备,其中所述像素值处理单元进一步经配置以产生所述缓冲器内的用于被确定为需要进一步处理的所述像素的所述像素值的地址,且其中所述像素值处理单元将需要处理的所述像素的所述像素值存储在所述缓冲器的所述所产生的地址处。
14.根据权利要求13所述的设备,其中所述像素值处理单元进一步经配置以接收操作模式,且其中所述像素值处理单元基于所述所接收的操作模式而产生所述缓冲器内的所述地址。`
15.根据权利要求14所述的设备,其中所述操作模式包括线性模式和块模式中的至少一者,其中所述像素值处理单元在所述操作模式包括所述线性模式时产生所述缓冲器的邻接行或列内的所述地址,且在所述操作模式包括所述块模式时产生所述缓冲器的邻接块内的所述地址。
16.根据权利要求11所述的设备,其中所述像素值处理单元进一步经配置以对其像素值被存储在所述缓冲器中的像素的数目进行计数,其中所述GPU基于所述所计数的像素数目而从所述缓冲器检索需要进一步处理的所述像素的所述像素值,且其中所述GPU处理需要进一步处理的所述像素的所述所检索的像素值。
17.根据权利要求11所述的设备,其中所述GPU进一步经配置以产生所述图像的经缩放版本,且基于所述图像的所述经缩放版本而识别关键点像素,其中像素值处理单元确定所述输出流中的所述像素值是否用于所述所识别的关键点像素,且将所述所识别的关键点像素的所述像素值存储在所述缓冲器中。
18.根据权利要求11所述的设备,其中所述像素值包括坐标值和色彩值中的至少一者。
19.根据权利要求11所述的设备,其中所述像素值处理单元进一步经配置以除去不需要进一步处理的像素的像素值而不进一步处理。
20.根据权利要求11所述的设备,其中所述像素值处理单元包括固定功能硬件单元,所述固定功能硬件单元经配置以:仅确定所述输出流中的所述像素值是否用于需要进行进一步处理的像素;将需要进一步处理的所述像素的所述像素值存储在所述缓冲器中;产生所述缓冲器内的用于被确定为需要进一步处理的所述像素的所述像素值的地址;以及对其像素值被存储在所述缓冲器中的像素的数目进行计数。
21.根据权利要求11所述的设备,其中所述像素值处理单元进一步经配置以不将不需要由所述GPU进行进一步处理的像素的像素值存储在所述缓冲器中。
22.根据权利要求11所述的设备,其中所述设备包括无线通信装置。
23.—种设备,其包括: 图形处理单元GPU; 缓冲器;以及 像素值处理单元,其在所述GPU外部且耦合到所述GPU和所述缓冲器,且其包括: 用于从所述GPU接 收包含由所述GPU处理的图像中的一个或一个以上像素的像素值的输出流的装置; 用于确定所述输出流中的所述像素值是否用于需要由所述GPU进行进一步处理的像素的装置;以及 用于将需要由所述GPU进行进一步处理的所述像素的所述像素值存储在所述缓冲器中的装置。
24.根据权利要求23所述的设备,其中所述用于确定所述像素值是否用于需要进一步处理的像素的装置包括用于在所述像素值处理单元的单一计算回合中确定所述像素值是否用于需要进一步处理的像素而不需要所述像素值处理单元与所述GPU之间的同步的装置,且其中所述用于存储需要进一步处理的所述像素的所述像素值的装置包括用于在所述像素值处理单元的所述单一计算回合中存储需要进一步处理的所述像素的所述像素值而不需要所述像素值处理单元与所述GPU之间的同步的装置。
25.根据权利要求23所述的设备,其进一步包括: 用于产生所述缓冲器内的用于被确定为需要进一步处理的所述像素的所述像素值的地址的装置, 其中所述用于存储需要进一步处理的所述像素的所述像素值的装置包括用于将需要进一步处理的所述像素的所述像素值存储在所述缓冲器的所述所产生的地址处的装置。
26.根据权利要求25所述的设备,其进一步包括: 用于接收操作模式的装置, 其中所述用于产生所述缓冲器内的地址的装置包括用于基于所述所接收的操作模式而产生所述缓冲器内的地址的装置。
27.根据权利要求26所述的设备,其中所述操作模式包括线性模式和块模式中的至少一者,其中所述用于产生所述缓冲器内的地址的装置包括用于在所述操作模式包括所述线性模式时产生所述缓冲器的邻接行或列内的地址的装置,且其中所述用于产生所述缓冲器内的地址的装置包括用于在所述操作模式包括所述块模式时产生所述缓冲器的邻接块内的地址的装置。
28.根据权利要求23所述的设备,其进一步包括: 用于对其像素值被存储在所述缓冲器中的像素的数目进行计数的装置; 用于基于所述所计数的像素数目而检索需要进一步处理的所述像素的所述像素值的装置;以及用于处理需要进一步处理的所述像素的所述所检索的像素值的装置。
29.根据权利要求23所述的设备,其进一步包括: 用于产生所述图像的经缩放版本的装置;以及 用于基于所述图像的所述经缩放版本而识别关键点像素的装置, 其中所述用于确定所述输出流中的所述像素值是否用于需要进一步处理的像素的装置包括用于确定所述输出流中的所述像素值是否用于所述所识别的关键点像素的装置,且其中所述用于存储需要进一步处理的所述像素的所述像素值的装置包括用于将所述所识别的关键点像素的所述像素值存储在所述缓冲器中的装置。
30.根据权利要求23所述的设备,其中所述像素值包括坐标值和色彩值中的至少一者。
31.根据权利要求23所述的设备,其进一步包括用于除去不需要进一步处理的像素的像素值而不进一步处理的装置。
32.根据权利要求23所述的设备,其进一步包括用于不将不需要由所述GPU进行进一步处理的像素值存储在所述缓冲器中的装置。
33.根据权利要求23所述的设备,其中所述设备包括无线通信装置。
34.一种包括指令的非暂时性计算机可读存储媒体,所述指令致使像素值处理单元: 用耦合到图形处理单元GPU且在所述GPU外部的所述像素值处理单元从所述GPU接收 包含由所述GPU处理的图像中的一个或一个以上像素的像素值的输出流; 确定所述输出流中的所述像素值是否用于需要进一步处理的像素;以及将需要进一步处理的所述像素的所述像素值存储在位于所述像素值处理单元和所述GPU外部且耦合到所述像素值处理单元的缓冲器中。
35.根据权利要求34所述的非暂时性计算机可读存储媒体,其中所述用以确定所述像素值是否用于需要进一步处理的像素的指令包括用以在所述像素值处理单元的单一计算回合中确定所述像素值是否用于需要进一步处理的像素而不需要所述像素值处理单元与所述GPU之间的同步的指令,且其中所述用以存储需要进一步处理的所述像素的所述像素值的指令包括用以在所述像素值处理单元的所述单一计算回合中存储需要进一步处理的所述像素的所述像素值而不需要所述像素值处理单元与所述GPU之间的同步的指令。
36.根据权利要求34所述的非暂时性计算机可读存储媒体,其进一步包括致使所述像素值处理单元进行以下操作的指令: 产生所述缓冲器内的用于被确定为需要进一步处理的所述像素的所述像素值的地址,其中所述用以存储需要进一步处理的所述像素的所述像素值的指令包括用以将需要进一步处理的所述像素的所述像素值存储在所述缓冲器的所述所产生的地址处的指令。
37.根据权利要求36所述的非暂时性计算机可读存储媒体,其进一步包括致使所述像素值处理单元进行以下操作的指令: 接收操作模式, 其中所述用以产生所述缓冲器内的地址的指令包括用以基于所述所接收的操作模式而产生所述缓冲器内的地址的指令。
38.根据权利要求37所述的非暂时性计算机可读存储媒体,其中所述操作模式包括线性模式和块模式中的至少一者,其中所述用以产生所述缓冲器内的地址的指令包括用以在所述操作模式包括所述线性模式时产生所述缓冲器的邻接行或列内的地址的指令,且其中所述用以产生所述缓冲器内的地址的指令包括用以在所述操作模式包括所述块模式时产生所述缓冲器的邻接块内的地址的指令。
39.根据权利要求34所述的非暂时性计算机可读存储媒体,其进一步包括致使所述像素值处理单元进行以下操作的指令: 对其像素值被存储在所述缓冲器中的像素的数目进行计数。
40.根据权利要求34所述的非暂时性计算机可读存储媒体,其中所述像素值包括坐标值和色彩值中的至少一者。
41.根据权利要求34所述的非暂时性计算机可读存储媒体,其进一步包括致使所述像素值处理单元除去不需要进一步处理的像素的像素值而不进一步处理的指令。
42.根据权利要求34所述的非暂时性计算机可读存储媒体,其进一步包括致使所述像素值处理单元不将不需要由所述GPU进行进一步处理的像素的像素值存储在所述缓冲器中的指令。`
【文档编号】G06T1/60GK103460253SQ201280017681
【公开日】2013年12月18日 申请日期:2012年4月13日 优先权日:2011年4月13日
【发明者】蔡明章, 焦国方 申请人:高通股份有限公司