2013-11-22 72 views
0

我正在做一個運動檢測應用程序,作爲c#winform應用程序。2張圖片之間的運動/差異檢測

我使用openCV和emgu包裝來辨別運動(我想陷入)。

很多時候沒有動作變化,但我仍然需要在我的代碼中檢查它。

我給了md5一個去看看我是否可以使用它來快速檢測2張圖像是否有差異。我在99%的時間裏發現2張圖片的md5不匹配,因此告訴我這兩張圖片之間存在差異。我假設運動檢測md5對於這樣的任務不會太「敏感」嗎?

可以將Md5設置爲具有%差異閾值或/和是否有另一種方法來做到這一點?

感謝

到目前爲止的代碼:

private string getMd5Hash(byte[] buffer) 
    { 
     MD5 md5Hasher = MD5.Create(); 
     byte[] data = md5Hasher.ComputeHash(buffer); 

     StringBuilder sBuilder = new StringBuilder(); 
     for (int i = 0; i < data.Length; i++) 
     { 
      sBuilder.Append(data[i].ToString("x2")); 
     } 
     return sBuilder.ToString(); 
    } 

    public string GetMD5(byte[] buffer) 
    { 
     return getMd5Hash(buffer); 
    } 

//調用代碼...

 string img1= t.GetMD5(data); 
     string img2= t.GetMD5(data); 

     if (img1!= img2) 
     { 
      //differences 
     } 
+1

MD5是一個安全的散列算法,不是差分計算器。整個安全哈希的一點是,一個小的輸入差異會創建一個完全不同的哈希值。您正在使用錯誤類型的算法 –

+0

您好,非常感謝您的時間。我想我知道在我的腦海中,我對它的速度印象深刻,我希望能有類似的運動檢測方法。 :) –

回答

2

MD5是加密散列函數,因此它有意產生截然不同的哈希如果它的輸入甚至只有一位改變。因此,僅僅因爲兩個輸入「接近」(即差異很小),MD5哈希將不會,這是算法固有的,並且不能按照您的要求「調整」。

有很多方法來檢測相似的圖像。這裏給出一種可能性:http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html

給出的基本方法是將被比較的圖像轉換爲灰度,調整它們的大小以使它們只有幾個像素寬/高,然後將每個像素轉換爲黑/白(1比特/像素)與全部像素的平均值進行比較。然後,您可以計算兩個圖像之間的像素差異 - 不同像素的數量越大,原始圖像的可能差異越大。

可以通過更改您減少原始圖像的方式來調整此方法 - 減少的越多,圖像之間的差異就越不敏感。

+0

嗨,這似乎是普遍的共識。我會看你送給我的那個鏈接。非常感謝你! –