gpt4 book ai didi

python - 找到视频点和现实世界点之间的映射

转载 作者:太空狗 更新时间:2023-10-30 02:51:24 26 4
gpt4 key购买 nike

我正在对视频进行汽车跟踪。我正在尝试确定它行驶了多少米。

我从一个视频帧中随机抽取了 7 个点。我以 point1 为原点

然后在相应的 Google Maps 透视图上,我计算了 6 个点到原点的距离(delta x 和 delta y)

然后我运行了下面的

pts_src = np.array([[417, 285], [457, 794], [1383, 786], [1557, 423], [1132, 296], [759, 270], [694, 324]])

pts_dst = np.array([[0,0], [-3, -31], [30, -27], [34, 8], [17, 15], [8, 7], [6, 1]])

h, status = cv2.findHomography(pts_src, pts_dst)

a = np.array([[1032, 268]], dtype='float32')
a = np.array([a])

# finally, get the mapping
pointsOut = cv2.perspectiveTransform(a, h)

我在测试第7点的映射时,结果是错误的。

我错过了什么吗?还是我使用了错误的方法?谢谢

这是视频中的图片 enter image description here

我已经标记了点,这是映射 enter image description here

x,y 列表示图像上的像素。 metered 列表示从原点到该点的距离(以米为单位)。我基本上是使用谷歌地图,将地理代码转换为 UTM 并计算 x 和 y 差值。

我尝试输入第 7 个点,我得到了 [[[14.682752 9.927497]]] 作为输出,它在 x 轴上很远。

知道我做错了什么吗?

最佳答案

相机不是理想的针孔相机,因此单应性无法捕捉到真正的变换。

对于小角度相机,结果非常接近,但对于鱼眼相机,结果可能会非常不同。

此外,根据我的经验,仅文献中发现的理论镜头畸变模型对于现实世界的镜头(做“奇怪”事情以补偿桶形/垫形畸变的多元件)并不是很准确。今天也可以使用非球面透镜,其中变换可以是任何东西。

为了能够获得准确的结果,我找到的唯一解决方案实际上是使用插值样条函数映射转换函数。

编辑

在你的情况下,我会说问题出在输入数据中:考虑由点 6、3、1、2 形成的准四边形

image with marked quasi-quadrilateral

如果以米为单位的 A-D 距离是 36.9,那么 B-C 距离怎么可能是 53.8 米?

可能问题出在您收集数据的方式上,或者谷歌地图对于如此小的测量值不应该被认为是可靠的。

解决方案可能只是测量点的相对距离,然后根据该距离矩阵求解它们在平面上的坐标。

编辑

为了检查,我使用我的地板图片编写了一个简单的非线性最小二乘求解器(通过随机爬山工作)来测试它。几秒钟后(它是用 Python 编写的,所以速度不是它的最佳特性)可以求解一个通用的精确平面相机方程:

 pixel_x = (world_x*m11 + world_y*m12 + m13) / w
pixel_y = (world_x*m21 + world_y*m22 + m23) / w
w = (x*m31 + y*m32 + m33)

m11**2 + m12**2 + m13**2 = 1

而且我可以获得最大误差小于 4 像素的相机(在 4k 图像上)。

enter image description here

但是对于 YOUR 数据,我无法得到小于 120 像素的错误。我为您的数据找到的最佳矩阵是:

0.0704790534896005     -0.0066904288370295524   0.9974908226049937
0.013902632209214609 -0.03214426521221147 0.6680756144949469
6.142954035443663e-06 -7.361135651590592e-06 0.002007213927080277

仅使用点 1、2、3 和 6 求解您的数据,我当然得到了一个精确的数值解(有四个一般点,有一个精确的平面相机)但是图像显然是完全错误的(网格应该位于街道飞机):

enter image description here

关于python - 找到视频点和现实世界点之间的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56102110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com