感知哈希算法

感知哈希算法是一類哈希算法的總稱攒射,其作用在于生成每張圖像的“指紋”(fingerprint)字符串,比較不同圖像的指紋信息來判斷圖像的相似性浑度。結(jié)果越接近圖像越相似。感知哈希算法包括均值哈希(aHash)箩张、感知哈希(pHash)和dHash(差異值哈希)先慷。
aHash速度較快论熙,但精確度較低;pHash則反其道而行之脓诡,精確度較高但速度較慢祝谚;dHash兼顧二者酣衷,精確度較高且速度較快。
在得到64位hash值后穿仪,使用漢明距離量化兩張圖像的相似性啊片。漢明距離越大,圖像的相似度越小齐饮,漢明距離越小碴里,圖像的相似度越大咬腋。

漢明距離是使用在數(shù)據(jù)傳輸差錯控制編碼里面的睡互,漢明距離是一個概念,它表示兩個(相同長度)字對應(yīng)位不同的數(shù)量寇壳,我們以d(x,y)表示兩個字x,y之間的漢明距離。對兩個字符串進行異或運算泞歉,并統(tǒng)計結(jié)果為1的個數(shù)匿辩,那么這個數(shù)就是漢明距離铲球。例如:
1011101與1001001之間的漢明距離是2。
2143896與2233796之間的漢明距離是3稼病。
"toned"與"roses"之間的漢明距離是3然走。

aHash

a) 縮放圖片:為了保留圖像的結(jié)構(gòu)丰刊,降低圖像的信息量,需要去掉細(xì)節(jié)啄巧、大小和橫縱比的差異秩仆,建議把圖片統(tǒng)一縮放到8*8澄耍,共64個像素的圖片;
b) 轉(zhuǎn)化為灰度圖:把縮放后的圖片轉(zhuǎn)化為256階的灰度圖痢站;

灰度圖相關(guān)算法(R = red选酗, G = green, B = blue)
對于彩色轉(zhuǎn)灰度呜叫,其基礎(chǔ)的心理學(xué)公式為: Gray = R0.299 + G0.587 + B0.114,部分變種也很流行:
i. 浮點算法:Gray=R
0.3+G0.59+B0.11
ii. 整數(shù)方法:Gray=(R30+G59+B11)/100
iii. 移位方法:Gray =(R
76+G151+B28)>>8;
iv. 平均值法:Gray=(R+G+B)/3;
v. 僅取綠色:Gray=G盛泡;

c) 計算平均值: 計算進行灰度處理后圖片的所有像素點的平均值傲诵;
d) 比較像素灰度值:遍歷灰度圖片每一個像素箱硕,如果大于平均值記錄為1,否則為0殖熟;
e) 構(gòu)造hash值:組合64個bit位生成hash值斑响,順序隨意但前后保持一致性即可;
f) 對比指紋:計算兩幅圖片的指紋纽门,計算漢明距離营罢。

pHash

感知哈希算法可以獲得更精確的結(jié)果饲漾,它采用的是DCT(離散余弦變換)來降低頻率考传。
a) 縮小尺寸
為了簡化了DCT的計算,pHash以小圖片開始(建議圖片大于8x8勤晚,32x32)赐写。
b) 簡化色彩
與aHash相同膜赃,需要將圖片轉(zhuǎn)化成灰度圖像,進一步簡化計算量(具體算法見aHash算法步驟)。
c) 計算DCT
DCT是把圖片分解頻率聚集和梯狀形躺坟。這里以32x32的圖片為例咪橙。

