交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,即它们的交集与并集的比值。最理想情况是完全重叠,即比值为1。一般大于0.5就算成功了。
#include <iostream> #include <cmath>//fabs,用于double等高精度求绝对值,整型使用cstdlib的abs using namespace std; double ax1;//第一个矩形左上角横坐标 double ay1;//第一个矩形左上角纵坐标 double ax2;//第一个矩形右下角横坐标 double ay2;//第一个矩形右下角纵坐标 double bx1;//第一个矩形左上角横坐标 double by1;//第二个矩形左上角纵坐标 double bx2;//第二个矩形右上角横坐标 double by2;//第二个矩形右上角横坐标 double calculateIOU(double ax1,double ay1,double ax2,double ay2,double bx1,double by1,double bx2,double by2){ double a_area=fabs((ax1-ax2)*(ay1-ay2)); double b_area=fabs((bx1-bx2)*(by1-by2)); double x1=max(ax1,bx1); double y1=min(ay1,by1); double x2=min(ax2,bx2); double y2=max(ay2,by2); double inner_area = fabs((x2-x1)*(y2-y1)); double res = inner_area/(a_area+b_area-inner_area); }