2015-11-17 5 views
1

Я хочу сравнить два дескриптора HOG в приложении Android с использованием OpenCV. Я нахожу трудности в вычислении евклидова расстояния между двумя векторами, их типом является MatOfFloat. У вас есть пример кода, который может мне помочь.Android-дескрипторы HOG

Фраза, которая вычисляет дескрипторы HOG, представляет собой mHOGDescriptor.compute (imgMat, дескрипторы, winStride, дополнения, местоположения); вывод этого функционала - дескрипторы, что его тип - MatOfFloat. Как только я нахожу дескрипторы HOG для двух изображений, я хочу вычислить эвклидовое расстояние между ним и здесь, где я нахожу проблему.

я попробовать этот код, но это не работает:

for(int i=0; i<imgMat.rows();i++) 
{ 
    for(int j=0; j<imgMat.cols();j++) 
    { 
     distance1=(int) (distance1+(mDescriptors1.get(i, j)-mDescriptors2.get(i, j))); 
    } 
} 
+0

ЦВ :: Функция HogDescriptor :: вычислить возвращает вектор . Это то, что вы хотите? Если нет, добавьте дополнительную информацию о том, что вы пытаетесь сделать, и код, который вы используете. –

+0

Здравствуйте, спасибо за ваш ответ. На самом деле, я собираюсь развиваться на Java, и поэтому функция, которая вычисляет дескрипторы HOG, - mHOGDescriptor.compute (imgMat, дескрипторы, winStride, дополнения, местоположения); выход, если эта функция является дескрипторами, что его тип MatOfFloat. Когда я нахожу дескрипторы HOG для двух изображений, я хочу вычислить эвклидовое расстояние между ним и здесь, где я нахожу проблему. –

+0

Я пробую этот код, но это не работает: for (int i = 0; i

ответ

1

Я вижу две проблемы с кодом:

  1. Это не правильная формула для евклидова расстояния
  2. Вы конвертировать на int на каждой итерации. Это не очень хорошая идея, потому что значения дескриптора являются float и меньше 1 (они состоят из нормализованных гистограмм), поэтому вы округлите свое расстояние до нуля.

Попробуйте следующий код:

distance=0; 
for(int i=0; i<imgMat.rows();i++) 
{ 
    for(int j=0; j<imgMat.cols();j++) 
    { 
     distance+=(mDescriptors1.get(i, j)[0]-mDescriptors2.get(i, j)[0])*(mDescriptors1.get(i, j)[0]-mDescriptors2.get(i, j)[0]); 
    } 
} 
+0

Это тоже не работает. Тип mDescriptors1.get (i, j) равен double [], поэтому вычитание не допускается. –

+0

Я отредактировал мой ответ, дайте мне знать, если он работает сейчас –

+0

да, что работает !! спасибо :) –

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