热门关键词:

基于GPU的结构光三维测量快速计算方法

  • 该文件为pdf格式
  • 文件大小:507.28KB
  • 浏览次数
  • 发布时间:2014-08-19
文件介绍:

本资料包含pdf文件1个,下载需要1积分

基于结构光的三维测量技术[1-21因为其非接触、高精度等优点,被广泛应用于实际测量中,面扫描三维测量技术和设备是目前最先进的测量手段,也是高端制造最重要的技术之-,已成为提升复杂零部件数字化设计、制造、检测-体化能力的关键环节。现阶段,由于大型复杂零部件的自身特点,快速三维测量存在困难 。同时,在线测量对测量效率提出了更高的要求 。

基于相移法的三维测量技术是结构光三维测量的典型代表,其工作过程主要包括4个步骤:1)图像校正;2)相位展开;3)极线匹配;4)三维点计算。由于三维测量工作过程固有的复杂性,在不牺牲测量精度的前提下,时间复杂度难以大幅度降低。更何况目前分辨力为百万级(5百万、8百万)甚至千万级像素摄像机已经进入测量领域,每-幅图像分辨率的大幅度提高,使得三维测量过程中CPU的计算速度更慢,导收稿日期:2013-01-14l 收到修改稿日期:2013-04-07基金项目:哈尔滨市科技局创新人才项目(2008RFQXG110),黑龙江侍育厅科学技术研究项目(12531601),黑龙江科技大学青年才俊支持计划项目作者简介:车向前(1978-),男(汉族),黑龙江克东人。副教授,硕士,主要研究工作是图像处理、机器视觉。E-mail:chexq###163.coin。

http://44 光电工程 2013年 6月致测量效率进-步降低 J。以极线匹配为例,左摄像机获得的惟-特征需要在右摄像机特征中找到惟-匹配点,依据极线约束,要遍历右摄像机的-条极线上的特征,需要 l百万乘以极线长度次数的搜索,以百万像素摄像机为例,即要搜索的长度近 l千像素,所做的计算约为 10亿量级,这还不包括找对应点的插值计算等。现有的提升计算速度主要有以下几种,-是提升CPU计算能力,但近年来单核心CPU在计算能力上很难有质的提高,尽管目前CPU核心数量增加,但其指令系统更倾向于处理任务,计算性能的提升并不明显。尽管 CPU已经向多核心发展,CPU的多线程和并行计算功能已应用于众多领域,典型的多线程代表为OpenMP,但多核 CPU核心数量突破遭遇瓶颈,目前仍以四核、八核为主,受核心数量限制的并行速度提高有限,同时由于操作系统的流水线作业调度方式和 CPU本身在浮点运算上的限制,使基于 CPU的多线程操作的加速效果仍然无法满足人们对计算速度的需求;二是采用外部硬件加速技术,如采用DSP、FPGA等 j,这种方法主要通过对处理结构控制电路的可配置化以及指令化设计,构建与数据组织形式相适应的多级流水线乘加逻辑计算单元来加快运行速度,但该种方式需要增加额外的配置及费用;三是以优化计算过程为手段的加速技术,其中以Fusielo为代表所提出的极线校正方法 ,即所有极线调整为图像水平方向,这样可以避免每次都计算极线方程而缩减计算时间。但该方法在构建水平极线特征需要进行插值计算,计算对应点时需要回算原始坐标,所以总的缩短时间有限。

图形处理器(Graphic Processing Unit,GPU)主要应用于图形、图像处理计算,其拥有数十倍于 CPU的浮点运算能力,根据这-特点,如何将其应用到三维测量过程中,大幅度提高测量速度,已经成为目前研究的热点。本文针对三维测量的四个具备并行度的过程,为每个过程设计了在 GPU 上可实现的具体算法流程,并根据数据规模及 GPU特性,采用纹理存储技术,设计了-种全局、全幅面位置记录数据的GPU设备端数据结构组织方式,为结构光三维测量系统提供了有效的加速算法。

1 结构光三维测量结构光三维测量主要利用双目立体视觉技术,该技术采用两个视点获取同-物体不同视角下的图像,并基于三角法原理进行三维信息的获取,即由两个摄像机的图像平面和被测物体之间构成-个三角形。已知两摄像机之间的位置关系,便可以获取两摄像机公共视场内物体特征点的三维坐标。

