很多时候,我们需要处理视频流而无需使用摄像头。访问相机矩阵将有利于各种处理技术。是否可以在无法访问相机的情况下破解相机校准?
我有来自安装在移动汽车上的单个摄像头的视频流,记录道路(因此地平面上有多条平行线,车道标记的拐角但没有圆圈)。我想创建一个自上而下的视图,但我无权访问相机。可能吗?如果有怎么办?
我从Learning OpenCV: Computer Vision with the OpenCV Library一书中了解到,我需要以下矩阵:
- 内在的,和
- 失真
..对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)
匹配四个输入图像点来获得一种自上而下的视图。但我不确定如何处理失真:
选择点:首先,我放大输入并尝试在车道标记上精确选择匹配的外部点以创建单应矩阵并预览透视变换图像warpPerspective
。我看到车道被扭曲但不知道有多糟糕。为了得到一个想法,我选择了每端的 delta (50px) 更远的点。这就是我得到的:
我可以在不使用相机的情况下修复失真吗?有没有其他方法可以解决这个问题。
很少有输入图像可以玩:
更新 2:自顶向下视图中的非平行(散射)光流
这是由于失真还是其他原因?: