天天看點

相似圖檔搜尋的三種雜湊演算法一、平均雜湊演算法(aHash)二、感覺雜湊演算法(pHash)三、差異雜湊演算法(dHash)

相似圖檔搜尋的三種雜湊演算法一、平均雜湊演算法(aHash)二、感覺雜湊演算法(pHash)三、差異雜湊演算法(dHash)

想必大家都用google或baidu的識圖功能,上面就是我搜尋冠希哥一幅圖檔的結果,達到圖檔比較目的且利用資訊指紋比較有三種算法,這些算法都很易懂,下面分别介紹一下:

一、平均雜湊演算法(aHash)

此算法是基于比較灰階圖每個像素與平均值來實作的,最适用于縮略圖,放大圖搜尋。

步驟:

1.縮放圖檔:為了保留結構去掉細節,去除大小、橫縱比的差異,把圖檔統一縮放到8*8,共64個像素的圖檔。

2.轉化為灰階圖:把縮放後的圖檔轉化為256階的灰階圖。

附上灰階圖相關算法(R = red, G = green, B = blue)

1.浮點算法:Gray=R*0.3+G*0.59+B*0.11 2.整數方法:Gray=(R*30+G*59+B*11)/100 3.移位方法:Gray =(R*76+G*151+B*28)>>8; 4.平均值法:Gray=(R+G+B)/3; 5.僅取綠色:Gray=G; 3.計算平均值: 計算進行灰階處理後圖檔的所有像素點的平均值。

4.比較像素灰階值:周遊灰階圖檔每一個像素,如果大于平均值記錄為1,否則為0.

5.得到資訊指紋:組合64個bit位,順序随意保持一緻性即可。

6.對比指紋:計算兩幅圖檔的指紋,計算漢明距離(從一個指紋到另一個指紋需要變幾次),漢明距離越大則說明圖檔越不一緻,反之,漢明距離越小則說明圖檔越相似,當距離為0時,說明完全相同。(通常認為距離>10 就是兩張完全不同的圖檔)

下面是我用java寫的此算法的程式,eclipse可直接運作。

下載下傳位址:http://download.csdn.net/detail/nash_/5093143

待比較的原圖:

相似圖檔搜尋的三種雜湊演算法一、平均雜湊演算法(aHash)二、感覺雜湊演算法(pHash)三、差異雜湊演算法(dHash)

圖檔庫中的四張圖:

相似圖檔搜尋的三種雜湊演算法一、平均雜湊演算法(aHash)二、感覺雜湊演算法(pHash)三、差異雜湊演算法(dHash)

輸出結果:

similar_pic.jpg與原圖很少相似

google.gif與原圖完全不同

origin.jpg與原圖是同一張圖

ohter_word.jpg與原圖極其相似

二、感覺雜湊演算法(pHash)

平均雜湊演算法過于嚴格,不夠精确,更适合搜尋縮略圖,為了獲得更精确的結果可以選擇感覺雜湊演算法,它采用的是DCT(離散餘弦變換)來降低頻率的方法

步驟:

1.縮小圖檔:32 * 32是一個較好的大小,這樣友善DCT計算

2.轉化為灰階圖:把縮放後的圖檔轉化為256階的灰階圖。(具體算法見平均雜湊演算法步驟)

3.計算DCT:DCT把圖檔分離成分率的集合

4.縮小DCT:DCT是32*32,保留左上角的8*8,這些代表的圖檔的最低頻率

5.計算平均值:計算縮小DCT後的所有像素點的平均值。

6.進一步減小DCT:大于平均值記錄為1,反之記錄為0.

7.得到資訊指紋:組合64個資訊位,順序随意保持一緻性即可。

8.對比指紋:計算兩幅圖檔的指紋,計算漢明距離(從一個指紋到另一個指紋需要變幾次),漢明距離越大則說明圖檔越不一緻,反之,漢明距離越小則說明圖檔越相似,當距離為0時,說明完全相同。(通常認為距離>10 就是兩張完全不同的圖檔)

此算法可參考開源項目pHash,下載下傳位址:http://www.phash.org/download/

三、差異雜湊演算法(dHash)

相比pHash,dHash的速度要快的多,相比aHash,dHash在效率幾乎相同的情況下的效果要更好,它是基于漸變實作的。

步驟:

1.縮小圖檔:收縮到9*8的大小,一遍它有72的像素點

2.轉化為灰階圖:把縮放後的圖檔轉化為256階的灰階圖。(具體算法見平均雜湊演算法步驟)

3.計算差異值:dHash算法工作在相鄰像素之間,這樣每行9個像素之間産生了8個不同的差異,一共8行,則産生了64個差異值

4.獲得指紋:如果左邊的像素比右邊的更亮,則記錄為1,否則為0.

需要說明的是這種指紋算法不僅可以應用于圖檔搜尋,同樣适用于其他多媒體形式。除此之外,圖檔搜尋特征提取方法有很多,很多算法還有許多可以改進的地方,比如對于人物可以先進行人臉識别,再在面部區域進行局部的哈希,或者背景是純色的可以先過濾剪裁等等,最後在搜尋的結果中還可以根據顔色、風景、産品等進行過濾。

==================================================================================================

  作者:nash_  歡迎轉載,與人分享是進步的源泉!

  轉載請保留原文位址:http://blog.csdn.net/nash_/article/details/8618775

===================================================================================================

繼續閱讀