资源简介
哈希(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
相关资源
- 基于余数系统的sm2白盒数字签名
- chen fast dct
- 遗传算法的3种改进方法和分析
- DCT域图像数字水印算法的分析和实现
- 基于DCT变换信息隐藏图片嵌入水印课
- 采用[FFT傅立叶变换,DCT离散余弦变化
- DCT域图像数字水印算法的分析和实现
- 基于离散分数余弦变换的图像加密算
- CGridCtrl表格控件
- 密码学 hash算法实验代码及报告
- DCT图像重建
- DCT域自适应混沌加密的二值图像数字
- DCT图像压缩
- DOA估计的MUSIC算法改进
- H.264的整数DCT变换编码与量化过程
- 列表库GridCtrl,包含源码、说明和两种
- 信号DCT字典稀疏表示
- 图像编码程序,基于DCT的JPEG编码过程
- 基于DCT变换的数字水印算法
- rrt算法改进
- VC表格控件/开源/GridCtrl
- DCT数字水印嵌入与提取过程
- opencv处理图像88分块DCT变换和量化
- DCT变换编码
- 2019.4 DDCTF web题--滴 writeup
- 几种经典的Hash算法的实现(源代码)
- opencv处理图像8*8分块DCT变换和量化
- 基于DCT的信息隐藏实验
- 美国宝丽声DCT1088流量计通讯协议
- 图像压缩编码
评论
共有 条评论