2012-07-04 6 views
0

Я использовал структуру map<CString, vector<double>>, чтобы сохранить сопоставление имени файла с его гистограммой цвета HSV. И на этой карте есть 100 элементов в качестве изображения DB.If теперь появляется изображение, и я получаю гистограмма входного изображения, как я могу сравнить?Как сравнить двухцветную гистограмму

Я знаю метод, называемый «квадратичным расстоянием», но я его не понимаю.

+0

Вы знакомы с линейной алгеброй? –

+0

Учусь в колледже, но, это 4 года назад ... @ llmo – zxi

ответ

1

Один простой метод будет использовать калькулятор расстояний, как это:

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; 
} 

А затем определить, какая гистограмма имеет наименьшее расстояние. Обратите внимание, что это только для демонстрационных целей , вы должны добавить проверки размера вектора и т. Д.

+0

Простой и полезный, у меня будет попытка ... Спасибо. Почему здесь используется sqrt func? @llmoEuro – zxi

+0

Если вы обрабатываете две гистограммы как n-мерные точки (в математическом смысле), эта функция дает их евклидову расстояние, используя обобщенную теорему Пифагора, а 'sqrt()' является ее частью. Если вам нужно найти только ту, которая находится на самом маленьком расстоянии, вам это не понадобится, потому что если 'sqrt (a)

Смежные вопросы