Update h5_to_db.py
Browse files- h5_to_db.py +16 -7
h5_to_db.py
CHANGED
|
@@ -113,7 +113,7 @@ def add_keypoints(db, h5_path, image_path, img_ext, camera_model, single_camera
|
|
| 113 |
|
| 114 |
def add_matches(db, h5_path, fname_to_id):
|
| 115 |
"""
|
| 116 |
-
matches.h5
|
| 117 |
"""
|
| 118 |
match_file = h5py.File(os.path.join(h5_path, 'matches.h5'), 'r')
|
| 119 |
|
|
@@ -122,18 +122,13 @@ def add_matches(db, h5_path, fname_to_id):
|
|
| 122 |
|
| 123 |
with tqdm(total=n_keys, desc="Adding matches") as pbar:
|
| 124 |
for pair_key in match_file.keys():
|
| 125 |
-
# pair_key = "image_000_image_001" の形式を分割
|
| 126 |
-
# "image_000_image_001" → ["image_000", "image_001"]
|
| 127 |
parts = pair_key.split('_')
|
| 128 |
-
|
| 129 |
-
# "image" + "000" + "image" + "001" → "image_000" と "image_001"
|
| 130 |
-
# 中央で分割(前半と後半に分ける)
|
| 131 |
mid = len(parts) // 2
|
| 132 |
key_1 = '_'.join(parts[:mid])
|
| 133 |
key_2 = '_'.join(parts[mid:])
|
| 134 |
|
| 135 |
if key_1 not in fname_to_id or key_2 not in fname_to_id:
|
| 136 |
-
print(f"Warning: {key_1} or {key_2} not found
|
| 137 |
pbar.update(1)
|
| 138 |
continue
|
| 139 |
|
|
@@ -146,7 +141,21 @@ def add_matches(db, h5_path, fname_to_id):
|
|
| 146 |
continue
|
| 147 |
|
| 148 |
matches = match_file[pair_key][()]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 149 |
db.add_matches(id_1, id_2, matches)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
added.add(pair_id)
|
| 151 |
pbar.update(1)
|
| 152 |
|
|
|
|
| 113 |
|
| 114 |
def add_matches(db, h5_path, fname_to_id):
|
| 115 |
"""
|
| 116 |
+
matches.h5から直接マッチを追加(COLMAPフォーマット対応)
|
| 117 |
"""
|
| 118 |
match_file = h5py.File(os.path.join(h5_path, 'matches.h5'), 'r')
|
| 119 |
|
|
|
|
| 122 |
|
| 123 |
with tqdm(total=n_keys, desc="Adding matches") as pbar:
|
| 124 |
for pair_key in match_file.keys():
|
|
|
|
|
|
|
| 125 |
parts = pair_key.split('_')
|
|
|
|
|
|
|
|
|
|
| 126 |
mid = len(parts) // 2
|
| 127 |
key_1 = '_'.join(parts[:mid])
|
| 128 |
key_2 = '_'.join(parts[mid:])
|
| 129 |
|
| 130 |
if key_1 not in fname_to_id or key_2 not in fname_to_id:
|
| 131 |
+
print(f"Warning: {key_1} or {key_2} not found")
|
| 132 |
pbar.update(1)
|
| 133 |
continue
|
| 134 |
|
|
|
|
| 141 |
continue
|
| 142 |
|
| 143 |
matches = match_file[pair_key][()]
|
| 144 |
+
|
| 145 |
+
# マッチが空でないか確認
|
| 146 |
+
if len(matches) == 0:
|
| 147 |
+
pbar.update(1)
|
| 148 |
+
continue
|
| 149 |
+
|
| 150 |
+
# COLMAPのフォーマット: (N, 2) の uint32配列
|
| 151 |
+
matches = matches.astype(np.uint32)
|
| 152 |
+
|
| 153 |
+
# マッチを追加
|
| 154 |
db.add_matches(id_1, id_2, matches)
|
| 155 |
+
|
| 156 |
+
# two_view_geometryも追加(COLMAPが期待する)
|
| 157 |
+
db.add_two_view_geometry(id_1, id_2, matches)
|
| 158 |
+
|
| 159 |
added.add(pair_id)
|
| 160 |
pbar.update(1)
|
| 161 |
|