我目前正在进行物体检测。我已经获得了图像中物体的坐标。我还有图像中物体的基本事实(原始)坐标。现在我想比较一下得到的坐标与原来的坐标。所以有任何方法可以做到这一点。或者任何计算检测精度的方法......提前谢谢..
答案 0 :(得分:2)
根据您的需要,有多种方法可以实现这一目标,但在我们的例子中,我们使用修改后的Hausdorff Distance。您可以在filexchange here上找到有效的matlab代码。它相当容易使用。该函数采用2点集并返回距离。
另一种方法,更快,但不太健壮,是相似度的商,定义为两个对象中包含的2 *像素,而不是每个对象中的像素总数。
2*N(a,b) / ( N(a)+N(b) )
其中N是像素数。
用于图形比较的编辑:
我们使用fileexchange呈现函数sc。您可以轻松创建具有2个二进制图像的蒙版。您可以通过在基础事实中添加对象来创建新图像。您可以使用不同的颜色应用蒙版,因此差异将很突出。
答案 1 :(得分:1)
对象检测字段(see Pedro Felzenszwalb page)中的人通常使用边界框重叠来测量检测准确性(位置不是所有内容,因为还有一个范围)。公式是
overlap = area(bbox1 & bbox2)/area(bbox1 | bbox2)
其中&意味着交叉和|意味着工会。请注意,这不需要将两个对象(可能没有很好地定义)中的像素映射为另一个建议的答案。如果边界框的坐标系与最小 - 最大坐标对齐,则可以轻松计算边界框。对于旋转的边界框,您可以fit an ellipse并使用rotateRect类:
RotatedRect rect;
vector<Point2f> pts; // you have to fill out pts
...
rect = fitEllipse(pts);
最后,如果您需要知道某个点是否在多边形内,您可以使用pointPolygonTest。