Image 如何比较两种颜色直方图
我使用Image 如何比较两种颜色直方图,image,compare,histogram,hsv,Image,Compare,Histogram,Hsv,我使用映射结构来存储文件名到其HSV颜色直方图的映射。此映射中有100个元素作为图像数据库。如果现在有一个图像,并且我已经获得了输入图像的直方图,我如何进行比较 我知道一种叫做“二次距离”的方法,但我不懂。一种简单的方法是使用如下距离计算器: double dist(vector<double> *histogram1, vector<double> *histogram2) { double result = 0.0; for (vector<do
映射
结构来存储文件名到其HSV颜色直方图的映射。此映射中有100个元素作为图像数据库。如果现在有一个图像,并且我已经获得了输入图像的直方图,我如何进行比较
我知道一种叫做“二次距离”的方法,但我不懂。一种简单的方法是使用如下距离计算器:
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;
}
double dist(向量*historogram1,向量*historogram2){
双结果=0.0;
对于(vector::iterator val1=historogram1->begin(),val2=historogram2->begin();
val1end();
val1++,val2++){
结果+=(*val1-*val2)*(*val1-*val2);
}
结果=sqrt(结果);
返回结果;
}
然后确定哪个直方图的距离最小。请注意,这是为您准备的
仅用于演示目的,您必须添加向量大小检查等。您熟悉线性代数吗?在大学里学过,但已经四年了…@llmoSimple and full,我将尝试一下…谢谢。为什么这里使用sqrt func?@llmoeuro如果您将两个直方图视为n维点(在数学意义上),此函数使用广义毕达哥拉斯定理给出它们的欧氏距离,
sqrt()
是其中的一部分。如果你只需要找到距离最小的一个,你不需要它,因为如果sqrt(a)
那么a
。