2D bounding box
最大包围矩形计算方式:

代码:
python
import numpy as np
points = np.array([
[2, 3],
[5, 7],
[4, 1],
[6, 4]
])
x_min = np.min(points[:, 0])
y_min = np.min(points[:, 1])
x_max = np.max(points[:, 0])
y_max = np.max(points[:, 1])
bbox = (x_min, y_min, x_max, y_max)
print("Bounding box:", bbox)
两个bounding box的交集计算方式:
1,计算x坐标重叠的范围:左区间x_int_min是bbox的x_min的最大值。右区间x_int_max是bbox的x_max的最小值
对y坐标同理
只有当x_int_min<x_int_max且y_int_min<y_int_max时才会有交集的bbox

一个不存在交集bbox的实例如下:

代码实现:
python
bbox1 = (2, 1, 6, 7)
bbox2 = (4, 3, 8, 6)
x_int_min = max(bbox1[0], bbox2[0])
y_int_min = max(bbox1[1], bbox2[1])
x_int_max = min(bbox1[2], bbox2[2])
y_int_max = min(bbox1[3], bbox2[3])
if x_int_min < x_int_max and y_int_min < y_int_max:
intersection_bbox = (x_int_min, y_int_min, x_int_max, y_int_max)
print("Intersection bbox:", intersection_bbox)
else:
print("No intersection")
3D bounding box
2D的bbox计算方法可以轻易扩展到3D,只需对三个平面做投影即可变为2d的问题。


代码实现:
python
bbox1 = (1, 2, 3, 5, 6, 7)
bbox2 = (4, 3, 5, 8, 7, 9)
x_int_min = max(bbox1[0], bbox2[0])
y_int_min = max(bbox1[1], bbox2[1])
z_int_min = max(bbox1[2], bbox2[2])
x_int_max = min(bbox1[3], bbox2[3])
y_int_max = min(bbox1[4], bbox2[4])
z_int_max = min(bbox1[5], bbox2[5])
if x_int_min < x_int_max and y_int_min < y_int_max and z_int_min < z_int_max:
intersection_bbox = (x_int_min, y_int_min, z_int_min,
x_int_max, y_int_max, z_int_max)
print("Intersection 3D bbox:", intersection_bbox)
else:
print("No intersection")