发明名称 一种基于结构光的三维测量系统中利用GPU并行计算的方法
摘要 本发明公开了一种基于结构光的三维测量系统中利用GPU并行计算的方法,将从摄像机采集的变形条纹图像和双目立体视觉标定获得的摄像机参数一次性传输到GPU设备,在GPU设备上实现图像校正、相位计算、相位展开、立体匹配和三维点坐标的计算,最后将计算结果一次性从GPU设备传输到计算机内存。本发明提出一种大规模、细粒度快速并行计算方法,该方法有效利用了CPU与GPU数据传输带宽,减少了多次数据往复传输时间的损耗,充分利用了GPU多处理器的优点,提高了整体的计算速度。
申请公布号 CN102538709A 申请公布日期 2012.07.04
申请号 CN201210003539.3 申请日期 2012.01.09
申请人 黑龙江科技学院 发明人 周波;车向前;赵灿;程俊廷;何万涛;孟祥林;赵福军;霍滨焱;付茂栗
分类号 G01B11/25(2006.01)I 主分类号 G01B11/25(2006.01)I
代理机构 深圳市智科友专利商标事务所 44241 代理人 曲家彬
主权项 1.一种基于结构光的三维测量系统中利用GPU并行计算的方法,该方法借助于:三维测量系统中的光栅投射设备向被测物投射条纹,三维测量系统中的摄像机采集经光栅投射的被测物图像,并保存在三维测量系统中的计算机内存中,并获取摄像机的摄像机内参数<img file="2012100035393100001DEST_PATH_IMAGE001.GIF" wi="20" he="21" />、摄像机外参<img file="523266DEST_PATH_IMAGE002.GIF" wi="21" he="21" />和<img file="2012100035393100001DEST_PATH_IMAGE003.GIF" wi="20" he="21" />、摄像机镜头畸变参数<img file="722297DEST_PATH_IMAGE004.GIF" wi="22" he="21" />和<img file="2012100035393100001DEST_PATH_IMAGE005.GIF" wi="20" he="21" />,三维测量系统中计算机的GPU实现被测物体的三维点的并行计算,其特征在于:该GPU并行计算方法的步骤是:⑴、将所获得的所有图像按序存于计算机的内存中,将获取的摄像机的全部参数,以数组的形式存在三维测量系统中的计算机内存中;⑵、在计算机GPU设备端,计算需要使用的存储空间,并开辟该存储空间,将计算机的内存中的步骤⑴保存的图像和摄像机的参数数据一次性拷贝到计算机GPU设备端的公共存储器中;⑶、根据待处理数据规模划分线程块(block)大小,选择将线程块(block)设计为二维;⑷、在计算机GPU设备端,完成图像校正,图像校正步骤如下:a、将要校正的数据与纹理绑定,使用纹理存储器的归一化坐标;b、使用纹理存储器所提供的线性插值来获取非整数位置的特征值;c、设<img file="564351DEST_PATH_IMAGE006.GIF" wi="40" he="22" />是理想的成像面坐标(单位:mm),<img file="2012100035393100001DEST_PATH_IMAGE007.GIF" wi="45" he="21" />是畸变的坐标,则<img file="490719DEST_PATH_IMAGE008.GIF" wi="344" he="30" /><img file="DEST_PATH_IMAGE009.GIF" wi="348" he="30" />其中<img file="DEST_PATH_IMAGE011.GIF" wi="80" he="23" />,k<sub>i</sub>为径向畸变参数,p<sub>i</sub>为切向畸变参数由此获得畸变位置,完成图像校正;⑸、在计算机GPU设备端,完成相位计算与相位展开,相位计算与相位展开包括以下步骤:a、获得当前水平方向线程序号tx = blockIdx.x * blockDim.x + threadIdx.x;与坚直方向线程序号ty = blockIdx.y * blockDim.y + threadIdx.y;b、获得当前线程所处理的图像位置序号 i = ty * Width图像宽度 + tx;c、根据光栅条纹数目计算频率系数;d、计算当前位置点的相位,并根据合成频率技术展开相位;e、最终得到的每个摄像机的无折叠唯一相位;⑹、在计算机GPU设备端,完成相位的立体匹配,相位的立体匹配包括以下步骤:a、获得当前水平方向线程序号tx = blockIdx.x * blockDim.x + threadIdx.x;与坚直方向线程序号ty = blockIdx.y * blockDim.y + threadIdx.y;b、以当前线程序号tx,ty作为的左摄像机相位的待匹配位置;c、根据基础矩阵计算极线,沿极线在右摄像机相位中找对应点;d、对于找到的对应点,将水平方向坐标存储在匹配点X坐标存储区 [ty*Width+tx]位置,将竖直方向坐标存储在匹配点Y坐标存储区 [ty*Width+tx]位置,未获得匹配点的则将该位置存储区水平、竖直方向[ty*Width+tx]位置内容置为零,表示未获得匹配点;⑺、在计算机GPU的设备端,完成三维点计算,以当前线程号tx,ty作为左侧匹配位置点,根据存储在X坐标存储区与Y坐标存储区中对应位置的右匹配点坐标,计算三维坐标x、y、z,分别存储于三维点X坐标存储区[ty*Width+tx]位置、Y坐标存储区[ty*Width+tx]位置、Z坐标存储区[ty*Width+tx]位置中;⑻、将步骤⑺完成的三维点坐标一次性回传至计算机的内存中,释放计算机GPU设备端所开辟的存储空间。
地址 150027 黑龙江省哈尔滨市松北区糖厂街1号