2010-12-01 112 views
7

我正在尋找幾種方法來比較兩個圖像,看看它們有多相似。目前我計劃將百分比作爲「相似指數」的最終結果。我的程序大綱是這樣的:與Java的圖像比較技術

  1. 用戶選擇2個圖像進行比較。
  2. 使用按鈕,使用幾種不同的方法比較圖像。
  3. 最後,每種方法的旁邊都會顯示一個百分比,表明圖像基於該方法的相似程度。

我所做的最近讀了很多,一些我讀過的東西似乎是極其複雜的和先進的,而不是像我只有約一年的Java的經驗。到目前爲止,我讀過有關:

  • 傅立葉變換 - 即時發現這相當混亂在Java中實現,但顯然Java高級圖像API有一類吧。雖然我不知道如何將輸出轉換爲實際的結果

  • SIFT算法 - 似乎令人難以置信的複雜

  • 直方圖 - 可能是最簡單的所有的提到,到目前爲止

  • 像素抓取 - 似乎可行,但如果兩幅圖像之間存在相當大的差異,則看起來不會產生任何精確的結果。我可能錯了?

我也有想法,先用Sobel濾波器預處理圖像,然後再比較它。問題是實際的比較部分。

所以是的,我想看看是否有人有比較Java中的圖像的想法。希望這裏有人曾經做過類似的項目。我只想獲得一些可行的比較技術的輸入,這些技術在Java中不太難實現。

在此先感謝

+0

檢查答案。 http://stackoverflow.com/questions/21179019/how-to-compare-set-of-images-in-java-using-pixel-based-image-comparision-metric/21763781#21763781 – 2015-02-09 14:50:15

回答

4
  • 傅立葉變換 - 這可以用來有效地可以計算cross-correlation,它會告訴你如何使兩個圖像,以及如何相似,因爲它們是,當他們最佳排列。
  • 篩選描述符 - 這些可用於比較本地特徵。它們經常用於對應分析和對象識別。 (另請參閱SURF
  • 直方圖 - 歸一化互相關對於在全球範圍內比較圖像通常會產生良好結果。但既然你只是比較顏色分佈,你可能最終宣佈一個有很多雪的室外場景,類似於有很多白色壁紙的室內場景...
  • 像素抓取 - 不知道這是什麼...

你可以從this paper得到一個很好的概述。您可能要考慮的另一個領域是content based image retrieval (CBIR)

對不起,不是Java特定的。 HTH。

+0

謝謝。我真的很想嘗試傅里葉變換,但我在使用Java實現它時遇到了問題。對我來說,它似乎不是非常簡單=/ – Flynn 2010-12-02 07:40:01

+0

如果您搜索「java fft庫」和「fft圖像處理」(FFT =快速傅里葉變換),您可以找到很好的起點。你可能不應該自己實現FFT。注意:如果您想使用FFT,您需要「調整」圖像大小。 – bjoernz 2010-12-02 08:30:26

1

作爲簡單像素抓取的更好替代方法,請嘗試SSIM。它確實要求你的圖像本質上是從同一個角度的相同的對象,但是。例如,如果您比較使用不同算法壓縮的圖像(例如JPEG或JPEG2000),這將非常有用。此外,這是一個相當簡單的方法,您應該能夠合理快速地實施以查看一些結果。

我不知道Java的實現,但有一個C++ implementation using OpenCV。你可以嘗試重新使用它(通過類似javacv)或者從頭開始編寫它。算法本身並不複雜,所以你應該能夠直接實現它。