我使用map<CString, vector<double>>
结构来存储文件名与其HSV颜色直方图的映射。并且此地图中有 100 个元素作为图像 DB。如果现在出现一个图像,并且我已经获得了输入图像的直方图,我该如何进行比较?
我知道一种叫做"二次距离"的方法,但我不明白。
一种简单的方法是使用这样的距离计算器:
double dist(vector<double> *histogram1, vector<double> *histogram2) {
double result = 0.0;
for (vector<double>::iterator val1=histogram1->begin(), val2=histogram2->begin();
val1<histogram1->end();
val1++, val2++) {
result += (*val1 - *val2) * (*val1 - *val2);
}
result = sqrt(result);
return result;
}
然后确定哪个直方图的距离最小。请注意,这是为了仅出于演示目的,您必须添加矢量大小检查等。