从视频源确定房间大小的算法

fk2*_*fk2 5 algorithm opencv image-processing video-processing

有没有人知道一种图像分析算法,我可以用它来确定一个房间的一个(或多个)视频记录有多大(大约,在现实生活中的测量中,比方说以米为单位的宽度)?

我目前正在使用 OpenCV 作为我选择的图像库,但在学习图像分析算法方面我还没有走得太远,只需一个名字就可以了。

谢谢

编辑:好的,我刚刚从相关人员那里得到了一些澄清。我基本上无法控制视频源是如何拍摄的,也不能保证有多个数据源。然而,我在房间里有一个特定的点位置,我应该放置一些与该点相关的东西。因此,我可能会尝试确定房间的边缘,然后确定给定位置在房间内的距离有多远,然后猜测房间有多大。

Mig*_*uel 4

非常困难(但很有趣!)的问题。

如果您考虑以完全自动化的方式执行此操作,我认为您会遇到很多问题。但我认为如果操作员可以在一组图片中标记控制点,这是可行的。

您的问题可以更笼统地表述为找到 3D 空间中两点之间的距离,而您只有从不同角度拍摄的两张或多张 2D 图片中这些点的位置。该过程或多或少会像这样进行:

  • 这些照片将附带相机位置和方向信息。例如,假设您获得两张照片,相机方向相同,并且两张照片是用相机水平相距三英尺拍摄的。您必须为摄像机所在的 3D 空间定义一个参考原点,例如,您可以说左图的摄像机位于 (0,0,0),右图的摄像机位于 (3,0, 0),并且两者都面向前,方向为 (0,0,1)。或类似的东西。
  • 现在操作员过来并在两张图片中标记房间的两个角。所以每个角都有 2 组 2D 坐标。
  • 您必须了解相机和镜头的详细信息(视野、镜头畸变、像差等)。您对相机如何使图像变形了解得越多,您的估计就越准确。这与全景拼接软件实现更好的拼接效果相同。有关这方面的信息,请参阅PanoTools 。
  • 有趣的部分来了:您现在将为每个 2D 点进行透视投影的逆投影。透视投影采用 3D 空间中的一个点和相机定义并计算 2D 点。这用于表示平面上的三维对象,例如计算机屏幕。您正在做相反的事情,对于每个 2D 点,您将尝试获取 3D 坐标。由于 2D 点中没有足够的信息来确定深度,因此您可以从单个 2D 点做的最好的事情是在 3D 空间中获取一条穿过镜头并穿过相关点的线,但您不知道该点距镜头有多远。但是两个图像中有相同的 2D 点,因此您可以从不同的相机位置计算两条 3D 线。这些线不会平行,因此它们会相交于一点。3D 线的交点可以很好地估计 3D 点在空间中的位置以及参考相机 3D 空间的坐标。
  • 剩下的就很容易了。当您获得两个兴趣点的估计 3D 位置后,您只需计算它们之间的3D 距离,这就是您想要的数字。

很容易吧?