均值哈希算法计算图片相似度
2023-06-13 09:14:40 时间
均值哈希算法
一张图片就是一个二维信号,它包含了不同频率的成分。亮度变化小的区域是低频成分,它描述大范围的信息。而亮度变化剧烈的区域(比如物体的边缘)就是高频的成分,它描述具体的细节。或者说高频可以提供图片详细的信息,而低频可以提供一个框架。 而一张大的,详细的图片有很高的频率,而小图片缺乏图像细节,所以都是低频的。所以我们平时的下采样,也就是缩小图片的过程,实际上是损失高频信息的过程。均值哈希算法就是利用图片的低频信息。 具体步骤: (1)缩小尺寸:将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。 (2)简化色彩:将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。 (3)计算平均值:计算所有64个像素的灰度平均值 (4)比较像素的灰度:将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。 (5)计算哈希值:将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。 最后得到两张图片的指纹信息后,计算两组64位数据的汉明距离,即对比数据不同的位数,不同位数越少,表明图片的相似度越大。 分析: 均值哈希算法计算速度快,不受图片尺寸大小的影响,但是缺点就是对均值敏感,例如对图像进行伽马校正或直方图均衡就会影响均值,从而影响最终的hash值。
#均值哈希算法
def aHash(image):
#缩放为8*8
image=cv2.resize(image,(8,8),interpolation=cv2.INTER_CUBIC)
#转换为灰度图
image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
avreage = np.mean(image)
hash = []
for i in range(image.shape[0]):
for j in range(image.shape[1]):
if image[i,j] > avreage:
hash.append(1)
else:
hash.append(0)
return hash
相关文章
- 机器学习十大经典算法之AdaBoost
- AI算法实现与云平台应用
- 8个常见的机器学习算法的计算复杂度总结
- KMP算法:next和nextval值计算
- 快速傅里叶变换(FFT)算法【详解】[通俗易懂]
- 垃圾回收算法学习
- 日拱算法:双指针解快乐数,快乐就完事了~
- ☆打卡算法☆LeetCode 200. 岛屿数量 算法解析
- 从零开始设计一个共识算法——一场没有硝烟的战争
- java分页计算_java分页算法「建议收藏」
- 隐私计算-Oblivious Transfer算法理论研究与实践
- word2vec中文词向量结合PCA算法在二维空间下可视化分析-代码
- BP神经网络(反向传播算法原理、推导过程、计算步骤)
- 【计算机网络】数据链路层 : CSMA/CD 协议 ( 载波监听多点接入 / 碰撞检测 协议 | 单程端到端传播时延 | 截断二进制指数规避算法 | 计算示例 | 最小帧长问题 )★
- 【计算理论】图灵机 ( 非确定性图灵机 -> 确定性图灵机 | 模仿过程示例 | 算法的数学模型 )
- 【计算理论】计算复杂性 ( 时间复杂度时间单位 : 步数 | 算法分析 | 算法复杂性分析 )
- 2 Linux 下压缩文件的Bzip2算法(linuxbzip)
- Mysql存储过程实现的排序算法(mysql存储过程排序)
- MySQL的中位数算法,快速准确计算数据集中间的值(mysql 中位数算法)
- PHP排序算法的复习和总结
- c#汉诺塔的递归算法与解析