定义了一个名为 get_spatial_feat
的函数,其功能是将边界框(Bounding Box)的坐标和尺寸转换为归一化的空间特征,通常用于计算机视觉任务(如目标检测或关系识别):
函数参数
• bbox
: 输入边界框数组,形状为 (N, 4)
,其中 N
是边界框数量,每个边界框包含 [x0, y0, x1, y1]
(左上角和右下角坐标)。
• img_h
: 图像高度。
• img_w
: 图像宽度。
功能步骤
-
初始化特征数组
spatial_feat = np.zeros((bbox.shape[0], 5), dtype=np.float)
• 创建一个形状为
(N, 5)
的零数组,用于存储每个边界框的5个归一化特征。 -
归一化坐标
spatial_feat[:, 0] = bbox[:, 0] / float(img_w) # 左上角x坐标归一化 spatial_feat[:, 1] = bbox[:, 1] / float(img_h) # 左上角y坐标归一化 spatial_feat[:, 2] = bbox[:, 2] / float(img_w) # 右下角x坐标归一化 spatial_feat[:, 3] = bbox[:, 3] / float(img_h) # 右下角y坐标归一化
• 将边界框的绝对坐标转换为相对于图像尺寸的比例(范围
[0, 1]
),使特征与图像尺寸无关。 -
计算归一化面积
spatial_feat[:, 4] = (bbox[:, 2] - bbox[:, 0]) * (bbox[:, 3] - bbox[:, 1]) / float(img_h * img_w)
• 计算边界框的面积(宽度
x1-x0
× 高度y1-y0
),并除以图像总面积,得到面积占比(范围[0, 1]
)。
输出
• 返回一个形状为 (N, 5)
的数组,每行对应一个边界框的5个归一化特征:
[norm_x0, norm_y0, norm_x1, norm_y1, norm_area]
应用场景
• 目标关系建模:通过归一化坐标和面积,模型可以更关注物体之间的相对位置和大小。
• 多尺度兼容性:无论输入图像尺寸如何,特征始终在 [0, 1]
范围内,适合神经网络处理。
• 特征融合:常与其他特征(如视觉特征)拼接,提升模型性能。
例如,如果边界框 [50, 60, 200, 300]
位于 500x600
的图像中,归一化后为:
[0.1, 0.1, 0.4, 0.5, (150*240)/(500*600)=0.12]
。