DCT變換的全稱是離散余弦變換(Discrete Cosine Transform),主要用于將數(shù)據(jù)或圖像的壓縮产舞,能夠?qū)⒖沼虻男盘栟D(zhuǎn)換到頻域上易猫,具有良好的去相關(guān)性的性能准颓。DCT變換本身是無損的棺妓,但是在圖像編碼等領(lǐng)域給接下來的量化怜跑、哈弗曼編碼等創(chuàng)造了很好的條件,同時峡眶,由于DCT變換時對稱的幌陕,所以汽煮,我們可以在量化編碼后利用DCT反變換,在接收端恢復(fù)原始的圖像信息心例。對原始圖像進行離散余弦變換止后,變換后DCT系數(shù)能量主要集中在左上角译株,其余大部分系數(shù)接近于零歉糜,DCT具有適用于圖像壓縮的特性匪补。將變換后的DCT系數(shù)進行門限操作夯缺,將小于一定值得系數(shù)歸零踊兜,這就是圖像壓縮中的量化過程捏境,然后進行逆DCT運算,可以得到壓縮后的圖像曙砂。
離散余弦變換的原理:
一維DCT變換:


一維DCT變換

其中鸠澈,f(i)為原始的信號笑陈,F(xiàn)(u)是DCT變換后的系數(shù)涵妥,N為原始信號的點數(shù)蓬网,c(u)可以認(rèn)為是一個補償系數(shù)帆锋,可以使DCT變換矩陣為正交矩陣锯厢。
二維離散余弦變換的正變換公式為:


二維離散余弦變換

d) 縮小DCT
DCT的結(jié)果為32x32大小的矩陣实辑,但只需保留左上角的8x8的矩陣剪撬,這部分呈現(xiàn)了圖片中的最低頻率婿奔。
e) 計算平均值
如同均值哈希一樣萍摊,計算DCT的均值
f) 進一步減小DCT
根據(jù)8x8的DCT矩陣進行比較冰木,大于等于DCT均值的設(shè)為”1”笼恰,小于DCT均值的設(shè)為“0”踊沸。圖片的整體結(jié)構(gòu)保持不變的情況下,hash結(jié)果值不變社证。
g) 構(gòu)造hash值
組合64個bit位生成hash值逼龟,順序隨意但前后保持一致性即可。
h)對比指紋:計算兩幅圖片的指紋追葡,計算漢明距離腺律。

dHash

相比pHash,dHash的速度更快宜肉,相比aHash匀钧,dHash在效率幾乎相同的情況下的效果要更好,它是基于漸變實現(xiàn)的谬返。
a) 縮小圖片:收縮至9*8的大小之斯,它有72的像素點;
b) 轉(zhuǎn)化為灰度圖:把縮放后的圖片轉(zhuǎn)化為256階的灰度圖遣铝。(具體算法見aHash算法步驟);
c) 計算差異值:計算相鄰像素間的差異值,這樣每行9個像素之間產(chǎn)生了8個不同的差異檀何,一共8行,則產(chǎn)生了64個差異值藕甩;
d) 比較差異值:如果前一個像素的顏色強度大于第二個像素腋妙,那么差異值就設(shè)置為“1”,如果不大于第二個像素济竹,就設(shè)置“0”。
e) 構(gòu)造hash值:組合64個bit位生成hash值,順序隨意但前后保持一致性即可。
f) 對比指紋:計算兩幅圖片的指紋榆纽,計算漢明距離鸵赫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子饲帅,更是在濱河造成了極大的恐慌对途,老刑警劉巖仲锄,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門渴频,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人楼肪,你說我怎么就攤上這事暂殖〕亢幔” “怎么了悯恍?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渤滞。 經(jīng)常有香客問我,道長唠粥,這世上最難降的妖魔是什么官份? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上狠毯,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好羡蛾,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浪藻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藤乙,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天丈莺,我揣著相機與錄音,去河邊找鬼揽浙。 笑死状婶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的馅巷。 我是一名探鬼主播膛虫,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钓猬!你這毒婦竟也來了稍刀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤逗噩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叉讥,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年僧须,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片项炼。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡担平,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锭部,到底是詐尸還是另有隱情暂论,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布拌禾,位于F島的核電站取胎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏湃窍。R本人自食惡果不足惜闻蛀,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望您市。 院中可真熱鬧觉痛,春花似錦、人聲如沸茵休。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榕莺。三九已至俐芯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帽撑,已是汗流浹背泼各。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工鞍时, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亏拉,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓逆巍,卻偏偏與公主長得像及塘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锐极,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容