2013-04-11 76 views
0

我轉換兩個直方圖成整數數組,我現在有大小ARRAY1 [65536]和數組2 [65536]在其中的值是從0 -255在不同的索引範圍的兩個陣列。現在我想匹配兩個這些數組,以便我可以得到這兩個圖像匹配的結果。 請儘快幫助我。如何比較圖像的兩個直方圖?

+0

你所說的「匹配這些陣列」是什麼意思?你只是想測量兩個直方圖之間的地球移動者的距離嗎? – redtuna 2013-04-11 18:29:52

+0

我們可以得到你想要的更多信息?你想知道array1中的值的百分比與array2中的相應值完全匹配嗎? – JakeP 2013-04-11 18:29:57

+0

具有256灰度色調的圖像的直方圖應該對應於256個元素的數組。你爲什麼擁有數組[65536]? – leonbloy 2013-04-11 18:32:43

回答

0

好吧,如果圖像匹配,你不能比的。正如Tergiver所說,圖像直方圖是圖像中色調(亮度)分佈的圖形表示。

如果您想比較直方圖並檢查它們之間的差異程度,可以按照以下示例進行操作(爲了簡化,這是一個具有5個元素大小的數組的示例):

int[] array1 = {0,255,100,200,78 }; 
int[] array2 = {255, 0, 250, 15, 34 }; 
float[] diff = new float[5]; 
for (int i = 0; i < 5; i++) 
{ 
    diff[i] = ((float)Math.Abs(array1[i] - array2[i]))/255; 
} 

float degreeOfDiff = diff.Sum()/array1.Length*100; 
bool sameDistribution = degreeOfDiff == 0; 

Debug.WriteLine(degreeOfDiff + "%"); 
Debug.WriteLine(sameDistribution); 

我會強調,這將不是檢查圖像是否相等。

+0

這個解決方案會給我不同的是image1與image2有多少不同?因爲我的最後一個階段是圖像識別,在這裏我卡在這裏比較兩個直方圖。 – Malik 2013-04-11 18:53:57

+0

它會比較兩個**直方圖**,在這種情況下,「degreeOfDiff」將顯示一個直方圖與另一個直方圖的差異程度。不知道這是什麼類型的直方圖以及它擁有哪種信息,我不能向你保證它會比較圖像。它肯定會比較'int'範圍從0到255 :) – 2013-04-11 18:58:48

1

你不能。

的圖像直方圖爲您提供了一個給定的顏色出現在圖像中的次數。想象圖像A爲25個像素的黑色豎直線和圖像B作爲黑盒子的5×5像素的圖像。

A和B兩者具有完全相同的直方圖,但顯然不是類似圖像。

+0

他們是如果他的相似性度量基於直方圖。我認爲這取決於他的「相似」。如果他意味着他想知道兩幅原始圖像是否「看起來相似」(對於看起來相似的某些模糊值),那麼您無法通過比較直方圖來做到這一點。 – JakeP 2013-04-11 18:50:17

0

問題有點模糊,但如果你想要的是對稱差那麼這裏有一個單行LINQ查詢它:

int[] foo = new int[] { 1,2,3 }; 
int[] bar = new int[] { 4,5,6 }; 

int distance = foo.Zip(bar, (x,y)=>Math.Abs(x-y)).Aggregate((x,y)=>x+y); 

Console.WriteLine("Symmetric difference between foo and bar: {0}", distance); 

可能有奇的方法來計算相似度。這在很大程度上取決於你想要考慮什麼樣的圖像「相似」。我懷疑你還可以得到更好的結果具有更小的陣列(即放在一起類似的陰影),使得「幾乎」一樣的顏色寄存器作爲「類似」的圖像。

編輯:它看起來像Earth mover's distance是你想要的:Wikiedia的頁面列出圖像比較作爲EMD的一個很好的應用。

的EMD的計算機科學的早期應用是比較兩個 可以由於抖動,模糊或本地 變形不同灰度的圖像。[4]在這種情況下,該區域是圖像的域,和 光(或墨水)的總量是「污垢」將被重新排列。

該EMD被廣泛用於基於內容的圖像檢索,以計算兩個數字圖像的顏色直方圖之間的距離 。在這種 情況下,區域是RGB顏色立方體,並且每個圖像像素是「污垢」一個 包裹。可以使用相同的技術用於任何其他 定量像素屬性,諸如亮度,梯度,在一個視頻幀明顯 運動等。

的維基百科頁面還具有僞碼算法來計算EMD,我相信這是你問題的正確答案。