概述
今天自己写了一个简单的计算图相似度的算法,借鉴了哈希算法思想进行编写,在此分享给大家!
总体思路 :
(借鉴了相似图像搜素的关键技术——哈希算法)将每一张图片人为转换具有0或1规律表达的图像,即将图像按照某个阈值生成对应的指纹字符串。我们最终是通过比较不同图片转后对应位置的指纹字符串,其结果越是趋向于1越相似。
主要实现的步骤如下:
Step 1. 输入图像
Step 2. 进行灰度化 (如果是需要更高精度的图像相似度计算,可以考虑利用原始图)
Step 3. 将输入的图像进行归一化到指定尺寸 例如9*9
Step 4. 等比降低灰度值 (grayValue/N 其中N是正整数,也可以省略)
Step 5. 计算图像平均灰度值average
Step 6. 生成指纹图,将归一化的图像每个位置Img(i,j)与平均灰度值average进行比较,若 Img(I,j)> average,则Img(i,j)=1,否则Img(I,j)=0;
Step 7. 按照一定排列顺序进行两幅图像比较,获得相似度similarity
我设定初始值similarity = 1。
接下来直接上代码:
//第一个函数:计算图片的指纹信息
string CalImgHashValue(IplImage* src)
{
int N = 5; //简化常数,人为设定
int graySum;
string resStr(81,'