Ron*_*ese 7 python performance opencv image-processing opticalflow
我正在做一个项目,从图像中找到车辆的速度.我们从车内拍摄这些图像.我们将从第一张图像中标记一些对象作为参考.使用下一图像中同一对象的属性,我们必须计算移动车辆的速度.有人能帮我一下吗???我正在使用python opencv.我已经成功,直到使用光流法找到第二图像中的标记像素.其他人可以帮助我吗?
Jul*_*n-L 11
知道了采集频率,您现在必须找到标记连续位置之间的距离.
为了找到这个距离,我建议你估算每个图像的标记姿势.松散地说,"姿势"是表示物体相对于相机的坐标的变换矩阵.获得这些连续坐标后,您可以计算距离,然后计算速度.
姿态估计是计算已知 3D对象相对于2D相机的位置和方向的过程.生成的姿势是转换矩阵,用于描述对象在相机参考中的参照.

OpenCV实现了姿势估计算法:Posit.医生说:
给定对象的一些3D点(在对象坐标系中),至少四个非共面点,它们在图像中的相应2D投影以及相机的焦距,该算法能够估计对象的姿势.
这意味着:
您可能必须使用OpenCV提供的校准程序计算摄像机的焦距.我想你还有另外两个必需的数据.
编辑:
// Algorithm example
MarkerCoords = {Four coordinates of know 3D points}
I1 = take 1st image
F1 = focal(I1)
MarkerPixels1 = {Matching pixels in I1}
Pose1 = posit(MarkerCoords, MarkerPixels1, F1)
I2 = take 2nd image
F2 = focal(I2)
MarkerPixels2 = {Matching pixels in I2 by optical flow}
Pose2 = posit(MarkerCoords, MarkerPixels2, F2)
o1 = origin_of_camera * Pose1 // Origin of camera is
o2 = origin_of_camera * Pose2 // typically [0,0,0]
dist = euclidean_distance(o1, o2)
speed = dist/frequency
Run Code Online (Sandbox Code Playgroud)
编辑2 :(评论的答案)
"收购频率是多少?"
计算车辆的速度相当于计算标记的速度.(在第一种情况下,参考是连接到地球的标记,在第二种情况下,参考是连接到车辆的摄像机.)这由以下等式表示:
speed = D/(t2-t1)
Run Code Online (Sandbox Code Playgroud)
附:
D 距离 [o1 o2]o1 标记的位置 t1o2 标记的位置 t2您可以通过提取检索经过的时间t1和t2从你的照片的元数据,或从采集频率的成像设备:t2-t1 = T = 1/F.
"用海报标记简单的东西不是更好吗?如果这样做不能将它视为二维物体?"
使用Posit算法(或据我所知的任何其他姿态估计算法)这是不可能的:它需要四个非共面点.这意味着您无法选择嵌入3D空间的2D对象,您必须选择具有一定深度的对象.
另一方面,您可以使用非常简单的形状,只要它是一个体积.(例如一个立方体.)
| 归档时间: |
|
| 查看次数: |
3822 次 |
| 最近记录: |