双目立体视觉成像模型如图 1所示,左摄像机光心为Cl,右摄像机光心为Cr,空间物体表面某位置点P在左右相机成像面形成的像点分别为尸1与Pr,空间位置点P既在直线 CIP1上,又在直线c 上,P点是这两条直线的交点,可以通过计算,唯-确定该位置点的三维坐标。

C图1 双目立体视觉成像原理Fig.1 Principle ofbinocular vision imaging设空间点P的齐次世界坐标为P(Xw,Yw,Zw,1)T,其在摄像机成像平面上的齐次投影坐标 p(u, 1)T,根据针孔成像模型,得到该空间点的图像坐标系与世界坐标系的关系为http:ll第40卷第6期 车向前,等:基于GPU的结构光三维测量快速计算方法 451 0。

- 1 0 d0 0 100f 0 00 f 00 0 1Z1xZ1 M 1 X PX式中: 为缩放系数,( o, )为主点坐标,厂为摄像机焦距, 为水平方向的焦距长度,ocyjqdy为垂直方向的焦距长度; 1M2称为投影矩阵,其中 由 , ,ax,no,V0决定,由于 ,ay,/gO,V0只与摄像机内部结构有关,称为摄像机内部参数;J7I 完全由摄像机相对于世界坐标系的方位决定,称为摄像机外部参数。为了获得P点的三维坐标,先用摄像机定标的方法分别求出左右两个摄像机的投影矩阵 儿,P21, P ) 与 , , ) ,若pl(U,1,,1) 与pr(u ,v ,1) 是-个对应点对,则根据式(1)可以得到其在世界坐标系中的方程分别为X -vp打X 0lpitX-up”X-t--fp'ZTX-v'p钾X 0-lP X-甜P X02 基于 GPU的三维测量加速算法实现P - ]二 ~ p T-1,rp。3 JGPU 的可编程能力和并行处理能力越来越强大,不再局限于传统的图形、图像渲染,逐步开始辅助CPU 完成更多的通用计算任务。由 NVIDIA 公司推出的统-计算设备架构(Compute Unifed DeviceArchitecture,CUDA)以更便捷的方式将 GPU的计算能力释放出来。CUDA可以把 GPU直接视为数据并行计算的设备,使GPU更适合于解决商业、工业以及科学方面的复杂计算问题。现阶段,主流GPU峰值单浮点运算能力是同期CPU计算能力的 10倍,GPU的外部存储器带宽接近同期CPU的5倍。GPU比CPU具有更快的技术以及性能的更新频率,价格低廉,在进行通用计算时具有极高的性价比 。如何充分利用GPU的并行计算特点实现-些复杂运算的快速求解L1zJ,已经成为当今的热点问题之-。

根据三维测量的基本原理可知,三维测量的 4个具体过程具备并行度,符合 GPU计算的并行性。使得利用GPU进行三维测量的快速计算成为可能。

2.1 GPU执行模型GPU硬件上的大规模并行是通过重复设置多个相同的流多处理器 (Stream Multiprocessor,SM)实现的,每个SM中又包含 8个标量流处理器(Stream Processor,SP)。线程块的软件抽象将核(Kerne1)函数的-个自然映射转换到 GPU上任意数量的 SM上。线程块是协作线程间合作的容器,只有线程块内部的线程才能共享数据。线程块内所有的线程都在同-个流处理器上执行,GPU通过在SM内部提供高速内存来实现数据共享。下面以 Nvidia公司的 CUDA技术为例介绍其执行模型。

CUDA源程序由运行于CPU上的Host端与运行于GPU上的Device端两部分组成。Host端主要负责程序的控制及初始化等工作;Device端则专注于执行高度线程化的并行处理任务,运行于Device端的计算核 tfKeme1)由-组线程块(thread block)并行执行。运行时,线程块内的线程共享存储空间,线程块之间互相独立。线程块大小的划分要根据处理数据规模以及 GPU硬件参数等因素,合理的线程数量划分对执行效率有很大影响。

h'd:p://www gdgc。ac.crl厂 r-Lf 1 -......... L ] J 0 0 0 ] JJf l 露] 0 O 0 ‰46 光电工程 2013年 6月CUDA采用了单指令多线程 (Single Instruction Multiple Thread,SIMT)执行模型,SIMT单元以若干(Tesla架构的GPU为32)个线程构成Warp(线程束)来进行管理线程的创建、执行等工作,也即实际运行中,每个 Block会被分割成更小的Warp。Wrap中的线程只与线程序号有关,与 Block的维度和每-维尺度无关。在每个时钟周期,SM的Warp调度器按-定准则来确定执行哪个Warp。

