[點(diǎn)晴永久免費(fèi)OA]利用js實(shí)現(xiàn)圖片相似度算法
一、平均哈希算法第一步: 縮小尺寸為8×8,以去除圖片的細(xì)節(jié),只保留結(jié)構(gòu)、明暗等基本信息,摒棄不同尺寸、比例帶來(lái)的圖片差異。 第二步: 簡(jiǎn)化色彩。將縮小后的圖片轉(zhuǎn)為灰度圖像 (取每個(gè)像素rgb三色的平均值,[228, 233, 253, 255]-> [238, 238, 238, 255] )。 第三步: 計(jì)算平均值。計(jì)算所有像素的灰度平均值。(根據(jù)每個(gè)像素平均后的值, 計(jì)算整張圖片的平均顏色值) 第四步: 比較像素的灰度。將64個(gè)像素的灰度,與平均值進(jìn)行比較。大于或等于平均值,記為1;小于平均值,記為 0。 第五步: 計(jì)算哈希值。將上一步的比較結(jié)果,組合在一起,就構(gòu)成了一個(gè)64位的整數(shù),這就是這張圖片的指紋。 第六步: 計(jì)算指紋的相似度,得出兩張圖片是否相似 。 ![]() ![]() 二、顏色分布法借用一篇文章的解釋?zhuān)?/p> 1、 每張圖片都可以生成顏色分布的直方圖、如果兩張圖的直方圖很接近,就可以認(rèn)為他們相似 2、 任何一種顏色都是由紅綠藍(lán)三原色組成的、我們平時(shí)用的每種原色有256個(gè)色值,整個(gè)顏色空間有1600萬(wàn)種顏色(256的三次方) 3、 如果用1600萬(wàn)種顏色去比較直方圖、計(jì)算量太大了、因此需要采用簡(jiǎn)化方法,可以將0~256分城4個(gè)區(qū)、 0-63為0區(qū),64-127為1區(qū),128-191為2區(qū),192-256為3區(qū); 也就以為這簡(jiǎn)化后的圖片總共會(huì)有64種顏色(4的3次方)、 4、統(tǒng)計(jì)64種顏色組合包含的像素?cái)?shù)量 5、我們這里想展示每一步操作后的圖片變化,取 0,1,2,3的話整張圖片都是黑色、所以 0-63取的是32,64-127 取 96,128-191取 160, 192-256取 224; 6、因?yàn)轭伾慕M合都是固定的,所以把表格中的最后一欄(像素?cái)?shù)量)提出來(lái),組成一個(gè)64維向量, 便是這張圖片的 “指紋”, 尋找相似的圖片就是尋找相似的“指紋” ![]() ![]() 三、內(nèi)容特征法”內(nèi)容特征法“是指把圖片轉(zhuǎn)化為灰度圖后再轉(zhuǎn)化為”二值圖“,然后根據(jù)像素的取值(黑或白)形成指紋后進(jìn)行比對(duì)的方法。這種算法的核心是找到一個(gè)“閾值”去生成二值圖。 1、首先,將原圖轉(zhuǎn)化成一張灰度圖片 、(可以壓縮可不壓縮、 最好是壓縮成固定大小:可以相似圖片因?yàn)閳D片大小不一樣帶來(lái)的差異, 減少一定的計(jì)算,減小最終指紋的長(zhǎng)度) 2、確定一個(gè)閾值,將灰度圖片轉(zhuǎn)化為黑白圖片 ![]() ![]() 具體代碼實(shí)現(xiàn)請(qǐng)查看原文 該文章在 2023/8/28 9:35:58 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |