如何通过几个图像/电影帧创建房间的2D地图?

时间:2010-05-03 16:07:34

标签: map camera 2d edge-detection

我想通过获取所有方向的图片(天花板)(360° - 例如电影帧)来创建房间的简单2D地图,通过边缘检测识别墙壁,删除其他不需要的物体,在以下处连接图像正确的位置(参见墙,全景),最后创建近似的2D地图(从上面看)。获得比例将是另一个参数,这可能是有用的。

我现在有一些自己的想法,例如使用Sobel算法,但如果有人知道某些项目或软件(GPL,免费软件首选)已经这样做会很有趣,因为我还在寻找一些可能对我有帮助的例子。

感谢。

4 个答案:

答案 0 :(得分:1)

我可以通过两种方式看到(有点)工作:

1)弄清楚墙壁与照片拍摄点之间的距离。这样做的简单,一致的方法是使用激光或类似的外部测量装置。如果您单独依靠设备来完成此操作,则需要考虑拍摄照片的人的高度,相机的角度,当然还有设备本身的镜头特性(即焦距失真) )。

2)创建一个真实世界控制对象,设备可以将其用作“基线”。制作一个令人讨厌的亮红色立方体,已知为10x10x10cm;把它放在房间的角落里;从角落到角落拍摄墙壁的照片/视频,使用图像检测找到立方体的墙边界和物体识别;从那时起,弄清楚墙壁尺寸是简单的数学。根据镜头的不同,这种方法可能对焦距失真等不太敏感,但为了准确读数,我认为你仍然需要考虑镜头的特性。

祝你好运,这不是一件小事。仅对墙壁进行图像检测将是一项挑战。 :)

答案 1 :(得分:1)

我有一个类似的实习项目,最后实习从未完成,因为我们都没时间(3个月,没有任何钱)。

但无论如何最终我们要做的是拿一张大的网格纸然后将相机指向它,这样我们就可以绘制出镜头的特性并用它来调整相机出来的照片

其次,我们将在每个墙上放置一个“众所周知/理解”的物体,然后使用它来插入每个墙壁的大小(长度/高度)。

现在这种方法需要更多的“时间”来设置,因为您需要将对象放置在每个墙上,然后将每个墙的图片重叠一点,以便后者可以将它们一起打滑。然后,用户将告诉程序每个“角落/边缘”所在的位置,以便程序知道房间的“一般形状”,然后它将使用放置在墙壁上的物体来插入每个墙壁的长度/高度。

现在请记住,这将是一个相对手动的过程,但使用精心设计的软件/过程可能会相对较快。我的意思是最慢的手动步骤是将物体放在墙上,然后拍摄房间的“全景图”。一旦将图片上传到计算机中,它就可以处理预处理,将它们一起闪烁,然后用一些“线条工具”弹出一张图片,你可以用它来告诉程序角落等等的位置。然后它会进行计算/调整/调整/等等......

答案 2 :(得分:0)

这听起来像一个有趣的问题。以下是可能相关的Microsoft研究论文的链接。

Photo Tourism: Exploring Photo Collections in 3D

请特别查看基于图像的建模(3.1)部分。

答案 3 :(得分:0)

我认为你想要的是Motion from Motion,它是从2D动态图像(视频)中获取3D点云的技术,我可以推荐你这些页面:

您需要首先校准相机,在您获得需要的点云后找到墙壁的相应平面,可选择将其网格化,然后您可以测量墙壁。

使用Nexus One会很慢,但是对于较新的手机,您可以使用它们的GPU并优化一些代码以使其运行更快。如果是我,我宁愿拍摄一个视频并做一个桌面应用程序,然后将其移植到Android,但我对Android开发知之甚少。