使用XNA,我正在显示一个投影到地板上的简单矩形。投影机可以放置在任意位置。显然,投影的矩形会根据投影机的位置和角度而变形。Kinect会扫描地板以寻找四个角。现在,我的目标是对原始矩形进行变形,以使投影不再因基本对矩形进行预变形而变形。
我的第一种方法是在2D模式下做所有事情:首先计算透视变换(使用OpenCV的 warpPerspective()
),从扫描的点到内部矩形的点,然后将逆应用于矩形。这似乎可行,但速度太慢,因为无法在GPU上渲染。
第二种方法是使用3NA进行所有操作,以便使用XNA的渲染功能。首先,我将显示一个平面,使用Kinect扫描其角并将接收到的3D点映射到原始平面。从理论上讲,我可以像在2D方法中一样,将透视变换的逆应用于平面。但是,由于XNA使用视图和投影矩阵,所以我不能只调用诸如之类的函数warpPerspective()
并获得所需的结果。我需要为相机的视图和投影矩阵计算新参数。
问题:是否可以计算这些参数并将它们分为两个矩阵(视图和投影)?如果没有,我还有其他方法可以使用吗?
1
XNA使用View和Projection矩阵,但我认为最终结果=矢量*视图*投影。为什么不尝试使视图为单位矩阵并投影逆透视矩阵,看看是否可行?(不是100%肯定这是真的)
—
Roy T.
您是如何精确计算透视变换的
—
Laurent Couvidou 2012年
warpPespective
?我对OpenCV不熟悉,但是阅读文档后,似乎该功能只是将视角应用于图像。还是我感到困惑?无论如何,也许在您的第一个实现中添加更多详细信息将有所帮助。
您可能想看一下PCL库(pointclouds.org)。从kinect转换深度图像会得到一个点云,相机位于原点,沿z轴指向。然后,您可以使用ransac或其他算法搜索飞机。
—
2012年