如何实现对图像做几何校正,以正确的透视关系显示在异形屏幕上

问题可能显得有点大,求一个解决思路,下面是一个例子,在球形棚顶的不规则显示面上正确的显示影像:

请输入图片描述

冯义军
冯义军
14.02K
编辑于2015-04-20
评论 (4)链接2012-03-04 
  • 0 支持
    目前dewen社群还没这个领域的人才,问题可能得不到解答。不过不要灰心,坚持把内容做好,提供专业、高质量的答案,社群的人员会越来越多的。另外如果你知道答案可以分享出来,谢谢。 – Geo5 2012-03-06
  • 0 支持
    没有研究过该领域,利用的动态积分差值?是否能实现?我也处理过不规则的问题,解决思路就是把不规则的切成N个小的规则的区域在用相关的算法进行处理。 – billmao 2012-03-07
  • 0 支持
    不知道你要做什么..一般我们游戏里面的做法
    1:直接由地图编辑器生成.
    2:在球形天空设置虚拟绑定盒用来绑定物体.
    你所谓的不规则显示影像是什么意思?
    如果想要在圆形天空盒上显示电影之类的也是比较容易做到的~可以使用RTT技术
    – 司徒红颜 2012-03-08
  • 0 支持
    to:@吴绩伟,您客气了,基本思路有一些,有时间测试一下,如果可行会发上答案的。to@billmao,您的这种思路或许可以延展一下,将远端获取的视频图像数据和不规则屏幕数据同时虚拟切为方格,大部分是不需要或者需要进行相对简单的变换,只有一小部分需要特殊处理,据我了解,有公司在用这个思路做。to@司徒红颜,主要是在不规则的屏幕显示数据,举例说就是圆形,弧形等,您说的RTT,也是我考虑的一个思路,结合分网格对Texture进行一些操作,这引起的一个问题是后期提交数据的时候会有一些难度,特别是在贴图上。 – 王辉 2012-03-08

要精确地把图像对应到到曲面是很难的,一般采用线性化的方法,也就是首先把曲面细分使得每个小块都接近平面,然后算出每个顶点对应贴图的坐标,最后把细分成一个一个小三角形或者四边形的图像贴到对应的小块曲面上。这也就是OpenGL或者Direct3D把一幅世界地图贴到一个球体上变成一个地球仪时候用的算法。把三角形映射到三角形的时候只要用普通的线性变换就行了。

如果是要让曲面显示出来的图形就像一张纸扭曲了之后的效果那样(也就是曲面距离保持不变),可以用某种uv坐标系;如果是要让曲面显示出来看起来跟平面一样,可以这样建立贴图坐标:将曲面的3D模型在目标视点的Camera下面做透视变换,变换后的透视空间中的顶点坐标的x、y分量作为贴图坐标。这样贴图完成之后,这个视点下面看到的就刚好是一个平面的效果。

如果曲面是液晶屏之类的形成的话到这里差不多就行了,如果是某个投影仪产生的图像,还需要再做一步计算投影图像,这个可以这样完成:
在OpenGL之类的环境下将曲面的3D模型按照上面说的方法贴上贴图,然后构造一个投影仪位置的Camera。从这个Camera的位置渲染贴好图的3D模型,得到的结果就是投影仪应该投出的图像。要求更高的时候,因为投影仪投出的单位面积光通量是个固定值,距离远的时候投出的图像会变暗,可以预先根据视空间的z坐标来修正亮度,让不同距离的图像亮度一致。

整个过程在Direct3D下面用HLSL或者OpenGL下面用GLSL应该可以一遍完成,即使是投影视频应该也没有大的问题。唯一的问题可能就是投影亮度了吧……

曲面的视角太广的时候这个方法也会有问题,因为人的视野只有中间区域近似是平的,两头也是非线性的。再就是这个方法投出来的只有一个位置看修正是精确的,在这附近近似精确,远一点之后还是弯曲的,这个也是没办法的。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-10-09

你的问题是将投影投射在穹顶或者球幕吧?
我给你几点建议吧,因为我也是想实现,而未能实现,仅提供一个思路吧。
这种案例的实现,往往需要硬件和软件的配合,具体采用哪种配合方案也可以自由搭配。
1.投影仪的短焦或者鱼眼镜头,好的镜头可以事半功倍的完成该任务。
你的任务如果就是做这个镜头,那么请参考各种坐标系的变换及光学物理知识。
2.如果还是需要软件来控制投影仪,那么,据我的了解,市面上是有类似曲面调整这样的软件,可以直接调整GPU显存的输出,我就是卡在了这个环节,针对GPU操作的资料特别少,即使找到了NVDIA的CUDA,貌似更多的人也只是在做并行计算的研究。这项工作绝对没有旁人说的那么轻松,正所谓无知才无畏啊,哈哈,所以,我将自己的思路和心得放在这里,与君共勉。

大伦子 QQ:123685049 HTTP://hi.baidu.com/new/dalunzi

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-06-27
  • lee

    1 票

  • lee
    1914

我的解决思路是这样的:
1.我们必须建立笛卡尔坐标或者球坐标,我个人趋向于选择球坐标,然后以球心坐标基点。
2.当我们在这个球体或者球体外任何一点的时候,计算出当前投射物体所在的坐标点。(这个需要根据几何学确定算法)。
3.当我们确定想透视到球面的时候,必须有一个算法计算当前物体位置到投射位置的切面面积。其中这里涉及到投射柱面切面面积和弧形面积(根据具体情况进行取舍)。(需要高效算法)
4.编写物体随着方向或者位置变化产生的透视面的变化。(需要专门的优化算法)
5.如何显示问题很简单,比如我们通过不同大小的屏幕观看电影,自动随着显示面积而进行调整。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-03-07

按正常的画,不要显示(在视野外),然后找一个阴影算法(不要变黑白),投影上去就OK了

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (1)链接 • 2012-06-27
  • 0 支持
    你这样的话,投影重叠区域亮度会有不均匀的现象发生,普通的图像处理方法不足以处理这个问题。 – 大伦子 2012-06-27
  • 社区维基

    0 票

  • Deus
    16

想到一个小思路,可否在3D沙盒中建立一个平面图形,然后建立一个透明的穹顶,将摄影机固定在球心,这时候只要截取穹顶上的某一部分对应现实中的某快屏幕,就可以获取需要的影像了吧?

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2013-11-04

请输入图片描述

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2014-03-18
德问是一个专业的编程问答社区,请 登录注册 后再提交答案