gpt4 book ai didi

objective-c - 与图像或 key 数据库进行图像比较

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:39 24 4
gpt4 key购买 nike

我今天大部分时间都在尝试寻找某种函数来为已知图像生成 key ,以便稍后进行比较以确定图像是什么。我曾尝试使用 SIFT 和 SURF 描述符,它们都太慢(并且已获得商业用途专利)。我最近的尝试是使用以下方法创建 dct 哈希:

   int mm_dct_imagehash(const char* file, float sigma, uint64_t *hash){

if (!file) return -1;
if (!hash) return -2;

*hash = 0;

IplImage *img = cvLoadImage(file, CV_LOAD_IMAGE_GRAYSCALE);
if (!img) return -3;

cvSmooth(img, img, CV_GAUSSIAN, 7, 7, sigma, sigma);

IplImage *img_resized = cvCreateImage(cvSize(32,32), img->depth, img->nChannels);
if (!img_resized) return -4;

cvResize(img, img_resized, CV_INTER_CUBIC);

IplImage *img_prime = cvCreateImage(cvSize(32,32), IPL_DEPTH_32F, img->nChannels);
if (!img_prime) return -5;


cvConvertScale(img_resized, img_prime,1, 0);

IplImage *dct_img = cvCreateImage(cvSize(32,32), IPL_DEPTH_32F, img->nChannels);
if (!dct_img) return -6;

cvDCT(img_prime, dct_img, CV_DXT_FORWARD);

cvSetImageROI(dct_img, cvRect(1,1,8,8));

double minval, maxval;
cvMinMaxLoc(dct_img, &minval, &maxval, NULL, NULL, NULL);

double medval = (maxval + minval)/2;

int i,j;
for (i=1;i<=8;i++){
const float *row = (const float*)(dct_img->imageData + i*dct_img->widthStep);
for (j=1;j<=8;j++){
if (row[j] > medval){
(*hash) |= 1;
}
(*hash) <<= 1;
}
}

cvReleaseImage(&img);
cvReleaseImage(&img_resized);
cvReleaseImage(&img_prime);
cvReleaseImage(&dct_img);

return 0;
}

这确实生成了我正在寻找的类型的东西,但是当我尝试将它与已知哈希的数据库进行比较时,我得到的误报和肯定的一样多。因此,我又回来了,我想我可以请教专家。

你们中的任何人都知道/有一个功能可以为提供的图像提供某种标识符/校验和,这些标识符/校验和在相似图像中保持相似,因此可以用于通过与数据库进行比较来快速识别图像?简而言之,图像最匹配哪一类校验和?

我不是在寻找理论、概念、论文或想法,而是在寻找实际可行的解决方案。我不会再花一天时间在死胡同里挖掘,感谢任何花时间编写代码的人。


通过更多研究,我知道 autoit 开发人员将 pixelchecksum 设计为使用“Adler-32”算法。我想下一步是找到一个 c 实现并让它处理像素数据。欢迎提出任何建议!

最佳答案

谷歌搜索“microsoft image hashing”时,我知道关于该主题的两篇最佳论文接近顶部。两者都提供实用的解决方案。

关于objective-c - 与图像或 key 数据库进行图像比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com