2013-07-22 92 views
1

我使用OpenCV 2.4.5實時跟蹤魚類。魚在穿梭,也在移動。 我只能從灰階相機中取得相框。減去兩個圖像以刪除OpenCV背景

我試圖只使用這兩個圖像的魚。 在應用閾值之前,我想刪除背景 我試圖減去兩個圖像,但它不適用於梭子以外的部分。

這裏是2幀,和我的兩個結果:https://app.box.com/s/3iug7wan8vz75j3usv7w

我的代碼是如此簡單:

Mat fg = imread("fg.tif",1); 
Mat bg = imread("bg.tif",1); 

Mat result1 = abs(fg-bg); 
imwrite("withoutMask.tif",result1); 

Mat result2; 
bitwise_and(fg, result1, result2); 
imwrite("withMask.tif",result2); 

它的工作原理時,魚停留在穿梭,但他是在不出。 問題是梭子外部的尾巴部分應該與部分中的部分具有相同的強度。

我真的很感激有人能幫助我。

在此先感謝。

+1

嘗試使用圖像比率而不是減法。比率更好,因爲它會自動擴大不必要的對象。 –

+0

謝謝你的回覆。 但是,你的意思是圖像比例?我不明白。 你知道我可以使用的功能嗎? – Sangfuu

+0

您使用A - B來檢測差異。我建議使用A/B或B/A。 –

回答

0

中始終有一個平穩格局一舉一動。視頻處理的最佳方式是查找視頻中的移動和移動。

你的問題是班車正在移動,魚在它裏面游泳。

1)計算大小爲8或16的小塊的運動矢量(如果圖像爲低分辨率,則爲4)。 2)使用許多小塊的運動矢量和它們之間的相關性,你可以確定幾個閉合塊在特定方向上的運動,它是你的對象/魚(你會知道魚的近似大小和大小變化:P )

3)場景/背景/班車正在製作大屏幕的其餘部分。因此,如果你發現有相同方向和大小的MV有很多塊,那麼它就是背景。你也可以懷疑有拐角的班車。

通過搜索靠近最後位置的區域而不是搜索整個圖像來跟蹤魚的最後位置以避免巨大的處理。 (正如我所說的動作是平滑的,因此下一步將非常接近前一個,所以不需要搜索整個圖像)。

0

存在的OpenCV提供一些好的背景減法算法的視頻模塊,看看是:http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractor

而且有一個有用的在這裏討論:http://answers.opencv.org/question/7998/object-detection-using-background-subtraction/

+0

謝謝你的回覆波科,但就像我說的魚在穿梭移動。我的背景正在移動,所以我不能使用這樣的算法。 我需要得到魚,只使用這兩個框架。 – Sangfuu