一种基于颜色统计和特征指纹的图片相似度计算方法

本文介绍了基于颜色统计和感知哈希的图片相似度计算方法,包括感知哈希的离散余弦变换和颜色分量统计的详细步骤,通过结合两种算法来提高相似度计算的准确性。
摘要由CSDN通过智能技术生成

一种基于颜色统计和特征指纹的图片相似度计算方法

1.摘要

图片相似度有很多实际应用,比如谷歌搜图、淘宝识物购买,现在很多类似应用已经使用神经网络训练实现,但是本文仅仅从图像处理角度出发,根据图像内容特征信息实现图片相似度计算。如题描述,我们将从颜色和内容信息两方面进行。

2.实现

本节内容将从原理、代码实现并结合应用效果介绍感知哈希算法和颜色分量统计算法

from math import sqrt
import numpy as np
import pandas as pd
import itertools

2.1.感知哈希算法

  1. 原理描述:结合离散余弦变换,将灰度图片所包含的特征生成一组指纹(哈希值),计算图片相似度即计算图片指纹的相似度。
  2. 关于离散余弦变换:灰度图是二维矩阵,由不同频率的成分组成。一般来说亮度变化小的区域是低频成分,它描述大范围的信息。而亮度变化剧烈的区域(比如物体的边缘)就是高频的成分,它描述具体的细节。由于大多数自然信号的能量都集中在余弦变换后的低频部分,可以舍弃信息含量更少的高频部分而提高计算效率,具体使用方法是离散余弦变换(DCT)。
  3. 具体步骤:
  • 简化色彩:BGR2GRAY;

  • 计算DCT:计算图片的DCT变换,得到32*32的DCT系数矩阵;

  • 缩小DCT:保留左上角的8*8的矩阵(最低频率);

  • 计算平均值:计算DCT的均值;

  • 计算hash值:根据8*8的DCT矩阵,设置0或1的64位的hash值,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。将得到的二维数组拉伸成一维,构成了一个长度为64位的向量,这就是这张图片的指纹;

  • 计算两张图片指纹,使用汉明距离计算相似度。

    结果并不能告诉我们真实性的低频率,只能粗略地告诉我们较于平均值频率的相对比例。只要图片的整体结构保持不变,hash结果值就不变。能够避免伽马校正或颜色直方图被调整带来的影响。

#均值哈希算法
def aHash(img):
    img=cv2.resize(img,(8,8),interpolation=cv2.INTER_CUBIC)
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    s=0
    hash_str=''
    for i in range
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奥特曼不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值