ハッシュアルゴリズムの画像の類似性

このブログで使用されるコードは、この記事の最後を参照してください

       二つの絵が多くのアルゴリズムがある類似性尺度は、この論文は工学分野は、最も一般的に使用される1つの画像の類似性アルゴリズム--hashアルゴリズムを言って説明します。ハッシュアルゴリズムは3、すなわち、平均ハッシュアルゴリズム(aHash)、知覚的ハッシュアルゴリズムます(pHash)と違い母Xiのアルゴリズム(dHash)があることを言って正確です。

       ハミング距離のハッシュアルゴリズムは、ハッシュ値によって取得された画像の三種類、2枚の画像をハッシュ値二つの絵が類似している測定する(この数「」テキストは、公開から見える漢明の概念)を比較しています。二つの画像、二つの絵のハッシュハミング距離の小さい数より類似しています。次の記事では3つのハッシュアルゴリズムを紹介します。

1つの平均ハッシュアルゴリズム(aHash)

1.1アルゴリズムのステップ

       平均ハッシュアルゴリズムハッシュアルゴリズムは、それが次のハッシュ値画像いくつかのステップにより得られる三大単純なものであり、これらの工程は、(1)画像スケーリングされ;(;(2)グレースケールに3)平均画素数、(4)平均指紋を計算する類似度に応じ。次のようなアルゴリズムは次のようになります。

表1 aHashはに絵ハッシュアルゴリズムの値を取得します
ステップ 具体的な内容
ズーム画像 統一された画像を入力するために、サイズが変わる画像を入力し、画像サイズを縮小します統一* 8 8は、64個のピクセルの合計を受信します。
グレースケール いくつかの入力が単一チャネルグレースケール画像、いくつかの3チャンネルのRGBカラーマップであり、いくつかは、4チャネルのRGBAカラーマップです。標準入力を統一するためにも、非単チャネルシングルチャネルグレースケール画像が変換され、次のステップです。前記RGB三チャネルのシングルチャネル・スイッチ・アルゴリズム次のカテゴリである:
1.浮動小数点演算:R&LTグレー= 0.3 G + 0.59 B + 0.11
2.方法整数:(R&LTグレー=
30 + G 59 + B 11)/ 100
3。シフト法:グレー=(R&LT 76 + G。151 * + 28 B)>> 8;
4.平均法:グレー=(R&LT + G + B)/ 3;
5.のみ緑色取る:グレー= Gと、
平均画素数 整数Gの8×8行列によって利用できる前に、この行列のすべての要素の平均値を算出し、それがいるものとします
平均ピクセル指紋を計算するために応じて ahash =「初期設定入力画面」
行i及び列jの要素G(i、j)の場合には、各画素行列Gを横切る線で右行に左> = 、 次いで+ = ahash「i行jの場合1」列要素G(i、j)は< 、 次いでahash + = "0"

       ahash画像を得られた値は、ハミング距離値を比較する二つの絵は、ハミング距離が10枚の未満の画像である画像の典型的グループをahash。

具体例としては1.2

       この絵は説明するためレナ図です。


図1レナ(原点)図。

8×8サイズに図2、図レナ

3スイッチレナ図8×8サイズのグラデーション

       前記8×8行列にレナのサイズは、データに対応します。


       コンテンツは、行列A = 121.328125のすべての要素の平均値として得られ、上述した行列要素が1組以上で、0未満の組の要素は、得ることができます。


       所以可得Lena图的aHash为

       1011111010011110100111011010100110101011101000110000111000101100

       将二进制形式ahash转十六进制hash为

       be9e9da9aba30e2c

       为了测试aHash算法的效果,我们用一张带噪声Lena(noise)图和与Lena不一样的Barbara做图片相似度对比实验,其中Lena(noise)和Barbara如下:


图4 Lena(noise)图

图5 Barbara图

       通过aHash算法容易得三个图片的hash值,然后根据hanming距离计算Lena(origin).png和Lena(noise).png Barbar.png之间汉明距离,具体如下:


图6 aHash算法图片相似度实验

       由上图可见aHash能区别相似图片和差异大的图片。

2 感知哈希算法(pHash)

2.1 算法步骤

       感知哈希算法是三种Hash算法中较为复杂的一种,它是基于DCT(离散余弦变换)来得到图片的hash值,其算法几个步骤分别是(1) 缩放图片;(2)转灰度图; (3) 计算DCT;(4)缩小DCT; (5)算平均值;(6) 计算指纹。具体算法如下所示:

