文档介绍:基于GPU的实时角点检测算法
摘 要:本文提出一类基于GPU的实时角点检测算法。该类算法在已 有角点检测算法的基础上,利用GPU实现。为了进一步提高算法的速度, 算法采用了角值图压缩的方法。实验证明基于GPU的实时角点检测算法适 于1024*768分辨率的实时应用。
关键词:实时角点检测图形处理器
中图分类号:TP391文献标识码:A文章编号:1003-9082 (2013) 12-0003-01
一、概述
伴随着图形处理器(GPU)的飞速发展,GPU不仅仅能用于图形处理, 其强大的并行处理能力使得GPU在计算[1]中表现较突出。使用GPU处理 机器视觉领域的计算任务具备了广阔的前景。使用GPU实现基于CPU算法 的主要突破点是如何修改算法使Z适于GPU的并行计算模式。
在机器视觉的实时应用中,角点检测处理时间必须控制在10毫秒以 内[2]。利用GPU实现角点检测算法是实时应用的必然选择。有一些常用 的角点检测算法处理过程可以分为2步:
(1)设计一种衡量角值的函数,根据函数计算图像中每个像素的角 值。角值大于预先指定阀值的像素被保留下来做为候选点。角值函数反映 的是图像变化剧烈程度或图像边缘曲线上曲率。常用的KLT角点检测算法 [3]、Harris角点检测算法[4]等采用了不同的角值函数。
(2)非极值抑制从候选点中挑选出具有局部极值的点做为角点。它 保证每个位置的角点具有唯一性。
本文提出一类基于GPU的实时角点检测算法。它利用GPU的并行计算 加速已有的角点检测算法如Harris、KLT角点检测算法。
二、算法的实现
1 •角值计算
将图像作为纹理载入GPU的显存。使用函数计算
图像中像索的角值。小于指定阀值的角值被置零,表明该点不是角点。 其余点保留下来作为角点的候选点。
上述过程作为片段程序被GPU屮多个段处理器并行调用。这是GPU具 有高效并行计算能力的主要原因。
已有慕于GPU的角点检测算法[5]在使用GPU计算角值后,由CPU执 行非极值抑制。木文提出的算法将继续使用GPU执行非极值抑制。
本文提出的非极值抑制算法是收敛算法。算法需要运行若干次,直到 所有点被判定为止。在每次执行中并行判断图像中每个点。当确定某点是 角点,把角值置1,表明该点是角点。判断标准如下:
当前点角值是0或1说明它已确定是否为角点。
如果为其它值,说明当前点未被确定是否为角点,需进一步判断。
假如当前点存在任何邻点角值为1,就把当前点角值置0,说明当前 点存在邻点是角点,当前点为非角点。
假如当前点的所有邻点的角值都不为1,且当前点角值比所有邻点角 值都大,就把当前点的角值置1。当前点是角点。
算法执行后,仍有一些点没有确定是否为角点。算法下一次的执行又 要开始,整个过程重复上面的步骤,直到所有点可以被确定。
3 •角值图压缩
角值图的压缩可极大地降低非极值抑制屮的运算量。如Fig. 1所示, 原图中N*N区域中N2个邻点用压缩图的对应点P (x, y)表示,P (x, y) 记录下对应N2个点中具有最大角值的点信息,包括角值及点坐标。
角值图压缩极大地降低了算法的时间。也引入了错误,它使得在公*2N 的区域至多只出现1个角点,可能会丢失角点。
算法的止确性要验证两点: