python+numpy怎么判断两组坐标框少了?有两张图像,通过fastrcnn模型识别两张图像,图像a有10个识别框,图像b有11个识别框,怎么通过iou识别图像a和图像b,多出来的框?或者反过来图像A有11个识别框,图像b有9个识别框,怎么通过iou识别图像a和图像b少了两个识别框
6条回答 默认 最新
关注让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。
如果答案让您满意,请采纳、点赞、关注,非常感谢!
.
每日一句正能量,让它带给您好心情:今天的不完美,是为了明天更完美的铺垫。
.Python+Numpy 判断两组坐标框差异的方法
要比较两组检测框并找出多出或少了的框,可以通过计算IOU(交并比)来实现。以下是完整的解决方案:
方法思路
- 计算两组检测框之间的IOU矩阵
- 根据IOU阈值确定匹配关系
- 找出未匹配的框即为多出或少了的框
实现代码
import numpy as np def calculate_iou(boxes1, boxes2): """ 计算两组框之间的IOU矩阵 boxes1: [N, 4] (x1, y1, x2, y2) boxes2: [M, 4] 返回: [N, M] IOU矩阵 """ # 计算交集区域 lt = np.maximum(boxes1[:, None, :2], boxes2[:, :2]) # [N,M,2] rb = np.minimum(boxes1[:, None, 2:], boxes2[:, 2:]) # [N,M,2] wh = np.maximum(rb - lt, 0) # [N,M,2] inter = wh[:, :, 0] * wh[:, :, 1] # [N,M] # 计算各自面积 area1 = (boxes1[:, 2] - boxes1[:, 0]) * (boxes1[:, 3] - boxes1[:, 1]) # [N,] area2 = (boxes2[:, 2] - boxes2[:, 0]) * (boxes2[:, 3] - boxes2[:, 1]) # [M,] # 计算并集面积 union = area1[:, None] + area2 - inter # [N,M] # 计算IOU iou = inter / (union + 1e-6) # 防止除以0 return iou def find_missing_boxes(boxes_a, boxes_b, iou_threshold=0.5): """ 找出两组框之间的差异 返回: - a_extra: 在a中但不在b中的框 - b_extra: 在b中但不在a中的框 """ iou_matrix = calculate_iou(boxes_a, boxes_b) # 找出匹配的框对 matched_a = set() matched_b = set() # 按IOU从高到低匹配 while True: max_iou = np.max(iou_matrix) if max_iou < iou_threshold: break a_idx, b_idx = np.unravel_index(np.argmax(iou_matrix), iou_matrix.shape) matched_a.add(a_idx) matched_b.add(b_idx) # 将已匹配的行列置为0 iou_matrix[a_idx, :] = 0 iou_matrix[:, b_idx] = 0 # 找出未匹配的框 a_indices = set(range(len(boxes_a))) - matched_a b_indices = set(range(len(boxes_b))) - matched_b a_extra = boxes_a[list(a_indices)] if a_indices else np.array([]) b_extra = boxes_b[list(b_indices)] if b_indices else np.array([]) return a_extra, b_extra # 示例用法 if __name__ == "__main__": # 假设boxes_a和boxes_b是两组检测框坐标 boxes_a = np.array([[10, 10, 50, 50], [60, 60, 100, 100], [110, 110, 150, 150]]) boxes_b = np.array([[12, 12, 52, 52], [65, 65, 105, 105], [115, 115, 155, 155], [200, 200, 250, 250]]) a_extra, b_extra = find_missing_boxes(boxes_a, boxes_b) print("A中多出的框:", a_extra) print("B中多出的框:", b_extra)使用说明
calculate_iou函数计算两组框之间的IOU矩阵find_missing_boxes函数找出两组框之间的差异框- 通过设置
iou_threshold参数可以调整匹配的严格程度 - 返回结果中:
a_extra表示在A中但未在B中找到匹配的框b_extra表示在B中但未在A中找到匹配的框
应用场景
- 比较两个模型的检测结果差异
- 验证数据增强前后检测框的变化
- 分析不同参数下检测结果的稳定性
这个方法可以处理任意数量的框比较,无论哪一组多或少都能正确识别出差异框。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报