感知雜湊算法3 Wavelet Hashing

圖像相關 andy 3年前 (2021-06-07) 929次浏览 已收录 0个评论 扫描二维码

感知雜湊算法3 Wavelet Hashing

本次我們使用小波轉換 ( Wavelet Transform) 來計算感知雜湊。在圖像壓縮及圖像品質方面使用小波轉換的結果普遍要高於離散餘弦轉換,而在感知雜湊方面,則取決於在頻率域保留圖像特徵的能力。因此多種不同的小波轉換因為有不同的母波,對其轉換的波形也會有不同的結果。我們先以 Haar 小波轉換做感知雜湊測試,並且維持跟 ahash 及 phash 相同的步驟進行運算。

一、減少顏色
將圖像轉換為灰階。在改變大小前減少顏色的主要目的是增加效能。

二、減少尺寸
圖像尺寸並不影響最後的雜湊結果,因為只保留最後三階的結果。這個步驟也可以直接將圖片縮小為 8×8 。

三、計算DWT
我們使用 Haar 小波轉換,轉換後保留最後三階結果。

四、取中位數並計算
取結果的中位數,並進行與中位的比較,高的為1低的為0。

五、組合成雜湊值
和 aHash、pHash 相同,將64個結果組合成十六進制的字串,成為雜湊值。

python 程式如下

def whash(image, hash_size=8, mode='haar'):

    image_natural_scale = int(np.log2(image.shape[0]))
    img_size = 2**image_natural_scale

    ll_max_level = int(np.log2(img_size))
    level = int(np.log2(hash_size))
    dwt_level = ll_max_level - level

    image = transform.resize(image, (img_size, img_size))
    pixels = np.asarray(image)

    coeffs = pywt.wavedec2(pixels, mode, level=dwt_level)
    dwt_low = coeffs[0]

    med = np.median(dwt_low)
    diff = dwt_low > med
    return diff.flatten().astype(np.uint8)

在此以 haar 小波轉換做為測試,也可以改用其他小波轉換。在這段程式碼裡面,為了符合圖像轉換的比例,自動計算了應該縮放的尺寸。最後使用了跟之前一樣的8張圖片來比對,結果如下:

wavelet h1 h2 h3 h4 h5 h6 h7
h1 64 54 52 54 64 60 62
h2 54 64 50 58 54 54 54
h3 52 50 64 46 52 50 50
h4 54 58 46 64 54 52 54
h5 64 54 52 54 64 60 62
h6 60 54 50 52 60 64 60
h7 62 54 50 54 62 60 64

結論
經由測試的結果發現數據總結果比 pHash 來得好,這個符合我們的預期,但加總還是比 aHash 差。我們下次將使用最後一個 diffirence Hash 來進行測試,我們預期 dHash 的結果應該是最好的。


神隊友學長Andy , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:感知雜湊算法3 Wavelet Hashing
喜欢 (0)
[[email protected]]
分享 (0)
andy
关于作者:
中年大叔,打拼 like young students.
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址