论文部分内容阅读
Zernike矩是图像映射在一组Zernike多项式上的正交系数,它能去除表达图像信息的冗余性,对图像噪声等相关操作具有较高的鲁棒性。同时,由于Zernike多项式定义在复数域的单位圆内,因此,它的幅值具有本质上的旋转、平移、尺度不变性。这些出色的特性,使其广泛应用于图像分析、模式识别和光学等领域。本文针对Zernike矩的定义复杂、计算速度慢、以及计算精度低等问题,研究并确定了适合Zernike矩在内切圆和外接圆两种映射下的精度算法;提出预存径向多项式系数消除计算阶乘引起的精度限制;提出Zernike矩的快速算法,并分析了在GPU中实施的困难和瓶颈,最终对GPU快速计算Zernike矩进行了高效的优化。本论文的主要内容和创新点包括以下四个方面:(1)针对Zernike矩中阶乘计算存在的局限,即单精度和双精度只能计算到18阶和40阶,提出了预存径向多项式系数,有效消除了阶乘计算和递归算法中不能计算单个矩的限制,并且提高了矩的计算阶数。同时,计算时间比递归算法及预存阶乘算法更短。(2)提出基于GPU的八卦限对称性算法,并提出数据重排序结合对角线像素预处理的数据重布局方案。在提取对称点时,重布局方案有效避免使用循环条件语句,进而避免线程分歧。重布局后的数据访问是合并的,确保了获得最大的内存带宽。(3)将以上提出的预存径向多项式系数和八卦限对称性算法结合,混合算法进一步缩短了计算时间。同时,克服了以往使用递归算法不能求单个矩的限制。在大尺寸图像中其性能显著地优于GPU的直接法。(4)提出组合线程块Block在一个内核Kernel中的组包方案。该方案极大地提高了资源利用率,收回了混合算法在小尺寸图像中丢失的计算性能。在GPU加速的方法论上有三个贡献:(1)如果图像处理的区域是扇形或者不规则的区域,重布局方案能避免使用条件语句提取这些区域的点。重排序的顺序是数据重布局的关键,尽管它需要额外的开销,但是在后续的处理中合并访问全局内存,最大程度上优化了GPU的性能。(2)有效利用GPU的存储器空间。将被计算的数据预存到GPU存储器,在计算中通过查找表提取。常量存储器的存储方案避免了高频的进行重复的计算,节省了计算时间。简而言之,它是一种用内存空间换取计算时间的策略。(3)在GPU流处理器空闲引起占用率低、资源闲置的情况下,如果应用中不同任务具有相同的执行代码,不同的输入输出参数,则可以使用组包方案提高资源利用率,进而减少计算时间。例如:任意其它类型矩的计算、图像匹配中SIFT算法的高斯金字塔计算等都符合我们的组包条件,它们的计算性能可通过组包方案进一步提高。占用率越低,组包方案越有效。本文采用了英伟达公司的GPU通用并行计算架构(Compute Unified Device Architecture,CUDA)进行加速的设计,介绍了GPU的硬件架构、CUDA的编程模式。设计了Zernike矩直接法、预存径向多项式系数、四象限对称性算法、八卦限对称性算法及组包方案。实验结论是:GPU对比CPU在计算Zernike矩时有上百倍的加速优势;对比直接算法,提出的混合算法在大尺寸图像(512和1024)上有显著的加速,在计算一族Zernike矩时加速比达到了最小5.5×和最大18.6×;结合组包方案的混合算法对小尺寸图像(64、128和256)的加速则达到了最小2.4×和最大13.5×。最后,针对在资源满载的大尺寸图像中Zernike矩的计算,提出了多GPU的分割方案,该方案支持混合算法在多GPU中的执行。