2014-03-28 15 views

回答

0

是您的最終目標找到前景?你能顯示一些圖像嗎?

如果動物足夠快地移動,它們會產生很多強度變化,而背景像素在大多數幀之間將保持緊密相關。我不會寫你真正的代碼,但會給你一個openCV中的僞代碼。其主要思想是,以平均只有相關的像素:

Mat Iseq[10];// your sequence 
Mat result, Iacc=0, Icnt=0; // Iacc and Icnt are float types 
loop through your sequence, i=0; i<N-1; i++ 
    matchTemplate(Iseg[i], Iseq[i+1], result, CV_TM_CCOEFF_NORMED); 
    mask = 1 & (result>0.9); // get correlated part, which is probably background 
    Iacc += Iseq[i] & mask + Iseq[i+1] & mask; // accumulate background infer 
    Icnt += 2*mask; // keep count 
end of loop; 
Mat Ibackground = Iacc.mul(1.0/Icnt); // average background (moving parts fade away) 

要提高的結果,你可能會降低法師分辨率或應用模糊,以提高相關性。例如,您還可以通過侵蝕從小型連接組件中清除每個遮罩。

+0

是的,我想通過應用幀差異方法找到前景物體,爲此我需要一個簡單的背景圖像,但是我的相機只在檢測到運動時才拍照。另一個問題是背景隨着時間的推移而變化(在捕獲10或20之後),所以我需要在運行時找到BG。 您可以在這裏看到圖片。 [鏈接](http://answers.opencv.org/question/30794/remove-moving-objects-to-get-the-background-from/) –

+0

看着你的圖片,我會嘗試將它們在實驗室空間轉換爲擺脫照明變化,甚至更好地切換到灰度梯度。運行運動檢測器將有助於查找車站背景。請注意,您可以通過在圖像的多個部分運行matchTemplate來簡單地檢測缺失。四叉樹可能會更好地劃分圖像。我相信Maltab有一個很好的樣本,四叉樹 – Vlad

+0

http://www.mathworks.com/help/images/ref/qtdecomp.html – Vlad

0

如果

  • 每個像素位置作爲背景出現在一半以上的幀,並且
  • 的像素的顏色不跨越幀的子集變化不大在它的背景下,

然後有一個非常簡單的算法:爲每個像素位置,只取中位數強度超過所有幀

怎麼回事?假設圖像是灰度(這使得它更容易解釋,但該過程也適用於彩色圖像 - 只處理每個顏色分量)。如果特定像素在超過一半的幀中以背景的形式出現,那麼當您在所有幀中對該像素的亮度進行分類並對它們進行分類時,背景顏色的像素必須出現在中途位置。 (在最糟糕的情況下,所有背景顏色的像素都會按照此順序被推到最前面或最後面,但即使如此,它們也足以覆蓋中途點。)

+0

偉大的想法,但可能會遭受照明或暴露的變化。 – Vlad

+0

@Vlad:是的,但問題是「相同的背景」。如果允許這些變化,那麼問題變得更加困難。 –

+0

它非常好的解決方案。讓我嘗試。謝謝@j_random_hacker –