Android-HOG描述符距离

时间:2015-11-17 16:30:37

标签: java android opencv descriptor

我想在使用OpenCV的Android应用程序中比较2个HOG描述符。我发现计算两个向量之间的欧几里德距离有困难,它们的类型是MatOfFloat。你有一个可以帮助我的代码示例。

计算HOG描述符的函数是mHOGDescriptor.compute(imgMat,descriptors,winStride,padding,locations);这个函数的输出是他的类型是MatOfFloat的描述符。一旦我找到了2张图像的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)));
    }
}

1 个答案:

答案 0 :(得分:1)

我发现您的代码有两个问题:

  1. 这不是欧氏距离的正确公式
  2. 在每次迭代时转换为int。这不是一个好主意,因为描述符的值是浮点数并且小于1(它由标准化直方图组成),因此您将距离舍入为零。
  3. 请尝试以下代码:

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