感知雜湊算法4 Difference Hashing

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

感知雜湊算法4 Difference Hashing

之前的 aHash 是算出每個特徵像素與平均值的高低來做為雜湊值,這次我們用另一種方式計算圖像的感知雜湊。透過比較特徵像素是否高於前一個特徵像素來算出雜湊值。aHash 的做法可以說是我們注重的是平均值(或是後來我們改為中位數),而這次的 dHash 我們注重的是特徵像素的梯度。

一、減少顏色
將圖像轉換為灰階。在這裡表示圖像亮度。這裡也可以說是我們注重亮度的梯度。

二、減少尺寸
我們在這個步驟將圖片縮小為 8×9 。 column 為9 的原因是我們要讓產生的雜湊值是 8×8 而不是 8×7 。

三、計算差異
在程式範例裡面,計算的是相鄰的兩個特徵像素中,左邊是否比右邊亮(左邊值大於右邊)。順序為由左至右,由上至下。

四、組合成雜湊值

python 程式如下

def dhash(img):
    hash_size = 8

    image = transform.resize(img, (hash_size, hash_size+1))

    diff = image[:, 1:] > image[:, :-1]

    return diff.flatten().astype(np.uint8)

使用跟之前一樣的圖片集做比對,結果如下:

dHash	h1	h2	h3	h4	h5	h6	h7	
h1	64	56	41	58	62	60	61	
h2	56	64	45	58	56	54	59	
h3	41	45	64	41	41	43	44	
h4	58	58	41	64	58	56	59	
h5	62	56	41	58	64	60	61	
h6	60	54	43	56	60	64	59	
h7	61	59	44	59	61	59	64	

總結

在我們之前的文章裡面介紹了三種感知雜湊算法,aHash 計算每個像素與平均值的高低,pHash 使用離散餘轉換,將圖像轉換為頻率域上的系數,然後計算每個系數與中位數的高低,wHash 則是使用小波轉換然後計算系數與中位數的高低。
在之前的文章內我認為總數值應該盡可能的高才符合期待,這裡可能有兩個錯誤,是我看了一篇論文 Perceptual hashing for image authentication: A survey 之後發現的。我打算用另一篇文章來做為總結討論。第一個錯誤,不同的感知雜湊方式對於不同的圖像操作,有不同的防禦(檢測)能力。第二個錯誤,每種圖像操作有更具代表性的做法,而我使用的圖片集裡面的操作不具備代表性。因此,未來我將另尋更具代表性的公開圖片集來做測試。


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

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

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