资源简介

哈希(hashing)是一种代表性方法,通常目标是将样本表示成一串固定长度的二值编码(通常使用0/1或-1/+1表示其中的每个bit),使得相似的样本具有相似的二值码(使用Hamming距离度量二值码之间的相似性)。 (1) 设计并实现一种Hash算法 (2) 实现本地图像检索软件 (3) 选用标准图像库,对每一幅输入模板图像,检索列出最接近10幅图像 1.缩小图片:32 * 32是一个较好的大小,这样方便DCT计算 2.转化为灰度图:把缩放后的图片转化为256阶的灰度图。(具体算法见平均哈希算法步骤) 3.计算DCT:DCT把图片分离成分率的集合 4.缩小DCT:DCT是32*32,保留左上角的8*8,这些代表的图片的最低频率 5.计算平均值:计算缩小DCT后的所有像素点的平均值。 6.进一步减小DCT:大于平均值记录为1,反之记录为0. 7.得到信息指纹:组合64个信息位,顺序随意保持一致性即可。 8.对比指纹:计算两幅图片的指纹,计算汉明距离(从一个指纹到另一个指纹需要变几次),汉明距离越大则说明图片越不一致,反之,汉明距离越小则说明图片越相似,当距离为0时,说明完全相同。(通常认为距离>10 就是两张完全不同的图片)

资源截图

代码片段和文件信息

#include “stdafx.h“
#include “hash.h“
string pHashValue(Mat &src)
{
Mat img dst;
string rst(64 ‘\0‘);
double dIdex[64];
double mean = 0.0;
int k = 0;
if (src.channels() == 3)
{
cvtColor(src src CV_BGR2GRAY);
img = Mat_(src);
}
else
{
img = Mat_(src);
}
/* 第一步,缩放尺寸*/
resize(img img Size(8 8));

/* 第二步,离散余弦变换,DCT系数求取*/
dct(img dst);

/* 第三步,求取DCT系数均值(左上角8*8区块的DCT系数)*/
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 8; ++j)
{
dIdex[k] = dst.at(i j);
mean += dst.at(i j) / 64;
++k;
}
}
/* 第四步,计算哈希值。*/
for (int i = 0; i<64; ++i)
{
if (dIdex[i] >= mean)
{
rst[i] = ‘1‘;
}
else
{
rst[i] = ‘0‘;
}
}
return rst;
}

int HanmingDistance(string &str1 string &str2)
{
if ((str1.size() != 64) || (str2.size() != 64))
return -1;
int difference = 0;
for (int i = 0; i<64; i++)
{
if (str1[i] != str2[i])
difference++;
}
return difference;
}

/*计算汉明距离*/
int ahashhammingDistance(const bitset &query const bitset &target){
int distance = 0;
for (int i = 0; i < hashLength; i++){
distance += (query[i] == target[i] ? 0 : 1);
}
return distance;
}

// 计算8*8图像的平均灰度  
float ahashcalcAverage(Mat_ image const int &size){
float sum = 0;
for (int i = 0; i < size; i++){
for (int j = 0; j < size; j++){
sum += image(i j);
}
}
return sum / (size*size);
}

/* 计算hash值
image:8*8的灰度图像
size: 图像大小  8*8
ahahs:存放64位hash值
averagePix: 灰度值的平均值
*/
void ahashfingerPrint(Mat_ image const int &size bitset &ahash const float &averagePix){
for (int i = 0; i < size; i++){
int pos = i * size;
for (int j = 0; j < size; j++){
ahash[pos + j] = image(i j) >= averagePix ? 1 : 0;
}
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-10-10 17:02  基于hash的图像检索软件\
     目录           0  2018-10-10 17:01  基于hash的图像检索软件\源码\
     目录           0  2018-04-22 14:44  基于hash的图像检索软件\源码\pHash\
     目录           0  2018-10-10 17:01  基于hash的图像检索软件\源码\pHash\pHash\
     文件        3998  2018-04-20 20:22  基于hash的图像检索软件\源码\pHash\pHash\ReadMe.txt
     文件        1934  2018-04-22 09:56  基于hash的图像检索软件\源码\pHash\pHash\hash.cpp
     文件         712  2018-04-22 09:56  基于hash的图像检索软件\源码\pHash\pHash\hash.h
     文件        2361  2018-04-20 20:22  基于hash的图像检索软件\源码\pHash\pHash\pHash.cpp
     文件         437  2018-04-20 20:22  基于hash的图像检索软件\源码\pHash\pHash\pHash.h
     文件       12058  2018-04-21 15:21  基于hash的图像检索软件\源码\pHash\pHash\pHash.vcxproj
     文件       10586  2018-04-22 10:53  基于hash的图像检索软件\源码\pHash\pHash\pHashDlg.cpp
     目录           0  2018-04-22 14:44  基于hash的图像检索软件\源码\pHash\pHash\res\
     文件       67777  2013-07-22 01:18  基于hash的图像检索软件\源码\pHash\pHash\res\pHash.ico
     文件         666  2018-04-20 20:22  基于hash的图像检索软件\源码\pHash\pHash\res\pHash.rc2
     文件         138  2018-04-20 20:22  基于hash的图像检索软件\源码\pHash\pHash\stdafx.cpp
     文件        1578  2018-04-20 20:22  基于hash的图像检索软件\源码\pHash\pHash\stdafx.h
     文件         234  2018-04-20 20:22  基于hash的图像检索软件\源码\pHash\pHash\targetver.h
     文件   100597760  2018-04-22 14:44  基于hash的图像检索软件\源码\pHash\pHash.sdf
     文件        1315  2018-04-21 14:13  基于hash的图像检索软件\源码\pHash\pHash.sln
     文件       31232  2018-04-22 14:44  基于hash的图像检索软件\源码\pHash\pHash.v12.suo
     目录           0  2018-10-10 16:49  基于hash的图像检索软件\演示\
     文件       75073  2018-04-21 22:08  基于hash的图像检索软件\演示\QQ图片20180422122413.jpg
     文件       16801  2018-04-19 21:25  基于hash的图像检索软件\要求.docx
     文件          64  2018-10-10 13:39  基于hash的图像检索软件\说明.txt

评论

共有 条评论