井的功能產生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距離內一樣,速度無法準確測量,也無法在法庭上站起來。
好吧我想知道那裏有一點,但除非你在一個已知的距離和已知的大小跟蹤對象,你不能得到沒有一些深度數據的速度或速度,從一個特定的相機,如動力學或從兩臺相機中分離出一個已知的距離。 (請注意,如果您知道相機行進的距離並且沒有旋轉,則可以使用一個相機和兩個相框來完成此操作)。
我希望這可以幫助你,
乾杯,
克里斯