井的功能产生motionPixelCount是如下总结:
public void MotionInfo(Rectangle motionRectangle, out double angle, out double motionPixelCount);
//
// Summary:
// Given a rectagle area of the motion, output the angle of the motion and the
// number of pixels that are considered to be motion pixel
//
// Parameters:
// motionRectangle:
// The rectangle area of the motion
//
// angle:
// The orientation of the motion
//
// motionPixelCount:
// Number of motion pixels within silhoute ROI
它是由该组motionRectangle的ROI的已移动内检查的像素的量的阈值。这可以防止数十亿个结果在1或2个像素似乎已经移动。但是,通过设置更准确的ROI到车辆的位置,您可以删除此阈值,因为您知道不太可能存在您不在意的随机小动作。
我们可以使用这些数据来计算检查组件的速度和速度,但我们需要一些特定的数据。我们需要知道在特定距离处物体的像素对真实世界的测量。我在answer to this question中详细讨论了这个特殊问题。如果我们知道被跟踪物体的大小并且距离摄像机很近,这很容易,但通常情况并非如此。
如果我们有一个固定距离的物体,那么我们可以用真实世界的术语粗略地取对象的面积,并将其除以物体所占的像素面积。这比执行FOV计算更容易,因为它不需要精确的距离测量,但是可以计算出物体的面积越精确,跟踪结果就越精确。如果我们得到那么这pixel_per_mm测量:
该功能为您提供了整体的运动距离:
double overallAngle, overallMotionPixelCount;
_motionHistory.MotionInfo(motionMask.ROI, out overallAngle, out overallMotionPixelCount);
因此:
速度=(overallMotionPixelCount * mm_per_pixel_mesurment)/ Time_Between_Frames
如果我的物理学速度仍然很快,速度与速度不一样,并且需要你随着时间的推移跟踪物体,我认为你刚好在速度之后,但大概是:
速度=(overall_distance_moved mm_per_pixel_mesurment)/(Sum_of_frames_Tracked帧频)
或:
速度=(overall_distance_moved * mm_per_pixel_mesurment)/(Time_object_was_tracked_for)
总之这可以尽管如此,这很困难,也是为什么不同的技术如Sonar或Infra-red被用来精确跟踪速度的原因。
一个有趣的例子至少在英国是使用彩绘线条和速度相机。这些线之间的距离必须在特定测量值的5mm以内,然后根据这些参考值计算车辆的速度(通过同一辆车的两张图片)。这是提供图像深度数据的作弊方式。这些正在被声纳类型取代,就好像这些线不在规定的5mm距离内一样,速度无法准确测量,也无法在法庭上站起来。
好吧我想知道那里有一点,但除非你在一个已知的距离和已知的大小跟踪对象,你不能得到没有一些深度数据的速度或速度,从一个特定的相机,如动力学或从两台相机中分离出一个已知的距离。 (请注意,如果您知道相机行进的距离并且没有旋转,则可以使用一个相机和两个相框来完成此操作)。
我希望这可以帮助你,
干杯,
克里斯