この関数では、boxA
と は境界ボックスの 4 つの座標を表す 4 つの整数を含むリストboxB
です: [開始 x、開始 y、終了 x、終了 y]。
この関数は、まず 2 つの境界ボックスの交差面積を計算し、次に各境界ボックスの面積と 2 つの境界ボックスの結合面積を計算し、最後に交差面積を結合面積で除算し、その結果を求めます。借用書です。
def bbox_intersection_over_union(boxA, boxB):
# 确定每个边界框的 (y, x) 的 (开始,结束) 坐标
xA = max(boxA[0], boxB[0])
yA = max(boxA[1], boxB[1])
xB = min(boxA[2], boxB[2])
yB = min(boxA[3], boxB[3])
# 计算交集的面积
interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1)
# 计算每个边界框的面积
boxAArea = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1)
boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1)
# 计算并集的面积
unionArea = boxAArea + boxBArea - interArea
# 计算交并比
iou = interArea / float(unionArea)
# 返回交并比
return iou
xA
2 つの境界ボックスの左上の x 座標のうち大きい方で、交差部分の左上の x 座標を表します。yA
2 つの境界ボックスの左上隅の y 座標の大きい方の値で、交差点の左上隅の y 座標を示します。xB
2 つの境界ボックスの右下 x 座標の小さい方で、交差部分の右下 x 座標を表します。yB
は、2 つの境界ボックスの右下の y 座標の小さい方の値で、交差点の右下の y 座標を表します。これらの計算は、2 つの境界ボックスの交差の座標範囲を見つけるためのもので、交差の面積を計算するために使用されます。以上の
xA
場合は、2つのバウンディングボックスが交差していないことを意味し、このとき交差する部分の面積は0になります。xB
yA
yB