给出两个举行的左下角和右上角的坐标,计算面积的交集(即IOU中的U)。
思路:
union = 面积1 + 面积2 - 交集
面积就是边长 x 边长,边长就是x 之差 和 y 之差。
交集部分就是取左下角中较大的和右上角中较小的组成的区域,但是注意可能两个矩形没有交集,
这个可以根据交集部分的边长<0来判断。
另外,本题求的是Union,其中也用到了交集(intersection),
intersection / union 就是图像的IOU。
public int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
int area1 = (ax2 - ax1) * (ay2 - ay1);
int area2 = (bx2 - bx1) * (by2 - by1);
int diff_x = Math.min(ax2, bx2) - Math.max(ax1, bx1);
int diff_y = Math.min(ay2, by2) - Math.max(ay1, by1);
int inter = 0;
if(diff_x > 0 && diff_y > 0) {
inter = diff_x * diff_y;
}
return (area1 + area2 - inter);
}