2.2图像校正理想的透镜成像是针孔模型,但实际中透镜并不完全满足这个条件,由于摄像机还存在光学系统的加工误差和装配误差,因此实际成像与理想的针孔成像之间存在光学畸变误差。畸变可用五个系数描述 训:三个径向畸变系数 k1,k2,屯;两个切向畸变参数 p1,p2;径向畸变的中心是主点( 0, ),设 , )是理想的摄像机成像面坐标(单位:rnln), ,Y )是畸变坐标;设( , 是理想的像素坐标,(U ,V )是畸变的像素坐标,则:l x 1r k2r4 3 2p1xyP2(r 2x ) ,I Yy[k,r 4 ][2p2xypl(r 2y )]式中 - 。根据图像坐标系与摄像机坐标系转换关系,则:f r2甜(- 0)[尼lr , r。2p1Yp2(二-十2 ) X: (4) JV1,(V-Vo)[k,r k2r j3,。2p2 十 I(二-十2y)] Y因为校正后的坐标存在非整数值,所以要对该位置的灰度值进行插值处理。插值方法可以采用由CUDA提供的纹理存储器进行线性插值,由于纹理存储器的高速只读性,会使插值效率更高;或者根据需要采用插值精度更高、计算复杂度高的插值方法,如拉格朗日二元二次插值、三次内插法等。

GPU算法实现:Host端:a)载入全部图像(24幅)b)载入标定参数;c)分配校正后图像的存储空间;具体为利用cudaMaloc开辟所需的存储空间,用cudaMemcpy将内存中的数据传至GPU的存储器上;d)调用校正拈核函数gimgUndistort<<>>(dstfling,srcnlmg,cameraPara,iWidth,iHeight);其中:dimBlock是-个二维的线程块,dimBlock.X表示水平向线程长度,dimBlock.Y表示垂直向线程长度;dimGrid表示线程块数量,dimCJrid.X为(iWidthdimBlock.X-1)/dimBlock.x,dimGrid.Y为(iHeightdimBlock.Y-1)/dimBlock.Y;iWidth、iHeight分别表示图像的宽度与高度。

Device端:gimgUndistort核函数a)利用下式获得当前水平、垂直线程序号txblockldx.X blockDim.Xthr eadldx.x:tyblockldx.Y blockDim.Ythreadldx.y;b)对于(ty

在实际操作中可以根据需要将GPU数据结果利用cudaMemcpy回至 CPU中,用cudaFree释放掉不用的GPU存储空间。更详细GPU控制使用方法详见文献[11。

GPU端计时方式采用事件Event方式l利用cudaEventCreate创建事件对象,利用cudaEventRecord记录事件,用 cudaEventElapsedTime计算两次事件之间相差的时间,cudaEventDestroy销毁事件对象。这种计时方式比用clock方式精度高很多,可达0.5 s。注意在第-次调用runtime API函数时启动CUDA环境,http:ll第40卷第6期 车向前,等:基于GPU的结构光三维测量快速计算方法 47为了避免将这-部分时间计入,需要在正式测时开始前先进行-次包含数据输入输出的计算以使测试结果更加准确可靠。

2.3相位展开主动视觉测量技术通过向被测物表面投射信息光,求解出具有惟-性的特征,实现了被测物表面的特征表述,最终完成不同视角下的匹配。其中,以正弦光栅投影和相移技术相结合的相移测量技术在测量领域中普遍应用。

采用透射光栅实现正弦条纹的投射,用式(5)表示所获得的光强函数:(x)lo (cos( (x)A x)) (5)其中: )表示光强,,0表示背景光强, 表示正弦条纹的幅度, )表示相位值,zXC(x)表示相位差。当采, - 1、用四步相移法时,四个光栅信号可以表示为 ( )Io (cos( ( ) : tO),卢l,2,3,4)。

相位可以采用式(6)表示:):arctan (6) Ii(x)-3( )首先投射不同频率的三组正弦条纹,对应的频率分别为 、 和 ,要求这 3个频率满足 七 l关系,每组正弦条纹相位差为rd2共四幅,根据文献15]中所描述的外差法对相位进行展开。该算法每个像素点的相位绝对独立,即每幅图像中,某点的相位值只与同频率下4幅相移图像中同-位置相关,而与同- 幅图像中任何其它点无关。该特点保证了相位计算及相位展开过程中,每个线程可以将某点的相位通过相关图像中该位置的灰度值直接计算出来,而这种方式能够很好的使用GPU多线程这-特点。

