日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【图像】imagededup照片去重(感知哈希,汉明距离)

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【图像】imagededup照片去重(感知哈希,汉明距离) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼使用:

Imagededup 官方地址 https://idealo.github.io/imagededup/
顯示一張給定照片的重復子集:

from imagededup.methods import PHash phasher = PHash()# Generate encodings for all images in an image directory encodings = phasher.encode_images(image_dir='path/to/image/directory')# Find duplicates using the generated encodings duplicates = phasher.find_duplicates(encoding_map=encodings)# plot duplicates obtained for a given file using the duplicates dictionary from imagededup.utils import plot_duplicates plot_duplicates(image_dir='path/to/image/directory',duplicate_map=duplicates,filename='ukbench00120.jpg')

返回重復文件的列表:

duplicates = phasher.find_duplicates_to_remove(encoding_map=encodings) # 后面可以將 duplicates 從舊目錄移至新目錄,完成去重操作 for i in range(len(duplicates)):shutil.move(oldPath + '/' + duplicates[i], newPath + '/' + duplicates[i])

更多實例見:
https://blog.csdn.net/weixin_43886133/article/details/114113027
https://www.cnblogs.com/xiaodai0/p/11646646.html

算法流程:

(1)首先對原始圖像進行編碼(生成64位0或1值),可選算法如下:

(2)對編碼后的照片,兩兩計算漢明距離(不同位的個數:1011101 與 1001001 之間的漢明距離是 2)。如果這個值為0,則表示這兩張圖片非常相似,如果漢明距離小于5,則表示有些不同,但比較相近,如果漢明距離大于10則表明完全不同的圖片。

(3)設置閾值(0-64),提取出針對某張照片的重復照片。

哈希算法細節:

  • 均值哈希

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

    2)簡化色彩:將8*8的小圖片轉換成灰度圖像。

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

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

    5)計算hash值:將上一步的比較結果,組合在一起,就構成了一個64位的整數,這就是這張圖片的指紋。組合的次序并不重要,只要保證所有圖片都采用同樣次序就行了。(我設置的是從左到右,從上到下用二進制保存)。

    :均值哈希算法主要是利用圖片的低頻信息。一張圖片就是一個二維信號,它包含了不同頻率的成分。亮度變化小的區域是低頻成分,它描述大范圍的信息。而亮度變化劇烈的區域(比如物體的邊緣)就是高頻的成分,它描述具體的細節。詳細的圖片有很高的頻率,而小圖片缺乏圖像細節,所以都是低頻的。所以我們平時的下采樣,也就是縮小圖片的過程,實際上是損失高頻信息的過程。

  • 感知哈希

    均值哈希雖然簡單,但受均值的影響非常大。例如對圖像進行伽馬校正或直方圖均衡就會影響均值,從而影響最終的hash值。存在一個更健壯的算法叫pHash。它將均值的方法發揮到極致。使用離散余弦變換(DCT)來獲取圖片的低頻成分。

    離散余弦變換(DCT)是種圖像壓縮算法,它將圖像從像素域變換到頻率域。然后一般圖像都存在很多冗余和相關性的,所以轉換到頻率域之后,只有很少的一部分頻率分量的系數才不為0,大部分系數都為0(或者說接近于0)。下圖的右圖是對lena圖進行離散余弦變換(DCT)得到的系數矩陣圖。從左上角依次到右下角,頻率越來越高,由圖可以看到,左上角的值比較大,到右下角的值就很小很小了。換句話說,圖像的能量幾乎都集中在左上角這個地方的低頻系數上面了。

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

    2)簡化色彩:將圖片轉化成灰度圖像,進一步簡化計算量。

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

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

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

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

    結果并不能告訴我們真實性的低頻率,只能粗略地告訴我們相對于平均值頻率的相對比例。只要圖片的整體結構保持不變,hash結果值就不變。能夠避免伽馬校正或顏色直方圖被調整帶來的影響。

    與均值哈希一樣,pHash同樣可以用漢明距離來進行比較。(只需要比較每一位對應的位置并算計不同的位的個數)

猜你喜歡:👇🏻
?【圖像】jpg與jpeg的區別
?【圖像】一個像素占幾個字節?多少比特?
?【圖像】插值方法原理(最近鄰,雙線性,雙三,蘭索斯)

總結

以上是生活随笔為你收集整理的【图像】imagededup照片去重(感知哈希,汉明距离)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。