2013-11-27 40 views
2

我正在使用Emgu和C#。什麼是運動檢測的最佳色彩空間

我有一個來自攝像頭feed的jepgs流。此刻,我使用兩張圖像之間的absdiff來獲取運動變化。

Image<Bgr, byte> _diffBetweenCurrentAndPrevious = _currentFrame.Convert<Bgr, Byte>().AbsDiff(PreviousFrame.Convert<Bgr, Byte>()); 

然後我通過所述圖像保持所有的變化的數據陣列枚舉並尋找高於某一閾值的運動。

float diffCouner = 0; 
for (int y = 0; y < 576; y++) 
{ 
    for (int x = 0; x < 720; x++) 
    { 
     if (_diffBetweenCurrentAndPrevious.Data[y, x, 0] >= 10 
     || _diffBetweenCurrentAndPrevious.Data[y, x, 1] >= 10 || 
     _diffBetweenCurrentAndPrevious.Data[y, x, 2] >= 10) 
     { 
      BaseImage.Data[y, x, 0] = _currentFrame.Data[y, x, 0]; 
      BaseImage.Data[y, x, 1] = _currentFrame.Data[y, x, 1]; 
      BaseImage.Data[y, x, 2] = _currentFrame.Data[y, x, 2]; 
      diffCouner++; 
      } 
     } 
    } 

此刻我正在使用BGR。

使用HSV或YCC或..是更好嗎?

我注意到在使用YCC時我不得不使用較低的閾值,因爲對於晚上經過的汽車來說,這個動作看起來並不明顯。

我對最佳方法感興趣。

還是應該使用<Gray,Byte>格式?

我問的原因是我已經嘗試過所有這些,他們都似乎工作。但是在一天中的不同時間,它可能並不是那麼好,因爲瞬間無聊或光亮的一天。或者低對比度。

我可以並將在幾天內進行測試,但我會像一個紅色的印第安人祈禱季節改變。

任何建議將受到歡迎。

感謝

萬一任何一個下面我的問題感興趣,我發現,使用<Gray,Byte>沒有給予足夠好的結果光線的變化。

我現在運行測試與<HSV,Byte>

回答

2

我用了一模一樣的問題。我不認爲有什麼辦法可以解決你的問題。我建議你創建一個應用程序,你可以在運行時改變你的參數,並從閾值檢查你的組合是否足夠好。我用這個項目。我希望這將有助於http://www.osslab.com.tw/@api/deki/files/3550/=An_autonomous%252c_co-operative_telerobotic_agent_framework_for_WowWee_Rovio_-_Konstantinos_Tsimpoukas_1130191.pdf

+1

啊一種親切的精神! :)謝謝 –

+1

我很高興我可以幫忙。 – Apostolos

2

我可以建議你的色標跟蹤,以選擇合適的色彩空間作爲 RBG空間不是很 好,它甚至以小光照變化過於敏感。 這真的取決於你想跟蹤和追蹤的場景,物體 我所能

+0

嗨,謝謝你的想法和意見,非常感謝。我目前沒有進行跟蹤。但如果我是我可能會使用色相+衛星頻道這樣做:) –

1

如果您需要靈敏度更高水平,請嘗試以下(包括前景和背景圖像是BGR格式):

int diff0 = Math.Abs(image0.Data[j, i, 0] - image1.Data[j, i, 0]); 
int diff1 = Math.Abs(image0.Data[j, i, 1] - image1.Data[j, i, 1]); 
int diff2 = Math.Abs(image0.Data[j, i, 2] - image1.Data[j, i, 2]); 
int diff = Math.Max(diff0, diff1); 
diff = Math.Max(diff, diff2); 

結果值「差異」是3個通道的最大差異。這種方法一直適用於我各種背景減法需求。

+0

非常感謝張貼 –

相關問題