以圖搜圖實(shí)現(xiàn)原理以及相關(guān)算法學(xué)習(xí)

最簡單的搜索算法:均值hash

其工作流程如下:

  • 縮小尺寸: 去除高頻和細(xì)節(jié)的最快方法是縮小圖片,將圖片縮小到8x8的尺寸,總共64個像素。不要保持縱橫比,只需將其變成8*8的正方形。這樣就可以比較任意大小的圖片,摒棄不同尺寸、比例帶來的圖片差異。

  • 簡化色彩: 將8*8的小圖片轉(zhuǎn)換成灰度圖像。

  • 計算平均值: 計算所有64個像素的灰度平均值。

  • 比較像素的灰度: 將每個像素的灰度,與平均值進(jìn)行比較。大于或等于平均值,記為1;小于平均值,記為0。

  • 計算hash值: 將上一步的比較結(jié)果,組合在一起,就構(gòu)成了一個64位的整數(shù),這就是這張圖片的指紋。組合的次序并不重要,只要保證所有圖片都采用同樣次序就行了。

一點(diǎn)解釋: 如果圖片放大或縮小,或改變縱橫比,結(jié)果值也不會改變。增加或減少亮度或?qū)Ρ榷?,或改變顏色?strong>對hash值都不會太大的影響。
最大優(yōu)點(diǎn):-----計算速度快!

那么完成了以上步驟,一張圖片就相當(dāng)于有了自己的"指紋"了,然后就是計算不同位的個數(shù)---漢明距離
如果漢明距離小于5,則表示有些不同,但比較相近,如果漢明距離大于10則表明完全不同的圖片。

缺點(diǎn): 但受均值的影響非常大。如對圖像進(jìn)行伽馬校正或直方圖均衡就會影響均值,從而影響最終的hash值。

改良版:pHash
pHash的工作過程如下:

  • (1)縮小尺寸:pHash以小圖片開始,但圖片大于88,3232是最好的。這樣做的目的是簡化了DCT的計算,而不是減小頻率。

  • (2)簡化色彩:將圖片轉(zhuǎn)化成灰度圖像,進(jìn)一步簡化計算量。

  • (3)計算DCT:計算圖片的DCT變換,得到32*32的DCT系數(shù)矩陣。

  • (4)縮小DCT:雖然DCT的結(jié)果是3232大小的矩陣,但我們只要保留左上角的88的矩陣,這部分呈現(xiàn)了圖片中的最低頻率。

  • (5)計算平均值:如同均值哈希一樣,計算DCT的均值。

  • (6)計算hash值:這是最主要的一步,根據(jù)8*8的DCT矩陣,設(shè)置0或1的64位的hash值,大于等于DCT均值的設(shè)為”1”,小于DCT均值的設(shè)為“0”。組合在一起,就構(gòu)成了一個64位的整數(shù),這就是這張圖片的指紋。

優(yōu)點(diǎn)只要圖片的整體結(jié)構(gòu)保持不變,hash結(jié)果值就不變。能夠避免伽馬校正或顏色直方圖被調(diào)整帶來的影響。
與均值哈希一樣,pHash同樣可以用漢明距離來進(jìn)行比較。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容