表2 pHash得到图片Hash值地算法
步骤 具体内容
缩放图片 统一将图片尺寸缩放为32*32,一共得到了1024个像素点。
转灰度图 统一下一步输入标准,将非单通道图片都转为单通道灰度图。
计算DCT 计算32x32数据矩阵的离散余弦变换后对应的32x32数据矩阵
缩小DCT 取上一步得到32x32数据矩阵左上角8x8子区域
算平均值 通过上一步可得一个8x8的整数矩阵G, 计算这个矩阵中所有元素的平均值,假设其值为a
计算指纹 初始化输入图片的phash = ""
从左到右一行一行地遍历矩阵G每一个像素
如果第i行j列元素G(i,j) >= a,则phash += "1"
如果第i行j列元素G(i,j) <a, 则phash += "0"

       得到图片的phash值后,比较两张图片phash值的汉明距离,通常认为汉明距离小于10的一组图片为相似图片。

2.2 具体实例

       仍用Lena图来说明.


图7 转为灰度32x32尺寸的Lena图

图8 灰度32x32尺寸Lena图对应的DCT矩阵

       通过计算可得灰度32x32Lenna图对应的DCT矩阵左上角8x8区域子矩阵为:


       很容得到如上矩阵所有元素的均值a= 77.35, 将上述矩阵中大于或等于a的元素置为1, 小于a的元素置为0,可得:


       所以可得Lena图的pHash为

       1001100111000100010101000010010101100000001000111000001010000000

       将二进制形式phash转十六进制hash为

       99c4542560238280

       为了测试pHash算法的效果,同样用一张带噪声Lena(noise)图和与Lena不一样的Barbara做图片相似度对比实验。通过pHash算法容易得三个图片的hash值,然后根据hanming距离计算Lena(origin).png和Lena(noise).png Barbar.png之间汉明距离,具体如下:


图9 pHash算法图片相似度实验

       由上图可见pHash能区别相似图片和差异大的图片。

3 差异哈希算法(dHash)

3.1 算法步骤

       相比pHash,dHash的速度要快的多,相比aHash,dHash在效率几乎相同的情况下的效果要更好,它是基于渐变实现的。其算法几个步骤分别是(1) 缩放图片;(2)转灰度图; (3) 计算DCT;
(4)缩小DCT; (5)算平均值;(6) 计算指纹。具体算法如下所示:

表3 dHash得到图片Hash值地算法
步骤 具体内容
小图片 统一将图片尺寸缩放为9x8,一共得到了72个像素点
转灰度图 统一下一步输入标准,将非单通道图片都转为单通道灰度图。
算差异值 当前行像素值-前一行像素值, 从第二到第九行共8行,又因为矩阵有8列,所以得到一个8x8差分矩阵G
算平均值 通过上一步可得一个8x8的整数矩阵G, 计算这个矩阵中所有元素的平均值,假设其值为a
计算指纹 初始化输入图片的dhash = ""
从左到右一行一行地遍历矩阵G每一个像素
如果第i行j列元素G(i,j) >= a,则dhash += "1"
如果第i行j列元素G(i,j) <a, 则dhash += "0"

       得到图片的phash值后,比较两张图片phash值的汉明距离,通常认为汉明距离小于10的一组图片为相似图片。

3.2 具体实例

       仍用Lena图来说明.


图7 转为灰度9x8尺寸的Lena图

       通过计算可得灰度9x8Lenna图数据矩阵为:


       从第二行开始进行减去前一行操作,可得如下查分矩阵


       将上述矩阵中大于或等于0元素置为1, 小于a的元素置为0,可得:


       所以可得Lena图的dHash为

       0101100000110111111010000101001001101011101011110001010001010000

       将二进制形式dhash转十六进制hash为

       99c4542560238280

       为了测试dHash算法的效果,同样用一张带噪声Lena(noise)图和与Lena不一样的Barbara做图片相似度对比实验。通过pHash算法容易得三个图片的hash值,然后根据hanming距离计算Lena(origin).png和Lena(noise).png Barbar.png之间汉明距离,具体如下:


图9 dHash算法图片相似度实验

       由上图可见dHash能区别相似图片和差异大的图片。

总结

       关于图像相似度算法除了Hash算法,在传统算法领域中还有基于SIFT的匹配算法,基于Gist特征的匹配算法;在深度学习领域中有基于ResNet全连接的匹配算法。感兴趣的读者可以通过google来了解这些算法。

参考资料

432-Looks-Like-It
529-Kind-of-Like-That

本文代码

Github代码

おすすめ

転載: www.cnblogs.com/Kalafinaian/p/11260808.html