有一些搜尋引擎有搜尋相似的功能,比如google,其中是什麼原理呢?
其實我們利用乙個演算法就能達到相似的效果,其中涉及到的演算法就是【感知雜湊演算法(perceptual hash algorithm)】,下面就簡單介紹下該演算法。
1.縮小的尺寸
將縮小到8*8的尺寸,總共64個畫素,這樣做的目的是去除尺寸,比例帶來的差異,最快速的去除高頻和細節差異,僅保留的基本結構。
2.簡化色彩
將上面縮小後的轉化為64級灰度,也就是說中的畫素點最多只有64中顏色
3.計算平均值
計算所有64個畫素點的平均灰度值
4.比較畫素的灰度
將64個灰度分別與平均值作比較,如果灰度值大於等於平均值則記為1,反之記為0
5.生成雜湊值
將上一步中的結果組合在一起,就構成了乙個64位的數,值得說明的是64位數中的順序並沒有嚴格的要求只要兩張所採用的順序一致即可,例如自左到右、自頂向下、big-endian。得到指紋以後,就可以對比不同的,比較64位中有多少位是不同的。在理論上,這等同於計算「漢明距離」(hamming distance)。如果不相同的資料位不超過5,就說明兩張很相似;如果大於10,就說明這是兩張不同的。
演算法缺點:的內容不能變更。如果在上加幾個文字,漢明距離就會很大導致辨認出錯,但是實際上這兩張還是出自同一張原片。
實際應用中,往往採用更強大的phash演算法和sift演算法,它們能夠識別的變形。只要變形程度不超過25%,它們就能匹配原圖。這些演算法雖然更複雜,但是原理與上面的簡便演算法是一樣的,就是先將轉化成hash字串,然後再進行比較。
感知雜湊演算法
感知雜湊演算法是一類雜湊演算法的總稱,其作用在於生成每張影象的 指紋 fingerprint 字串,比較不同影象的指紋資訊來判斷影象的相似性。結果越接近影象越相似。感知雜湊演算法包括均值雜湊 ahash 感知雜湊 phash 和dhash 差異值雜湊 ahash速度較快,但精確度較低 phash則反...
感知雜湊演算法
感知雜湊演算法 perceptual hash algorithm 它的作用是對每張生成乙個 指紋 fingerprint 字串,然後比較不同的指紋。結果越接近,就說明越相似。缺點 的內容不能更改。hash演算法原理 第一步,縮小尺寸。將縮小到8 8的尺寸,總共64個畫素。這一步的作用是去除的細節,...
感知雜湊演算法(pHash演算法)
第一步,縮小尺寸。將縮小到8x8的尺寸,總共64個畫素。這一步的作用是去除的細節,只保留結構 明暗等基本資訊,摒棄不同尺寸 比例帶來的差異。第二步,簡化色彩。將縮小後的,轉為64級灰度。也就是說,所有畫素點總共只有64種顏色。第三步,計算平均值。計算所有64個畫素的灰度平均值。第四步,比較畫素的灰度...