Android- HOG 描述符距离
Android- HOG descriptors distance
我想使用 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)));
}
}
我发现你的代码有两个问题:
- 欧氏距离的公式不正确
- 您在每次迭代时转换为 int。这不是一个好主意,因为描述符的值是浮点数且小于 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]);
}
}
我想使用 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)));
}
}
我发现你的代码有两个问题:
- 欧氏距离的公式不正确
- 您在每次迭代时转换为 int。这不是一个好主意,因为描述符的值是浮点数且小于 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]);
}
}