2012-04-14 50 views
8

是否可以比較兩個具有不同分辨率的圖像?比較具有不同分辨率的圖像

我的意思是這裏有一些算法/編程方法。例如,現在我計算哈希碼從圖像的字節數組並比較這些哈希碼值。這是很好的工作,但在不同分辨率的情況下失敗,即圖像眼睛,但字節內容不同。

例如見我的圖像高度:
enter image description hereenter image description here

它的一個具有72 PPI但另一96 PPI。我希望真值價值,而在平等比較,但現在我得到。請幫助在這裏找到正確的解決方案。

+0

也許創建兩個圖像的低分辨率副本(比如說128 * 128,也許32 * 32),並比較它們? YMMV – wildplasser 2012-04-14 15:16:07

+1

這個答案顯示了一些有趣的方法http://stackoverflow.com/a/844113/441354 – AntonS 2012-04-14 15:25:46

回答

5

兩個非常簡單的知覺哈希方法可能會冒險進入更爲複雜的領土之前給一個嘗試是基於離散餘弦變換和當地VS圖像的全球本土化平均:

  1. 轉換圖像爲灰度

    1.1(EDIT),使圖像零均值

  2. 粉碎你的圖像到縮略圖大小,說[32×32]
  3. 運行二維離散餘弦變換
  4. 保持左上方[8×8],最顯著低頻分量
  5. 二值化塊,基於組分的符號
  6. 結果是一個64比特的散列

並在此主題的變體將是

  1. 轉換圖像爲灰度
  2. 任選地調整大小,以預定義的大小。
  3. 分區在一個固定數量的塊
  4. 的圖像確定的全球平均
  5. 確定每個塊
  6. 局部平均對於散列,寫出一個1或每塊一個0,以待如果本地 平均值大於或小於全球平均值。

另外,看看phash

+0

第一種方法的官方方法名稱是什麼?某些編程語言中是否有免費的實現? – 2012-04-17 11:20:45

+0

@邁克爾Z,我只知道他們是「感性哈希」對不起。 phash是開源的,但對商業用途有限制。最好與他們交談。祝你好運。 – Maurits 2012-04-17 19:37:03

+1

非常感謝。但是我的算法遇到了一些問題(我使用了第一個)。缺點在於* 5.根據組件的符號來區分塊,您尚未澄清此過程。我已經基於零(0)值的以下/以上來執行二值化,但是正確的解決方案是考慮顏色的平均值而不是零。這篇文章對我很有幫助:https://www.memonic.com/user/aengus/folder/coding/id/1qVeq – 2012-05-05 10:41:01

3

對於幾種不同顏色的合成圖像,我會從直方圖匹配開始。

基本上將每個圖像中每種顏色的像素數相加併除以像素總數。然後你有一個簡單的浮點矢量作爲指紋。你可以忽略白色,如果你想圖像或多或少的邊界計爲一場比賽

它不會檢測到相同的圖像與片重新排列,或文字向下移動但我不認爲這是在這種情況下,關注