相似图片搜索原理二(phash-c++实现)

本文介绍了使用C++实现基于Phash的图像相似搜索原理,包括图像缩放、灰度化、离散余弦变换(DCT)、计算均值和生成二进制码的过程。通过计算两个图像的汉明距离来判断它们的相似度,对伽马校正和颜色直方图调整具有鲁棒性。
摘要由CSDN通过智能技术生成

理论来源 http://blog.csdn.net/lu597203933/article/details/45798293

理论部分:

理论部分主要包括以下几个步骤:

<1> 图像缩放—将图像缩放到32*32大小

<2>灰度化—对32*32大小的图像进行灰度化

<3>离散余弦变换(DCT)—对32*32大小图像进行DCT

<4>计算均值—用32*32大小图片前面8*8大小图片处理并计算这64个像素的均值

<4>得到8*8图像的phash—8*8的像素值中大于均值的则用1表示,小于的用0表示,这样就得到一个64位二进制码作为该图像的phash值。

<5>计算两幅图像ahash值的汉明距离,距离越小,表明两幅图像越相似;距离越大,表明两幅图像距离越大。

这样做能够避免伽马校正或者颜色直方图调整带来的影响。

代码实现

using namespace std;
using namespace cv;

?#define phashlength 64 //去掉问好
const int size = 32;

float calc_dct_average(Mat_ img){
float sum = 0;
for (int i = 0; i < 8; i++){
for (int j = 0; j < 8; j++){
sum += img(i, j);
}
}
return sum / 64;
}
voi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值