大发pk10_pk10下载_大发pk10下载 - 由大发pk10,pk10下载,大发pk10下载社主办的《大发pk10,pk10下载,大发pk10下载》是我国消费领域中一张全国性、全方位、大容量的综合性日报。其立足消费网投领域,依托轻工行业,面向城乡市场,最先发布相关的专业权威资讯。

图像相似度中的Hash算法

  • 时间:
  • 浏览:2

本博客中使用的代码见本文末尾

       度量两张图片的类似度有什儿 算法,本文讲介绍工程领域中最常用的图片类似度算法之一——Hash算法。Hash算法准确的说有一种,分别为平均哈希算法(aHash)、感知哈希算法你(pHash)和差异哈哈希算法(dHash)。

       一种Hash算法后会通过获取图片的hash值,再比较两张图片hash值的汉明距离(韩明距离的概念可见本公众号《》一文)来度量两张图片是是否是类似。两张图片越类似,没办法 两张图片的hash数的汉明距离越小。下面本文将分别介绍什儿 种Hash算法。

1.1 算法步骤

       平均哈希算法是一种Hash算法中最简单的一种,它通过下面几条步骤来获得图片的Hash值,这几条步骤分别是(1) 缩放图片;(2)转灰度图; (3) 算像素均值;(4)根据类似均值计算指纹。具体算法如下所示:

表1 aHash得到图片Hash值地算法
缩放图片 输入图片大小尺寸各异,为了统一图片的输入,统一将图片尺寸缩放为8*8,一共得到了6好几条 像素点。
转灰度图 输入图片什儿 为单通道灰度图,什儿 RGB三通道彩色图,什儿 为RGBA四通道彩色图。也为了统一下一步输入标准,将非单通道图片都转为单通道灰度图。 其中RGB三通道转单通道算法有下面几种:

1.浮点算法:Gray=R0.3+G0.59+B0.11

2.整数方式:Gray=(R
100+G59+B11)/100

3.移位方式:Gray =(R76+G151+B*28)>>8;

4.平均值法:Gray=(R+G+B)/3;

5.仅取绿色:Gray=G;
算像素均值 通过上一步可得好几条 8x8的整数矩阵G,计算什儿 矩阵中所有元素的平均值,假设其值为a
据像素均值计算指纹 初始化输入图片的ahash = ""

从左到右一行一行地遍历矩阵G每好几条 像素怎么让 第i行j列元素G(i,j) >= a,则ahash += "1"怎么让 第i行j列元素G(i,j) <a, 则ahash += "0"

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

1.2 具体实例

       本文图片为Lena图来说明.



图1 Lena(Origin)图


图2 转为8x8尺寸的Lena图


图3 转为灰度8x8尺寸的Lena图

       其中转为8x8尺寸的Lena对应的数据矩阵为:



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



       什么都有可得Lena图的aHash为

       1011111010011110100111011010100110101011101001100011100101100

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

       be9e9da9aba100e2c

       为了测试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.1 算法步骤

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

表2 pHash得到图片Hash值地算法
缩放图片 统一将图片尺寸缩放为32*32,一共得到了102好几条 像素点。
转灰度图 统一下一步输入标准,将非单通道图片都转为单通道灰度图。
计算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为

       100110011100100101010001001010110000001001110000101000000

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

       99c454251002382100

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



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

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

3.1 算法步骤

       相比pHash,dHash的传输带宽要快的多,相比aHash,dHash在传输带宽几乎相同的清况 下的效果要更好,它是基于渐变实现的。其算法几条步骤分别是(1) 缩放图片;(2)转灰度图; (3) 计算DCT;

(4)缩小DCT; (5)算平均值;(6) 计算指纹。具体算法如下所示:

表3 dHash得到图片Hash值地算法
小图片 统一将图片尺寸缩放为9x8,一共得到了7好几条 像素点
转灰度图 统一下一步输入标准,将非单通道图片都转为单通道灰度图。
算差异值 当前行像素值-前一行像素值, 从第二到第九行共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为

       01011000011011111101000101001001101011101011110010100101000

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

       99c454251002382100

       为了测试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代码