2013-05-10 90 views
1

我是圖像處理的新手。所以我可能會在這裏問一個noob問題。用矩形顯示圖像差異

我在VS2010,.Net 4,Windows應用程序。

我想通過矩形(或任何其他形狀)顯示兩個圖像之間的差異。 我試圖在下面的鏈接中引用該類。

http://www.aforgenet.com/framework/features/template_matching.html

然而,第一張照片(玫瑰的兩個黃釉矩形)是我真正想要的,在上面的鏈接代碼,告訴你什麼東西都匹配,而不是分歧。我實際上想要找出差異並突出顯示/繪製矩形區別。

我試過DifferenceThresholdedDifference類以及在AForge庫,但我可以創建一個新的圖像,只是顯示差異,但是,我想繪製矩形圍繞這些差異。我不知道如何獲得不同的座標繪製矩形?

我可以在這裏使用什麼類/功能的任何輸入?

我已經試過EyeOpen庫,但它沒有很多選擇與阿弗爾相比,除非我在這裏丟失任何東西。我可以在C#中嘗試除Aforge.Net以外的任何其他庫。

問候, Rumit

+0

你究竟如何提出圍繞差異繪製矩形?考慮構成45度線的差異的幾乎微不足道的情況。你想要一個包含所有變化的矩形嗎?或者,每個小像素的小矩形都會改變? – John 2013-05-13 21:20:19

回答

3

讓我知道如果我正確地理解你的問題:你想比較兩個圖像,如果它們之間的差異然後繪製矩形圍繞它表明這種差異。

如果這是你試圖實現的唯一的事情,那麼我不會使用任何外部庫,而是我會比較像素逐像素,然後圍繞不匹配的區域繪製矩形。

假設兩個圖像的大小相同,你可以使用簡單的循環,以獲取不同的像素的座標:

//the images are loaded in Bitmap image1, image2; 
for (int x = 0; x < image1.Width; x++) 
{ 
    for (int y = 0; y < image1.Height; y++) 
    { 
     if (image1.GetPixel(x, y) != image2.GetPixel(x, y)) 
     { 
      posX = x; posY = y; //position of the pixel that is different 
     } 
    } 
} 

然後你只需繪製由posXposY指定像素周圍的矩形使用DrawRectangle()。如果你想檢測所有的差異,你可以創建一個像素座標的數組,每當你發現一個區別時添加項目,然後在所有區域繪製矩形。

恐怕使用GetPixel()是很慢的。如果您正在尋求速度,那麼我建議使用LockBits()UnlockBits()進行像素操作(請參閱MSDN Library)。

+0

在移動到外部庫之前,我嘗試了這種方法,但在上面的方法中,很難確定繪製矩形的區域。例如,在我原來的文章鏈接中有一個帶有兩個矩形的玫瑰圖片。如果我逐個像素地去,那麼決定在哪裏繪製矩形是非常困難的。如果我在這裏丟失任何東西,讓我知道嗎?我正在看一個應用程序,它會發現多個區別並突出顯示相同! – 2013-05-12 05:47:18

+0

@rumitpatel我很抱歉,但我仍然不明白你想達到什麼。如果它是[模板匹配](http://en.wikipedia.org/wiki/Template_matching),即將圖像與某個模板進行比較並突出顯示匹配區域,那麼您可以利用寫在您問題中發佈的鏈接上的確切代碼。如果它發現[兩個圖像的差異](http://en.wikipedia.org/wiki/Image_differencing),那麼你在我的答案或其他差異技術中使用代碼。您可能還想在單個圖像中查找一些區域差異並對其進行比較,但我不明白這是如何有用的。 – SysGen 2013-05-12 12:06:50