使用图形处理单元计算直方图的方法和系统的制作方法

文档序号:6564763阅读:77来源:国知局
专利名称:使用图形处理单元计算直方图的方法和系统的制作方法
技术领域
本发明涉及图像处理领域,并且更具体地涉及直方图计算领域。
背景技术
由于现代的图形处理器(GPU)的巨大的计算能力,GPU上的通用计算已经变成了非常活跃的研究和发展领域。在GPU上运行的算法的性能非常依赖于它们能够怎样被良好地安排以适应以及利用处理器的单指令多数据(SIMD)结构。许多被认为简单的用于在中央处理单元(CPU)上执行的、例如用于统计目的的域值的分组和计算的任务对在GPU上的实施形成相当大的挑战。参见2004年出版的、Kevin Bjorke的Color Controls,GPU Gems,Addison-Wesley,第22和24章。

发明内容
根据本发明的算法允许在图形卡上计算直方图。直方图是在理解、解释和处理数字图像时的关键因素。它们可被用于不同的目的,包括值在图像中的范围和分布的分析。虽然GPU目前被广泛用于以交互速率处理和显示图像并且用于色彩校正和滤波的图像处理算法已经在GPU上被成功地实施,但完全在GPU上计算直方图的可行方法显得仍然难以理解。
因此,直方图通常必须在CPU上被计算并且被传输给GPU。由于典型地可用的有限的传输带宽,在GPU和CPU之间传输数据是一种昂贵的操作。通常,如果应用程序可完全在图形硬件上运行,则该应用程序仅受益于GPU性能。
依照本发明的一个方面,一种用于使用图形处理单元(GPU)来计算直方图的方法包括在二维(2D)纹理域内存储图像数据,将该域划分为独立的区域或片;在GPU中并行地计算多个片直方图,针对每一片有一个片直方图;以及在该GPU中并行地累加这些片直方图,以便得到最终的图像直方图。
依照本发明的另一个方面,划分该域的步骤包括将该域划分为有均匀大小的并且独立的区域。
依照本发明的另一个方面,计算多个片直方图的步骤包括计算由纹理元素纹理坐标、直方图条的数目和该图像数据的大小决定的纹理元素的亮度。
依照本发明的另一个方面,计算多个片直方图的步骤包括通过使用纹理坐标为每一纹理元素确定相应的条。
依照本发明的另一个方面,计算多个片直方图的步骤包括针对相应的直方图条,为每一纹理元素对在其附属片中值的出现进行计数。
依照本发明的另一个方面,通过使用纹理坐标为每一纹理元素确定相应的条的步骤包括为在各自的附属片中具有相同的给定位置的每一纹理元素确定相同的相应的条。
依照本发明的另一个方面,并行地累加的步骤包括应用逐片纹理减少操作。
依照本发明的另一个方面,应用纹理减少操作的步骤包括执行用于将纹理尺寸减半的渲染流程(rendering pass)。
依照本发明的另一个方面,执行用于将纹理尺寸减半的渲染流程的步骤包括对给定直方图的第i个纹理元素和在正的纹理坐标方向上的三个相邻片的第i个纹理元素求和。
依照本发明的另一个方面,存储图像数据的步骤包括使用RGB和RGBA纹理中的至少一个。
依照本发明的另一个方面,存储图像数据的步骤包括使用亮度(c=1)、RGB(c=3)和RGBA(c=4)纹理中的至少一个,使得具有n个条的直方图产生具有sqrt(n/c)×sqrt(n/c)个纹理元素的正方形片尺寸,其中c是每个纹理元素的通道数。
依照本发明的另一个方面,一种用于使用图形处理单元(GPU)来计算直方图的方法包括在二维(2D)纹理域内存储图像数据;通过将该域划分为有均匀大小的并且独立的片来将该域划分为独立的区域或片;在GPU中并行地计算多个片直方图,针对每一片有一个片直方图,并且通过针对相应的直方图条为每一纹理元素对在其附属片中值的出现进行计数来通过使用纹理坐标为每一纹理元素确定相应的条;通过应用纹理减少操作在该GPU中并行地累加这些片直方图,以便得到最终的图像直方图,其中通过执行用于将纹理尺寸减半的渲染流程来应用纹理减少操作,通过对给定直方图的第i个纹理元素和在正的纹理坐标方向上的三个相邻片的第i个纹理元素求和来执行用于将纹理尺寸减半的渲染流程。
依照本发明的另一个方面,一种用于使用图形处理单元(GPU)来计算直方图的方法包括在二维(2D)纹理域内存储输入数据;将该域划分为有均匀大小的区;在GPU中并行地得到包括每一区的直方图的直方图组;以及对该直方图组求和,以便得到最终的直方图。
依照本发明的另一个方面,一种用于使用图形处理单元(GPU)来计算图像直方图的方法包括在二维(2D)纹理域内存储图像输入数据;将该域划分为有均匀大小的区;在GPU中并行地得到包括每一区的直方图的图像直方图组;以及对该图像直方图组求和,以便得到最终的直方图。
依照本发明的另一个方面,得到图像直方图组的步骤包括为每一纹理元素确定相应的条。
依照本发明的另一个方面,得到图像直方图组的步骤包括通过使用纹理坐标为每一纹理元素确定相应的条。
依照本发明的另一个方面,应用纹理减少操作的步骤包括执行用于将纹理尺寸减半的渲染流程。
依照本发明的另一个方面,执行用于将纹理尺寸减半的渲染流程的步骤包括对给定直方图的第i个纹理元素求和是和在正的纹理坐标方向上的三个相邻片的第i个纹理元素的累加。
依照本发明的另一个方面,得到直方图组的步骤包括应用纹理减少操作。
依照本发明的另一个方面,应用纹理减少操作的步骤包括在对应于为每一纹理元素所确定的相应的条的附属片内,对所述附属片的每一纹理元素中的所有计数求和,以便获得组合的图像直方图。
依照本发明的另一个方面,应用纹理减少操作的步骤包括重复纹理减少操作的步骤,以便获得最终的图像直方图。
依照本发明的另一个方面,应用纹理减少操作的步骤包括在对应于为每一纹理元素所确定的相应的条的附属片内,对所述附属片的每一纹理元素中的所有计数求和;并且对直方图组求和,以便得到最终的图像直方图。
依照本发明的另一个方面,一种用于使用图形处理单元(GPU)来计算直方图的系统包括用于存储程序和其他数据的存储设备;与该存储设备通信的处理器设备,该处理器运行程序以便执行将图像数据存储在二维(2D)纹理域内;将该域划分为独立的区域或片;在GPU中并行地计算多个片直方图,针对每一片有一个片直方图;以及在该GPU中并行地累加这些片直方图,以便得到最终的图像直方图。
依照本发明的另一个方面,该处理器运行程序以便执行将该域划分为有均匀大小的并且独立的区域;依照本发明的另一个方面,该处理器运行程序以便执行计算由纹理元素纹理坐标、直方图条的数目和图像数据的大小决定的纹理元素的亮度。
依照本发明的另一个方面,一种计算机程序产品包括计算机可用介质,该计算机可用介质具有被存储在其上的用于使用图形处理单元(GPU)通过以下步骤来计算直方图的程序代码的计算机程序逻辑在二维(2D)纹理域内存储图像数据;将该域划分为独立的区域或片;在GPU中并行地计算多个片直方图,针对每一片有一个片直方图;在该GPU中并行地累加这些片直方图,以便得到最终的图像直方图。
依照本发明的另一个方面,一种用于使用图形处理单元(GPU)来计算直方图的方法包括将图像数据存储在二维(2D)纹理域中;将该域划分为独立的区域或片;在GPU中并行地计算多个片直方图,针对每一片有一个片直方图;以及在该GPU中并行地累加这些片直方图,以便得到最终的图像直方图。