GPu算法实现:a)获得校正后的所有图像;b)将每组图像按四步相移法公式进行相位计算;c)根据频率关系进行相位展开。

最终得到左右摄像机所对应的相位值,并且按图像顺序存储。

2.4极线匹配在双目立体视觉测量系统中,数据是由两个摄像机获得的图像,即左图像与右图像。如图2所示,如果Pl、P 是三维世界中-点P在两个图像上的投影点,称 与 互为匹配点。左右摄像机光心 与 G与空间点P所确定的平面与左右摄像机成像机形成两条极线plel、pre 。即左图像某位置点p1,在右图像中与其匹配的点必定要在极平面与右图像成像面的交线上。这样在已知特征的情况下,在极线上进行特征搜索即可,免去了全域搜索的计算量,大大提高了搜索效率。

根据GPU自身特点,设计-种全局、全幅面、位置记录数据的GPU设备端数据结构组织方式。在记录匹配点坐标时,因为要记录左、右摄像机对应点,以图像宽、高位置表示左摄像机的位置点,右摄像机对应点水平坐标存储于图像大小的 坐标存储区对应位置、竖直坐标存储 ,坐标存储区对应位置;如 坐标存储区[1oo]位置存储的为匹配点 坐标,,坐标存储区[1OO]位置存储的为匹配点lr坐标,alOoo,loo)与(X[IO0],y[100])为匹配点对。这种方式省去了记录左匹配位置,将左匹配位置隐含在右匹配位置的存储区序号中,有效解决了GPU设备端数据使用、存储问题。

GPU算法实现:a)获得当前水平方向线程序号txblockldx.X×blockDim.Xthreadldx.x;获得当前竖直方向线程序号ty:blockldx.yx blockDim.Ythreadldx.Y;b)以当前线程序号作为的左摄像机相位的待匹配位置;c)根据基簇阵计算极线,沿极线在右摄像机相位中找对应点; d)对于找到的对应点,将水平方向坐标存储在匹配点 坐标存储区XN[ty Widthtx]位置,将竖直方向坐标存储在匹配点 y坐标存储区 YM[ty Widthtx],未获得匹配点的则将该位置存储区水平、竖直方向http://48 光电工程[ty Widthtx]坐标置为零,表示未获得匹配点;2.5三维点计算双目立体视觉系统中,对两个摄像机的摆放位置不做特别要求,如图 1所示,根据式(2)可知,当已知左右摄像机投影矩阵及对应匹配点对的情况下,即可以形成 AXb的超定方程组的情况,当A 非齐异,就可以利用线性最小二乘方法进行求解,公式如下所示:X :f ) A 6 (7GPu算法实现:a)获得当前水平方向线程序号tx与竖直方向线程序号哆;b)根据t)、ty计算图像位置索引号it iWidthtX,其中iWidth表示图像宽度;C)如果 i]!0且 州 i]l0,表明左图像 , 位置对应的右图像匹配点位置为 Ⅳ[f], f]),根据式(7)进行计算三维点坐标。

三维坐标X、Y、z,分别存储于三维点 坐标存储区 、Y坐标存储区 、z坐标存储区 的[t), widtht)(]位置中。

3 实验结果分析C图2 极线匹配Fig.2 Epipolar matchCUDA中可以利用的存储器主要有全局存储器(Global Memory)、纹理存储器(Texture Memory)。其中全局存储器位于显存,CPU、GPU都可以进行读写访问,整个网格中的任意线程都能读写全局存储器的任意位置,全局存储器能够提供很高的带宽,但同时也具有较高的访存延迟。纹理存储器是-种只读存储器,由 GPU专用的图形单元发展而来,可以通过缓存加速减少读取延迟。插值工作中非整数坐标精确度值是根据该插值点邻域内整数位置点的灰度值计算得到的,即需要根据领域内各位置的灰度值进行解算,所以会经常被访问到 ,很多数值会被重复读取,为了提高访问效率,本文采用纹理存储器。

在 GPU中要根据被处理问题的规模为计算设置-个Kemel,根据计算的规模,确定 Kernel的网格块(Grid Block)大校实验中根据所采用 GPU设备特性,及图像大小确定网格块大小,原则是行数、列数所能容纳2的最大次幂的整数倍。如果最大整数倍比最大线程数目还大,就置为最大线程数目的-半。以这样方式进行设置能够更好的调动线程的工作效率。

