Hello Paoline,
Please check, if the following function gives you the desired output:
import Metashape
def get_tie_point_number(camera1, camera2, chunk):
if not camera1.transform:
Metashape.app.messageBox("Not aligned camera selected.")
return 0
if not camera2.transform:
Metashape.app.messageBox("Not aligned camera selected.")
return 0
#point_cloud = chunk.tie_points #for version 2.0
point_cloud = chunk.point_cloud #for version 1.8
projections = point_cloud.projections
points = point_cloud.points
tracks = point_cloud.tracks
npoints = len(points)
point_ids = [-1] * len(point_cloud.tracks)
for point_id in range(0, npoints):
point_ids[points[point_id].track_id] = point_id
camera_matches_valid = dict()
for camera in [camera1, camera2]:
valid_matches = set()
for proj in projections[camera]:
track_id = proj.track_id
point_id = point_ids[track_id]
if point_id < 0:
continue
if not points[point_id].valid: #skipping invalid points
continue
valid_matches.add(point_id)
camera_matches_valid[camera] = valid_matches
valid = camera_matches_valid[camera1].intersection(camera_matches_valid[camera2])
total = set([p.track_id for p in projections[camera1]]).intersection(set([p.track_id for p in projections[camera2]]))
return (len(valid), len(total))
chunk = Metashape.app.document.chunk
Valid, Total = get_tie_point_number(chunk.cameras[0], chunk.cameras[1], chunk)
print(chunk.cameras[0].label, chunk.cameras[1].label, Total, Valid, Total-Valid)
I think that calculation of total common tie points can be optimized and integrated to the main loop, but in this script it is calculated as a separate step.