本人真在做图片拼接实现虚拟现实,请给点帮助

解决方案 »

  1.   

    这是我以前的贴子:
    图象拼接只是全景图漫游里面的一个组成部分。
    一般来说,图象拼接有三个典型的步骤:(对于柱面全景图)
    1. 图象warping到柱面
      说明: 柱面投影公式为
      x' = r * sin(a / 2) + r * sin(tan'(x - (w / 2)) / r))
      y' = H / 2 + ( r * (y - (H / 2))) / k 
      这里面需要用到相机的参数,如焦距等等,具体含义参考下面所说的论文。
    2. 图象alignment
      说明:计算相邻图象之间的差值(alignment of the images in pair)。
      要实现这个算法,你必须使用从粗到精(coarse to fine)的迭代算法, 比较典型的是使用计算机视觉技术里面的从运动估计参数的算法,其中可能要用到图象金字塔(image pyramid)来一层一层的求解。具体内容可以参考科学出版社出版的《计算机视觉》一书,作者是张正友和马颂德以及下面推荐的论文。
    3. 根据求出的参数进行图象的拼接
      说明:为了达到图象的无缝拼接,必须使用Alpha Blending技术,以便消除图象直接的拼接痕迹,否则在拼接处将会出现细缝。这可以使用OpenGL或者DirectX实现。其实图象拼接是一个非常复杂的问题。我想你必须阅读相关的大量相关的文章,如计算机图形学,计算机视觉,图象处理等等。在这方面,我向你推荐微软亚洲研究院副院长沈向洋博士相关的论文,你可以到微软亚洲研究院去招招。沈向洋博士在这方面是世界级的权威,他在全景图方面有几篇非常经典的文章,你也可以从SIGGRAPH会议上招招。源程序是没有的,你必须自己编程来实现。Best Regrads.
      

  2.   

    用图片作虚拟现实在现代图形学里面是基于图象的绘制(Image Based Rendering)的一部分。最早出现于QuickTime VR里面,当时QuickTime VR用的是基于柱面的全境图片。这个一直维持到QuickTime VR4.0。使用柱面可以达到水平360度,垂直一般为10 到 60 度之间的视域。从QuickTime 5.0开始它支持立方体全景图,这样可以到达水平360度和垂直360度的视域,也就是是说覆盖了相机点所以方向的场景。现在关于这个的文章很多,你可以查查。
    一般图象alignment的方法有基于微分迭代的方法;基于特征的方法和基于相位相关度的方法。然后进行图象拼接,必须处理图象拼接的缝隙,一般采用颜色校正和alpha blending来处理。拼接完成以后在mapping到二维图象平面上便于观看。
    要进行全景图漫游必须有特殊的全境图浏览器,比如QuickTime VR。基本方法是把全境图映射到一个虚拟的柱面或者立方体或者球迷上,然后实现一个相机的模型,通过panning,tilting和zooming来到达虚拟VR的效果。如何到达平滑的在不同视图之间过渡,一种是采用视图插值(view interpolation)的方法;一种是查找表(lookup table),然后采用最邻域插值或者是双线性插值来进行象素值的计算。
      

  3.   

    对不起,说错了一个地方:立方体全景图是水平360度,垂直180度的视域。现在的商业软件可以拼接柱面,立方体和球面的全景图。
    因该说这方面的技术已经非常成熟了(相对于商业软件来说)。但是要找到相应的资料还是有一定的困难的,毕竟有些方面的技术要么是专利,要么是秘密。不过你要做一个简单的图片拼接加虚拟漫游因该还是可以的。我推进你先作一个柱面的系统,这需要用到数目相机来采景,最好用一个三角架,把相机放在上面,一定要调到水平,不然可能出现一些变形(如果你的程序写得好,把水平变形和垂直变形考虑进去,就没有关系,这需要对一些参数进行非线性优化)。然后把相机固定在三角架上水平旋转,每隔40度左右拍摄一张相片,一个场景拍摄8到9张。然后在你的程序中读入这些相片,首先把它们投影到柱面坐标(看上面的公式),然后利用三种方法中的一种(比较好的自动的一种是相位相关度:基于FFT方法),作全局拼接(使图片正确的覆盖在一起)。如果你的程序界面写的好,可以进行手动的调整(见商业软件Ulead的Cool 360)。然后采用一定的顺序(从左到右或者二叉树)进行相邻图片的两两拼接,在边缘处采用alpha blending技术。最后得到一张大的全境图(可能需要裁剪)。注意:这是在柱面坐标中的拼接(在平面二维坐标中的旋转相当于柱面坐标中的平移),然后利用反变换公式把图象mapping到二维图象坐标空间(这方便显示)。
    然后自己写一个柱面全景图浏览器(或者用商业的浏览器如Ulead的Cool 360)来进行浏览。
    这是软件编制的大概流程,其中的细节太多,说不清楚。这需要自己动手去写,然后看一些相应的论文。best regards.
      

  4.   

    嗯,你后来所说的因该是叫做“Object Viewer”。就是把一个物体固定在一个平面上,然后用一个相机来围绕这个物体拍照,当然也可以让相机不动,而让物体旋转。拍摄完成以后,把得到的相片拼接起来,以得到对这个物体的虚拟演示效果。QuickTime VR 已经支持这样的效果。
    很遗憾,我没有作过这方面的研究。不过我看过相关的论文。给你一个提示,有几位台湾的研究者写的论文,名字是"Photo VR"。他们在这个系统里面实现了基于全境图象的VR和基于对象的图片VR。你可以使用它为关键字在google里面查一查,相关的有几篇文章。你可以看看,然后以此为索引,展开多看一些文章,然后自己动手实现一下相应的算法。best regards.
      

  5.   

    QuickTime VR 采用对象浏览器格式是一个二维的Frame矩阵,行对应水平帧,列对应垂直帧。通过对关键帧进行插值来得到相机视点下的视图(view)。