Python中基于ID元组匹配排序图像点集的实现问题
图像点集的ID匹配排序方案
现有两张图像的点集数据,每张点集的点都对应唯一ID:
- 第一张图的ID集合为ID1,对应点集points1
- 第二张图的ID集合为ID2(数量多于ID1),对应点集points2
- 部分ID在ID1和ID2中重复
要求:基于ID将两张图的点进行匹配排序,保持ID1的原有顺序不变,同时让输出的points2_output中,每个位置的点都与points1_output对应位置的点拥有相同ID。
示例数据
ID1 = (1, 2, 3, 4) ID2 = (5, 3, 1, 2, 4) points1= ((1,2), (1, 4), (3,5), (7,8)) points2= ((1,3), (2, 4), (2,5), (4,8), (3,9))
期望输出
points_1_output = ((1,2), (1, 4), (3,5), (7,8)) points_2_output = ((2,5), (4, 8), (2,4), (3,9))
原有代码的问题
你之前尝试的排序方法依赖ID连续递增的前提,一旦ID不连续或存在缺失,就无法正确匹配对应点。
解决方法
核心思路是先建立ID2到对应点的映射字典,再遍历ID1的每个ID,从字典中提取对应的点,这样就能严格保证输出顺序和ID1一致。
代码实现
ID1 = (1, 2, 3, 4) ID2 = (5, 3, 1, 2, 4) points1 = ((1,2), (1, 4), (3,5), (7,8)) points2 = ((1,3), (2, 4), (2,5), (4,8), (3,9)) # 建立ID2到对应点的映射字典 id2_to_point = dict(zip(ID2, points2)) # 生成输出:points1保持原顺序,points2按ID1的ID顺序提取对应点 points_1_output = points1 points_2_output = tuple(id2_to_point[id] for id in ID1) print("points_1_output =", points_1_output) print("points_2_output =", points_2_output)
该方案不依赖ID的连续性,只要ID1中的所有ID都存在于ID2中,就能完成精准匹配。
内容的提问来源于stack exchange,提问作者Philipp Enöckl
相关产品推荐
相关产品推荐

