2011-07-06 32 views
3

我在C#中使用webcamera(使用AForge)。我也有一些默認背景。我需要提取當前圖像和背景之間的差異,並創建一個僅包含默認背景中不存在的對象的新圖像。例如,如果我將我的手移到webcamera的前面,我只需要輸出該手(其餘的背景爲白色)。如果我只逐一比較像素,它會變得很難看,因爲有很多噪音。我曾嘗試使用閾值來區別,但結果仍然非常糟糕。我認爲也許有一些過濾器或一個已知的算法如何做到這一點?任何幫助將非常感激。在C#中提取2個圖像之間的差異

+0

只是一個想法,你不能使用Kinect SDK嗎? http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/或者,這可能至少會給你一個線索如何解決你的問題。 –

+0

Kinect設備不是這個SDK嗎?至少它在SDK描述中這樣說。我只使用單個攝像頭。其實我已經找到了AForge過濾器,稱爲CustomFrameDifferenceDetector類,但沒有關於如何使用它足夠的文檔。至少我還找不到它。 –

+0

不確定。當你想跟蹤手部動作時想想它。:) –

回答

0

您可以隨時嘗試比較兩者的灰度圖像。假設你的網絡攝像頭是靜止的(因爲如果不是,那麼你將不得不做更多的調整像素位移),那麼你可以將圖像轉換爲灰度,並有一個你認爲圖像不同的閾值:

int threshold = 30; 
PixAvg1[i,j] = (Pix1.R + Pix1.G + Pix1.B)/3 
PixAvg2[i,j] = (Pix2.R + Pix2.G + Pix2.B)/3 
if (Math.Abs(PixAvg1[i,j] - PixAvg2[i,j+1])>threshold) 
    difPixel == true; 

閾值是您想要獲得的像素之間有多大的容差。該值可能來自圖像亮度的差異。

有了這個,你不會得到鬆脆的結果,因爲你介紹一些像素將匹配,但是,你可以運行一個額外的掃描(如果你想),並做一些種類的區域填充。