相似图片搜索的两种哈希算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(4)缩小DCT (5)计算平均值:如同均值哈希一样,计算DCT的均值。
(6)计算hash值:这是最主要的一步,根据8*8的DCT矩阵,设置0或1的64位 的hash值,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。组合 在一起,就构成了一个64位的整数,这就是这张图片的指纹。
少位不用来确定图片的相似度。在理论上,这一步等同于计算汉明 距离(Hamming Distance)。如果不相同的数据位不超过5,就说明 两幅图片很相似;如果不相同的数据位超过10,就说明两幅图片完 全不同。
均值哈希算法的优缺点
• 均值哈希算法的优点是简单快速,不受图片大小缩放的影响,缺点
是受均值的影响非常大。如果对图片进行伽马校正或直方图均衡, 就会影响到均值,从而影响最终的识别效果。
DCT应用
• 离散余弦变换具有很强的"能量集中"特性:大多数的自然信号(包
括声音和图像)的能量都集中在离散余弦变换后的低频部分
• 它将图像从像素域变换到频率域。然后一般图像都存在很多冗余和
相关性的,所以转换到频率域之后,只有很少的一部分频率分量的 系数才不为0,大部分系数都为0(或者说接近于0)。
相似图片搜索的两种哈希 算法
相似图片搜索的两种哈希算法
• 均值哈斯算法(Average hash algorithm) • 感知哈希算法(Perceptual hash algorithm)
均值哈希算法
• 均值哈希算法主要是利用图片的低频信息来进行相似度的识别。 • 均值哈希算法的主要原理 • 是对每幅图片生成一个“指纹”(fingerprint)字符串,然后通过
•
• •
像素域——频率域
DCT——低频 DCT:数据压缩(冗余)
两种哈希算法的不同
• 总体来说均值哈希算法是一个较为笼统的算法,其计算不是特别精
确,而感知哈希算法能够更加精确的对图片进行计算,处理。
• 在具体的方法上,均值哈希算法是利用每个像素的灰度值和平均灰
度值进行比较得出一组数字,然后利用这组数字来进行不同图片间 的比较。而感知哈希算法是先利用DCT算法对每个像素点的灰度值 进行计算处理后,再计算平均值进行不同图像间的比较。
DCT定义
•
DCT过程演示
原图像素矩阵S:
DCT过程演示
DCT变换后C:
DCT过程演示
量化:(用C元素和 W元素对应相除再取整) 量化矩阵W是经过大量
测试后认为量化后不
会带来明显的误差的。
DCT过程演示
量化结果:
DCT过程演示
pHash过程
(1)缩小尺寸 (2)简化色彩:灰度。
(3)计算DCT
值与平均值进行比较。大于或等于平均值,记为1;小于平均值, 记为0。
均值哈希算法的步骤
5. 计算哈希值:将上一步的比较结果组合在一起,就构成了一个64位
的整数,这就是这幅图片的指纹。组合的次序并不重要,只要保证 所有的图片都采用相同的次序即可。
均值哈希算法的步骤
6. 对比图片指纹:得到图片指纹后,就可以通过查看64位指纹中有多
• 均值哈希算法不够精确,更适合搜索缩略图,为了获得更精确的结
果我们往往会采用更强大的感知哈希算法。
感知哈希算法
• 在实际应用中,一般采用更强大的感知哈希算法,它能够识别图片
的变形。只要变形程度不超过25%,它就可以匹配原图,它采用的是 DCT(离散余弦变换)来降低频率。感知哈希算法虽然更复杂,但 是基本原理与平均哈希算法基本一致。都是先将图片转化为哈希字 符串,然后再进行比较。
均值哈希算法的步骤
2. 简化图片色彩:将8*8的小图片转换为灰度图像
Gray = R * 0.299 + G * 0.587 + B * 0.114
均值哈希算法的步骤
3. 计算平均值:计算经过灰度处理后的所有64个像素的灰度平均值。
均值哈希算法的步骤
4. 比较像素的灰度:遍历灰度图的每一个像素,将每一个像素的灰度
比较不同图片的指纹来确定图片的相似性,比较结果越接近则说 明图片越相似;反之,比较结果差异越大,则说明图片越不相似。
图片的低频信息和高频信息
均值哈希算法的步骤
1. 缩小图片尺寸:去除高频和细节的最快方法就是缩小图片,将图片
缩小到8*8的尺寸,即总共64个像素。不需要保持纵横比,只需将 其变为8*8的正方形。这样就可以比较任意大小的图片。这一步的 作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同 尺寸和不同比例带来的图片差异。
离散余弦变换 (DCT for Discrete Cosine Transform)
• 是与傅里叶变换相关的一种变换,类似于离散傅里叶变换,但是只
使用实数。
• 离散余弦变换,经常被信号处理和图像处理使用,用于对信号和图
像(包括静止图像和运动图像)进行有损数据压缩。
感知哈希算法步骤(补充)
•
DCT系数包含一个DC系数和多个AC系数。 以8*8DCT为例,DCT系数矩阵第一个数是DC系数,其他63个数的是AC系数。
感知哈希算法步骤
1. 缩小图片尺寸:32*32是一个较好的大小,这样方便DCT的计算 2. 转化为灰度图:把缩放后的图片转化为256阶的灰度图。(具体算法见平均哈希
算法步骤)
3. 计算DCT:DCT把图片分离成分率的集合 4. 缩小DCT:DCT是32*32,保留左上角的8*8,这些代表的图片的最低频率。
DCT示例
• 如下图所示,亮度变化小的区域是低频成分,它描述大范围的信息。
而亮度变化剧烈的区域(比如物体的边缘)就是高频的成分,它描述 具体的细节。或者说高频可以提供图片详细的信息,而低频可以提供 一个框架。
DCT示例
• 右图的右图是对Lena图进行
离散余弦变换(DCT)得到 的系数矩阵图。从左上角依 次到右下角,频率越来越低, 换句话说,图像的能量几乎 都集中在左上角这个地方的 低频系数上面了。
感知哈希算法步骤
5. 计算平均值:计算缩小DCT后的所有像素点的平均值 6. 进一步减小DCT:大于平均值记录为1,反之记录为0.
7. 得到信息指纹:组合64个信息位,顺序随意保持一致性即可
8. 对比指纹:计算两幅图片的指纹,计算汉明距离,汉明距离越大则说明图片越不
一致,反之,汉明距离越小则说明图片越相似,当距离为0时,说明两幅图片完 全相同。
(6)计算hash值:这是最主要的一步,根据8*8的DCT矩阵,设置0或1的64位 的hash值,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。组合 在一起,就构成了一个64位的整数,这就是这张图片的指纹。
少位不用来确定图片的相似度。在理论上,这一步等同于计算汉明 距离(Hamming Distance)。如果不相同的数据位不超过5,就说明 两幅图片很相似;如果不相同的数据位超过10,就说明两幅图片完 全不同。
均值哈希算法的优缺点
• 均值哈希算法的优点是简单快速,不受图片大小缩放的影响,缺点
是受均值的影响非常大。如果对图片进行伽马校正或直方图均衡, 就会影响到均值,从而影响最终的识别效果。
DCT应用
• 离散余弦变换具有很强的"能量集中"特性:大多数的自然信号(包
括声音和图像)的能量都集中在离散余弦变换后的低频部分
• 它将图像从像素域变换到频率域。然后一般图像都存在很多冗余和
相关性的,所以转换到频率域之后,只有很少的一部分频率分量的 系数才不为0,大部分系数都为0(或者说接近于0)。
相似图片搜索的两种哈希 算法
相似图片搜索的两种哈希算法
• 均值哈斯算法(Average hash algorithm) • 感知哈希算法(Perceptual hash algorithm)
均值哈希算法
• 均值哈希算法主要是利用图片的低频信息来进行相似度的识别。 • 均值哈希算法的主要原理 • 是对每幅图片生成一个“指纹”(fingerprint)字符串,然后通过
•
• •
像素域——频率域
DCT——低频 DCT:数据压缩(冗余)
两种哈希算法的不同
• 总体来说均值哈希算法是一个较为笼统的算法,其计算不是特别精
确,而感知哈希算法能够更加精确的对图片进行计算,处理。
• 在具体的方法上,均值哈希算法是利用每个像素的灰度值和平均灰
度值进行比较得出一组数字,然后利用这组数字来进行不同图片间 的比较。而感知哈希算法是先利用DCT算法对每个像素点的灰度值 进行计算处理后,再计算平均值进行不同图像间的比较。
DCT定义
•
DCT过程演示
原图像素矩阵S:
DCT过程演示
DCT变换后C:
DCT过程演示
量化:(用C元素和 W元素对应相除再取整) 量化矩阵W是经过大量
测试后认为量化后不
会带来明显的误差的。
DCT过程演示
量化结果:
DCT过程演示
pHash过程
(1)缩小尺寸 (2)简化色彩:灰度。
(3)计算DCT
值与平均值进行比较。大于或等于平均值,记为1;小于平均值, 记为0。
均值哈希算法的步骤
5. 计算哈希值:将上一步的比较结果组合在一起,就构成了一个64位
的整数,这就是这幅图片的指纹。组合的次序并不重要,只要保证 所有的图片都采用相同的次序即可。
均值哈希算法的步骤
6. 对比图片指纹:得到图片指纹后,就可以通过查看64位指纹中有多
• 均值哈希算法不够精确,更适合搜索缩略图,为了获得更精确的结
果我们往往会采用更强大的感知哈希算法。
感知哈希算法
• 在实际应用中,一般采用更强大的感知哈希算法,它能够识别图片
的变形。只要变形程度不超过25%,它就可以匹配原图,它采用的是 DCT(离散余弦变换)来降低频率。感知哈希算法虽然更复杂,但 是基本原理与平均哈希算法基本一致。都是先将图片转化为哈希字 符串,然后再进行比较。
均值哈希算法的步骤
2. 简化图片色彩:将8*8的小图片转换为灰度图像
Gray = R * 0.299 + G * 0.587 + B * 0.114
均值哈希算法的步骤
3. 计算平均值:计算经过灰度处理后的所有64个像素的灰度平均值。
均值哈希算法的步骤
4. 比较像素的灰度:遍历灰度图的每一个像素,将每一个像素的灰度
比较不同图片的指纹来确定图片的相似性,比较结果越接近则说 明图片越相似;反之,比较结果差异越大,则说明图片越不相似。
图片的低频信息和高频信息
均值哈希算法的步骤
1. 缩小图片尺寸:去除高频和细节的最快方法就是缩小图片,将图片
缩小到8*8的尺寸,即总共64个像素。不需要保持纵横比,只需将 其变为8*8的正方形。这样就可以比较任意大小的图片。这一步的 作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同 尺寸和不同比例带来的图片差异。
离散余弦变换 (DCT for Discrete Cosine Transform)
• 是与傅里叶变换相关的一种变换,类似于离散傅里叶变换,但是只
使用实数。
• 离散余弦变换,经常被信号处理和图像处理使用,用于对信号和图
像(包括静止图像和运动图像)进行有损数据压缩。
感知哈希算法步骤(补充)
•
DCT系数包含一个DC系数和多个AC系数。 以8*8DCT为例,DCT系数矩阵第一个数是DC系数,其他63个数的是AC系数。
感知哈希算法步骤
1. 缩小图片尺寸:32*32是一个较好的大小,这样方便DCT的计算 2. 转化为灰度图:把缩放后的图片转化为256阶的灰度图。(具体算法见平均哈希
算法步骤)
3. 计算DCT:DCT把图片分离成分率的集合 4. 缩小DCT:DCT是32*32,保留左上角的8*8,这些代表的图片的最低频率。
DCT示例
• 如下图所示,亮度变化小的区域是低频成分,它描述大范围的信息。
而亮度变化剧烈的区域(比如物体的边缘)就是高频的成分,它描述 具体的细节。或者说高频可以提供图片详细的信息,而低频可以提供 一个框架。
DCT示例
• 右图的右图是对Lena图进行
离散余弦变换(DCT)得到 的系数矩阵图。从左上角依 次到右下角,频率越来越低, 换句话说,图像的能量几乎 都集中在左上角这个地方的 低频系数上面了。
感知哈希算法步骤
5. 计算平均值:计算缩小DCT后的所有像素点的平均值 6. 进一步减小DCT:大于平均值记录为1,反之记录为0.
7. 得到信息指纹:组合64个信息位,顺序随意保持一致性即可
8. 对比指纹:计算两幅图片的指纹,计算汉明距离,汉明距离越大则说明图片越不
一致,反之,汉明距离越小则说明图片越相似,当距离为0时,说明两幅图片完 全相同。