1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| class EarlyFusion: """ 数据级融合 在特征提取前融合原始数据 """ def __init__(self): self.sensors = { 'camera': RGBCamera(), 'nir': NIRCamera(), 'radar': MmWaveRadar() } def fuse_data(self, rgb_frame, nir_frame, radar_data): """ 原始数据融合 Args: rgb_frame: RGB图像 (H, W, 3) nir_frame: NIR图像 (H, W, 1) radar_data: 雷达点云 (N, 4) Returns: fused_tensor: 融合后的tensor (H, W, 4+radar_channels) """ rgb_nir = np.concatenate([rgb_frame, nir_frame], axis=-1) radar_projection = self.project_radar_to_image( radar_data, intrinsic_matrix=self.camera_intrinsic ) fused_tensor = np.concatenate([ rgb_nir, radar_projection ], axis=-1) return fused_tensor def project_radar_to_image(self, radar_data, intrinsic_matrix): """ 将雷达点云投影到图像平面 """ points_camera = self.transform_radar_to_camera(radar_data) points_2d = intrinsic_matrix @ points_camera[:3] points_2d = points_2d[:2] / points_2d[2] projection = np.zeros((self.height, self.width, 1)) for i, (u, v) in enumerate(points_2d.T): if 0 <= u < self.width and 0 <= v < self.height: projection[int(v), int(u), 0] = radar_data[i, 3] return projection
|