结合附图,根据下面详细的描述,将更全面地理解本发明,其中图1示出依照本发明的原理的图解模式步骤;图2示出依照本发明的原理的图解模式相关步骤;以及图3以基本示意图形式示出如在本发明的实施例中可能典型地被使用的、被耦合用于与输入设备、输出设备的双向数据通信的数字处理器、GPU和用于存储程序和其他数据的存储设备。
具体实施例方式
依照本发明的原理,在此公开了一种用于在着色(shader)程序中、典型地在GPU中计算直方图的方法,如将在下文中通过示范性实施例来描述的那样。
图像直方图是图像亮度分布借助矩形(也称为条)的表示,矩形的宽度代表标度分类间隔,并且该矩形的面积与相应的图像亮度频率成比例。
直方图一般通过将不同的图像亮度计算为相应的条来产生。虽然这对于在CPU上执行来说是相对普通的任务,但当前的图形处理单元的流结构使其成为困难的任务。其原因在于GPU不允许写入到由输入值决定的存储单元中。也就是说,不能检查在给定的像素处的图像亮度,确定它应该被添加到哪个条中,然后将它添加到该条中。另外,由于性能原因,不能使输入值最小化到条的相应数目并在GPU中在片断着色程序中针对每条对整个图像进行采样。
在图形中,片断着色程序通常被用于通过计算片断的颜色(红绿蓝)、透明度(Alpha)和(在3D图形中)深度值来确定图像的像素的颜色值。
依照本发明的一个实施例的原理包括下列步骤输入数据被存储在具有二维幂的二维纹理中,并且域被划分为有均匀大小的并且独立的区域(也称作区或“片(tile)”)。片尺寸依赖于直方图粒度。通过使用典型值亮度(c=1)、RGB(c=3)或者RGBA(c=4)纹理,具有n条的直方图产生具有sqrt(n/c)×sqrt(n/c)个纹理元素(texel)的正方形片尺寸,其中c是每个纹理元素的通道数。片的数目等于输入纹理尺寸除以片尺寸。针对每一个区产生一个直方图,然后区直方图被全部累加为最终的图像直方图。按纹理元素计算的亮度通过其纹理坐标和直方图条数来确定。
利用该方案,多个局部直方图并行地被计算。片的每一纹理元素针对特定直方图间隔或条对值在其附属片内的出现进行计数。相应的条通过使用纹理坐标来确定。因而,在针对每个纹理元素进行单次n/4纹理拾取之后,每一片代表值在其区域内的局部分布。为了获得值在域内的全局分布,所有片被组合为单个全局直方图。通过以与Jens Krüger和Rüdiger Westermann在2003年所发表的Linear Algebra Operators for GPU Implementation of Numerical AlgorithmsACM SIGGRAPH中提出的方式类似的方式应用纹理减少操作来使片累加,由此该文献的公开内容于此在其与本发明兼容的程度上被引入。
图1示出适当的纹理减少操作,其中箭头示出找到特定直方图间隔或条的值的方向。
图2示出从纹理10到纹理12的合适的纹理减少操作的步骤的示意图。值在一片中的出现被计数并且被示出为在每一片的一个特定纹理元素中的画上圆圈的数字。圆圈中的颜色标识涉及直方图间隔的普通值的纹理元素。片通过应用纹理减少操作被累加为全局直方图。例如,在图2中,针对组10中的所有4个片,对每一片的左上部的纹理元素中的计数求和,产生0+2+1+2=5。然后计数5被置于下一级12的片的左上部的纹理元素位置中,并且对于每一剩余片的剩余三个纹理元素中的每一个来说依此类推。在下一步骤中,一个片被实现。图2中的盒式颜色仅仅用于象征性地表示纹理元素具有不同值。
在每一个渲染流程的过程中,每一维中的纹理尺寸被减半。局部直方图的第i个纹理元素与在正的纹理坐标方向上的三个相邻片的第i个纹理元素相加。这样,在log(m)次之后,域的所有m×m个片被组合为最终的直方图。因而,针对每一输入值的昂贵的图像查找的次数被最小化。
表1示出对于依照本发明原理的示范性实施例来说可应用的定义。
利用这些定义,我们得到
按纹理元素/通道计算的亮度通过其纹理坐标(x,y)来确定I=(floor(y/h)*h+floor(x/h)*bx)为了执行计算,片或区中的每一纹理元素在该区内的每一次片断程序执行期间被采样。相对于区的起点的位置通过纹理坐标来确定Ox=floor(x/h)*hOy=floor(y/h)*h在m×m个直方图在一个大小为s×s的缓冲器内被产生之后,它们被累加为一个大小为h×h的直方图纹理。如上所述,通过执行如图1和2中用图形并且示意性所示的所谓的减少操作来实现累加。该减少操作以可与在前述的Krüger和Westermann的出版物中所提出的逐纹理元素减少操作比较的逐片方式执行。
在依照本发明的原理的示范性实施例中,全部计算利用DirectX或OpenGLAPI(应用编程接口)在GPU上被执行。图像数据和直方图通过利用纹理被保存在GPU上。然后这些计算通过将正方形图元渲染为结果纹理并执行片断程序中的计算来执行。计算流程可以通过使用不同的纹理作为输入/输出并装载不同的片断程序来控制。
如将是显而易见的那样,本发明最佳地被规定为在使用和应用图像源设备连同被编程的数字计算机的情况下被实施。图3以基本示意图形式示出被耦合用于与输入设备、输出设备的双向数据通信的数字处理器、图形卡和用于存储程序和其他数据的存储设备。该输入设备被这样宽泛地指定为用于提供适当的图像以便依照本发明进行处理的设备。
例如,输入可直接地或通过存储从成像设备、例如照相机、结合在CATSCAN中的设备、X光机、MRI或其他设备、或所存储的图像被施加,或通过经由直接连接、调制红外光束、无线电、陆线、传真或卫星、例如经由万维网或因特网与另一计算机或设备或者任何其它适当的这样的数据源的通信被施加。
输出设备可以包括使用任何适合的装置的计算机类型显示设备、例如阴极射线显像管、等离子体显示器、液晶显示器等等,或者它可以包括或不包括用于再现图像的设备,并且可以包括图3的存储设备或该存储设备的部分,该存储设备用于存储图像,该图像用于进一步的处理或用于观察或评价,如可能是便利的那样,或者它可以利用包括如上面关于输入设备所述的这种连接在内的连接或耦合。该处理器运行依照本发明所设置的用于执行本发明的步骤的程序。这种被编程的计算机可以容易地通过例如陆线、无线电、因特网等等的通信媒介进行连接,以便进行图像数据采集和传输。
本发明可以容易地至少部分地在软件存储设备中被实施并且以软件产品的形式被打包。这可以是计算机程序产品的形式,该计算机程序产品包括计算机可用介质,该计算机可用介质具有被记录在其上的用于执行本发明方法的程序代码的计算机程序逻辑。
本发明也已经部分地通过实例利用说明性示范性实施例被解释。应理解的是,通过示范性实施例的描述并不旨在进行限制,并且虽然本发明可被广泛地应用,但在不失一般性的情况下通过示范性实施例来说明其原理也是有帮助的。例如,值得注意的是,本发明的应用也延伸到处理非图像数据集。
也应理解的是,本领域中的所属技术人员可以进行这里不必明确描述的各种改变和置换。这样的改变和置换可在不背离由下述权利要求所限定的本发明的精神和范围的情况下被作出。
权利要求
1.一种用于使用图形处理单元(GPU)来计算直方图的方法,包括在二维(2D)纹理域内存储图像数据;将所述域划分为独立的区域或片;在图形处理单元中并行地计算多个片直方图,针对每一片有一个片直方图;以及在所述图形处理单元中并行地累加所述片直方图以便得到最终的图像直方图。
2.如权利要求1所述的用于计算直方图的方法,其中所述划分所述域的步骤包括将所述域划分为有均匀大小的并且独立的区域。
3.如权利要求1所述的用于计算直方图的方法,其中所述计算多个片直方图的步骤包括计算由纹理元素纹理坐标、直方图条的数目和所述图像数据的大小决定的纹理元素的亮度。
4.如权利要求1所述的用于计算直方图的方法,其中所述计算多个片直方图的步骤包括通过使用纹理坐标为每一纹理元素确定相应的条。
5.如权利要求1所述的用于计算直方图的方法,其中所述计算多个片直方图的步骤包括针对所述相应的直方图条,为每一纹理元素对在其附属片中值的出现进行计数。
6.如权利要求4所述的用于计算直方图的方法,其中所述通过使用纹理坐标为每一纹理元素确定相应的条的步骤包括为在各自的附属片中具有相同的给定位置的每一纹理元素确定相同的相应的条。
7.如权利要求1所述的用于计算直方图的方法,其中所述并行地累加的步骤包括应用逐片纹理减少操作。
8.如权利要求7所述的用于计算直方图的方法,其中所述应用纹理减少操作的步骤包括执行用于将纹理尺寸减半的渲染流程。
9.如权利要求8所述的用于计算直方图的方法,其中所述执行用于将纹理尺寸减半的渲染流程的步骤包括对给定直方图的第i个纹理元素和在正的纹理坐标方向上的三个相邻片的第i个纹理元素进行求和。
10.如权利要求1所述的用于计算直方图的方法,其中所述存储图像数据的步骤包括使用RGB和RGBA纹理中的至少一个。
11.如权利要求1所述的用于计算直方图的方法,其中所述存储图像数据的步骤包括使用亮度(c=1)、RGB(c=3)或/和RGBA(c=4)纹理中的至少一个,使得具有n个条的直方图产生具有sqrt(n/c)x sqrt(n/c)个纹理元素的正方形片尺寸,其中c是每一纹理元素的通道数。
12.一种用于使用图形处理单元(GPU)来计算直方图的方法,包括在二维(2D)纹理域内存储图像数据;通过将所述域划分为有均匀大小的并且独立的片来将所述域划分为独立的区域或片;在图形处理单元中并行地计算多个片直方图,针对每一片有一个片直方图,并且通过针对相应的直方图条为每一纹理元素对在其附属片中值的出现进行计数来通过使用纹理坐标为每一纹理元素确定所述相应的条;以及通过应用纹理减少操作在所述图形处理单元中并行地累加所述片直方图,以便得到最终的图像直方图,其中通过执行用于将纹理尺寸减半的渲染流程来应用纹理减少操作,通过对给定直方图的第i个纹理元素和在正的纹理坐标方向上的三个相邻片的第i个纹理元素求和来执行用于将纹理尺寸减半的渲染流程。
13.一种用于使用图形处理单元(GPU)来计算直方图的方法,包括在二维(2D)纹理域中存储输入数据;将所述域划分为有均匀大小的区;在所述图形处理单元中并行地得到包括所述区中的每一个区的直方图的直方图组;以及对所述直方图组求和,以便得到最终的直方图。
14.如权利要求13所述的用于计算直方图的方法,其中所述得到直方图组的步骤包括为每一纹理元素确定相应的条。
15.如权利要求13所述的用于计算直方图的方法,其中所述得到直方图组的步骤包括通过使用纹理坐标为每一纹理元素确定相应的条。
16.如权利要求13所述的用于计算直方图的方法,其中所述得到直方图组的步骤包括应用纹理减少操作。
17.如权利要求16所述的用于计算直方图的方法,其中所述应用纹理减少操作的步骤包括在对应于为所述每一纹理元素所确定的所述相应的条的附属片内,对所述附属片的每一纹理元素中的所有计数求和,以便获得组合的直方图。
18.如权利要求17所述的用于计算直方图的方法,其中所述应用纹理减少操作的步骤包括重复所述纹理减少操作的步骤,以便获得最终的直方图。
19.如权利要求18所述的用于计算直方图的方法,其中所述应用纹理减少操作的步骤包括在对应于为所述每一纹理元素所确定的所述相应的条的附属片内,对所述附属片的每一纹理元素中的所有计数求和;以及对所述直方图组求和以便得到最终的直方图。
20.如权利要求19所述的用于计算直方图的方法,其中所述应用纹理减少操作的步骤包括执行用于将纹理尺寸减半的渲染流程。
21.如权利要求20所述的用于计算直方图的方法,其中所述执行用于将纹理尺寸减半的渲染流程的步骤包括对给定直方图的第i个纹理元素和在正的纹理坐标方向上的三个相邻片的第i个纹理元素求和。
22.一种用于使用图形处理单元(GPU)来计算图像直方图的方法,包括在二维(2D)纹理域内存储图像输入数据;将所述域划分为有均匀大小的区;在所述图形处理单元中并行地得到包括所述区中的每一个区的直方图的图像直方图组;以及对所述图像直方图组求和以便得到最终的直方图。
23.如权利要求22所述的用于计算图像直方图的方法,其中所述得到图像直方图组的步骤包括为每一纹理元素确定相应的条。
24.如权利要求22所述的用于计算图像直方图的方法,其中所述得到图像直方图组的步骤包括通过使用纹理坐标为每一纹理元素确定相应的条。
25.如权利要求22所述的用于计算图像直方图的方法,其中所述应用纹理减少操作的步骤包括执行用于将纹理尺寸减半的渲染流程。
26.如权利要求25所述的用于计算图像直方图的方法,其中所述执行用于将纹理尺寸减半的渲染流程的步骤包括对给定直方图的第i个纹理元素和在正的纹理坐标方向上的三个相邻片的第i个纹理元素求和。
27.如权利要求26所述的用于计算图像直方图的方法,其中所述得到直方图组的步骤包括应用纹理减少操作。
28.如权利要求27所述的用于计算图像直方图的方法,其中所述应用纹理减少操作的步骤包括在对应于为所述每一纹理元素所确定的所述相应的条的附属片内,对所述附属片的每一纹理元素中的所有计数求和,以便获得组合的图像直方图。
29.如权利要求28所述的用于计算图像直方图的方法,其中所述应用纹理减少操作的步骤包括重复所述纹理减少操作的步骤,以便获得最终的图像直方图。
30.如权利要求29所述的用于计算图像直方图的方法,其中所述应用纹理减少操作的步骤包括在对应于为所述每一纹理元素所确定的所述相应的条的附属片内,对所述附属片的每一纹理元素中的所有计数求和;以及对所述直方图组求和,以便得到最终的图像直方图。
31.一种用于使用图形处理单元(GPU)来计算直方图的系统,包括用于存储程序和其他数据的存储装置;和与所述存储装置通信的处理器装置,所述处理器运行所述程序以便执行;在二维(2D)纹理域内存储图像数据;将所述域划分为独立的区域或片;在图形处理单元中并行地计算多个片直方图,针对每一片有一个片直方图;以及在所述图形处理单元中并行地累加所述片直方图,以便得到最终的图像直方图。
32.依照权利要求31所述的用于计算直方图的系统,其中所述处理器运行所述程序以便执行将所述域划分为有均匀大小的并且独立的区域。
33.依照权利要求31所述的用于计算直方图的系统,其中所述处理器运行所述程序以便执行计算由纹理元素纹理坐标、直方图条的数目和所述图像数据的大小决定的纹理元素的亮度。
34.包括计算机可用介质的计算机程序产品,该计算机可用介质具有被记录在其上的用于使用图形处理单元(GPU)通过以下步骤来计算直方图的程序代码的计算机程序逻辑在二维(2D)纹理域中存储图像数据;将所述域划分为独立的区域或片;在图形处理单元中并行地计算多个片直方图,针对每一片有一个片直方图;以及在所述图形处理单元中并行地累加所述片直方图,以便得到最终的图像直方图。
35.如权利要求34所述的计算机程序产品,其中所述划分所述域的步骤包括将所述域划分为有均匀大小的并且独立的区域。
36.如权利要求34所述的计算机程序产品,其中所述计算多个片直方图的步骤包括计算由纹理元素纹理坐标、直方图条的数目和所述图像数据的大小决定的纹理元素的亮度。
全文摘要
一种用于使用图形处理单元(GPU)来计算直方图的方法包括将图像数据存储在二维(2D)纹理域中;将该域划分为独立的区域或片;在图形处理单元中并行地计算多个片直方图,针对每一片有一个片直方图;并在该图形处理单元中并行地累加这些片直方图,以便得到最终的图像直方图。
文档编号G06T15/00GK1991902SQ20061017195
公开日2007年7月4日 申请日期2006年11月14日 优先权日2005年11月14日
发明者O·弗拉克, S·阿哈伦, M·鲁森, D·克雷默斯 申请人:美国西门子医疗解决公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1