很多时候,我们可以处理视频流而无需使用摄像机。访问相机矩阵对于各种处理技术将是有益的。
我有一个安装在行驶中的汽车上的单个摄像机的视频流,它记录了道路(因此,在地面上有多条平行线,从车道标记处拐角处)但没有圈子)。我想为此创建一个自顶向下的视图,但是我无权访问相机。可能吗?如果可以,怎么办?
我从《学习OpenCV:使用OpenCV库的计算机视觉》中了解到,我需要以下矩阵: /> ..要对图像进行cv2.undistort()计算,请计算单应性cv2.getPerspectiveTransform()cv2.warpPerspective()最终获得俯视图。所有参数都重要吗?
是否可以从其他摄像机(如OpenCV源代码示例)复制参数?

先前的研究:


OpenCV Python相机校准教程-需要访问相机

相机自动校准-带来希望“如果识别出多组平行线或已知形状(例如圆形)的对象,则可以进行校准” />尝试了解相机校准相关的答案[1] [2] [3],以便为我的问题找到答案。

有什么想法吗?

更新1:透视变换实验
我尝试使用getPerspectiveTransform(pts1,pts2)dst = cv2.warpPerspective(img,M,(x,y), flags=flags)匹配输入图像的四个点以获得一种自顶向下的视图。但是我不确定如何处理这些失真:
选择点:首先,我放大输入并尝试在车道标记上精确选择匹配的外部点,以创建Homography Matrix并使用warpPerspective预览透视变换后的图像。我看到车道变形了,但不知道有多糟。为了获得一个主意,我选择了两端的平底三角洲(50px)以外的点。这就是我得到的:

是否可以在不使用相机的情况下修复变形?还有其他方法可以解决此问题。
很少有输入图像可以播放:


更新2:非平行(分散)光学流在俯视图中
是因为失真还是其他原因?:


评论

mobileye.com/technology/mobileye-research-这里的所有内容都可能与您相关

这是同时正在教授的问题之一。看起来mobileye-research链接不再存在。虽然有mobileye.com/our-technology

#1 楼

如果我理解正确,那么只要您想要一个自上而下的视图,就不需要内在的或外在的实现。您基本上可以在平行线上定义4个点,然后将整个图像变形为标准视图(例如$ \ {\ {0,0 \},\ {480,960 \} \} $)。

要在OpenCV中做到这一点,您要做的就是使用findHomography计算单应性,如下所述。然后,使用warpPerspective(在此处查看)对图像进行扭曲。它应该或多或少与原始图像区域的长宽比匹配。


关于问题的第二部分:是的。首先,让我提醒您,诸如此类的许多作品都选择忽略失真估计。但是,我可以想到两种方法来实现此目的:


使用道路车道本身来校正变形:在平行视图中,创建另一个透视扭曲,以便车道本身将是垂直的。在这种设置下,将车道线视为图像中的消失线(就像在透视图中一样)。由此,您甚至可以校准相机。例如,在这里,这里和这里看。
汽车应大致遵循直线/平滑的轨迹。如果您计算所有汽车的运动,它们应该给您类似的运动,平行于车道。该信息再次可用于约束和生成变换,从而将图像扭曲为减少失真的图像。


评论


$ \ begingroup $
感谢@tbirdal:(0)“忽略失真估计” -我已经取得了不错的结果。参见更新2(1)这些论文确实很有用。但是,我可能需要一段时间才能完全理解它们并做出回应。 (2)“ [汽车]应该使您的动作与车道平行” –好主意!但是,即使在自顶向下的视图中,我的车道上也出现了分散的(非平行)光流(请参阅更新2);需要弄清楚如何解决此问题。
$ \ endgroup $
–马纳夫·卡塔里亚(Manav Kataria)
2015年1月18日在1:33



$ \ begingroup $
由于通道不经常移动,因此很难计算通道的光流。我猜边缘跟踪方法会更好。 (例如运动边缘等,甚至活动轮廓)
$ \ endgroup $
–托尔加·伯达勒(Tolga Birdal)
2015年1月18日,下午1:41

$ \ begingroup $
我有一个视频流,摄像头安装在行驶中的车辆的前面。因此,车道标记每帧移动一次(例外:车道末端标记是连续的“ ---”,而不是“---”虚线)。
$ \ endgroup $
–马纳夫·卡塔里亚(Manav Kataria)
2015年1月18日在1:48