本文所采用的实验平台为Intel Core i3 530,主频为2.93 GHz,系统内存为4 G,显卡采用的是GeForceGTX460,显卡内存为768 M,显卡的核心频率为700 MHz,显存位宽 192 bit,操作系统为 WindoWS XP,系统实现基于CUDA 5.0,软件平台为VS2010。实验数据为 130万像素(1 280xl 024)、500万像素(2 592x1944)分辨力的8位图像序列进行试验,分别对GPU与CPU及 OpenMP的实验结果进行了对比。表 1列出了1 30万像素数据在GPU和 CPU、OpenMP上执行相关计算的实验结果。表2列出了500万像素数据在GPU和 CPU、OpenMP上执行相关计算的实验结果。其中,计算时间为数据到达开始至数据解算完成的时间。GPU端计时采用 Event方式计时,表中 GPU times指数据到达 GPU至 GPU解算完成时间。GPUtimes(include transform times)指在CPU端计时,包括将数据传至GPU时间、GPU计算时间以及 GPU回传http://第40卷第6期 车向前,等:基于GPU的结构光三维测量快速计算方法 49数据时间。GPU整体计算时间(Au ca1 times)是指将三维测量4个步骤时间进行求和计算,各步骤不需要向主机端返回中间计算结果,当计算全部完成时-次性向主机端返回测量结果。

表 1 130万像素数据计算效率性能对比Table 1 The 1.3 million pixel data calculation eficiency performance comparison通过实验可以看出,在 GPU上执行整个三维测量中的各步骤计算时间及整体计算时间同CPU相比具有明显的加速效果。尤其在处理高分辨率(500万像素数据)数据时采用单纯CPU时间计算需要近 10 min的时间,即使采用多核运算的OpenMP也需要2 min的时间,这在实际应用是用户很难忍受的问题,而采用GPU进行计算即使算上数据传输时间也仅为4 s。此外,通过实验可以看到在GPU上进行各步骤计算时如果频繁将中间结果传回主机端会占用大部分的数据传输时间,如三维点计算、及相位展开过程中,本身在GPU计算时间很短,但将结果传至主机端时耗费了大部分时间,因此在实现过程中采用整体计算模式,即将图像数据及参数-次性传至GPU端,分别进行计算,将中间结果只保存在GPU端的存储器上,当计算全部完成时再将需要的结果-次回传至主机端,这种方式可以有效减少因中间数据在 GPU端与主机端交互所产生的传送数据耗时。

用于在GPU计算上的数据结构与组织形式架构后,影响GPU计算效率的主要因素有:1)数据传输带宽,由于CPU与GPU不共用存储器,在GPU工作之前需要将数据传至GPU的存储区,计算完成后再将结果传递回内存中,这是必须要耗费的时间,因此 GPU设备的位宽也是减少整体计算时间的主要因素;2)流多处理器数量,更多的流多处理器会分担更多的处理任务,尤其是当数据处理规模很大时,流多处理器的总量会直接影响GPU的计算时间。

4 结 论三维测量技术是物体形貌数字化的重要技术手段,能够在工业制造、生物医学、文物数字化、科学研究等多个领域具有重要的应用价值。针对现阶段摄像机硬件设备性能飞速提高,三维测量的计算效率逐渐成为应用瓶颈,在大分辨率数据的前提下,现有的技术手段在计算效率上很难有大幅度的提升。对此,提出了-种基于GPU的快速计算方法。该方法充分利用GPU众核多线程、高存储器带宽、高度并行化计算能力等特点,根据结构光三维测量技术特点,将整个工作过程设计成了具有高度并行化的四个部分,构建了在 GPU上进行计算的数据结构与数据组织形式,实验证明该方法与CPU相比具有相当优越的加速比,有效解决了大分辨率数据计算耗时的问题。实验结果分析了 GPU适合于三维测量中的加速计算,并针对http://50 光电工程 2013年 6月影响计算效率的因素加以分析,本文算法并没有完全挖掘出 GPU并行计算的巨大潜力,设计和组织运行于 GPU上更优越的算法以便提升计算能力也是今后的工作方向。此外,GPU专用计算设备上的应用尝试也可以进-步挖掘计算性能的提升空间。

正在加载...请等待或刷新页面...
发表评论
验证码 验证码加载失败