示例#1
0
def create_rigs_with_pattern(data: DataSet, patterns):
    """Create rig data (`rig_models.json` and `rig_assignments.json`) by performing
    pattern matching to group images belonging to the same instances, followed
    by a bit of ad-hoc SfM to find some initial relative poses.
    """

    # Construct instances assignments for each rig
    instances_per_rig = create_instances_with_patterns(data.images(), patterns)
    for rig_id, instances in instances_per_rig.items():
        logger.info(
            f"Found {len(instances)} rig instances for rig {rig_id} using pattern matching."
        )

    # Create some subset DataSet with enough images from each rig
    subset_data = create_subset_dataset_from_instances(data, instances_per_rig,
                                                       "rig_calibration")

    # # Run a bit of SfM without any rig
    logger.info(
        f"Running SfM on a subset of {len(subset_data.images())} images.")
    actions.extract_metadata.run_dataset(subset_data)
    actions.detect_features.run_dataset(subset_data)
    actions.match_features.run_dataset(subset_data)
    actions.create_tracks.run_dataset(subset_data)
    actions.reconstruct.run_dataset(subset_data)

    # Compute some relative poses
    rig_models = create_rig_models_from_reconstruction(
        subset_data.load_reconstruction()[0], instances_per_rig)

    data.save_rig_models(rig_models)
    data.save_rig_assignments(instances_per_rig)
示例#2
0
def create_rigs_with_pattern(data: DataSet, patterns):
    """Create rig data (`rig_models.json` and `rig_assignments.json`) by performing
    pattern matching to group images belonging to the same instances, followed
    by a bit of ad-hoc SfM to find some initial relative poses.
    """

    # Construct instances assignments for each rig
    instances_per_rig = create_instances_with_patterns(data.images(), patterns)
    for rig_id, instances in instances_per_rig.items():
        logger.info(
            f"Found {len(instances)} rig instances for rig {rig_id} using pattern matching."
        )

    # Create some subset DataSet with enough images from each rig
    subset_data = create_subset_dataset_from_instances(data, instances_per_rig,
                                                       "rig_calibration")

    # # Run a bit of SfM without any rig
    logger.info(
        f"Running SfM on a subset of {len(subset_data.images())} images.")
    actions.extract_metadata.run_dataset(subset_data)
    actions.detect_features.run_dataset(subset_data)
    actions.match_features.run_dataset(subset_data)
    actions.create_tracks.run_dataset(subset_data)
    actions.reconstruct.run_dataset(subset_data)

    # Compute some relative poses
    rig_models_poses = create_rig_model_from_reconstruction(
        subset_data.load_reconstruction()[0], instances_per_rig)

    # Ad-hoc construction of output model data
    # Will be replaced by `io` counterpart
    models = {}
    for rig_id in patterns:
        rig_pattern = patterns[rig_id]
        model = rig_models_poses[rig_id]

        rig_model = {}
        for rig_camera_id in model:
            pose, camera_id = model[rig_camera_id]
            rig_model[rig_camera_id] = {
                "translation": list(pose.translation),
                "rotation": list(pose.rotation),
                "camera": camera_id,
            }

        models[rig_id] = {
            "rig_relative_type": "shared",
            "rig_cameras": rig_model,
        }

    data.save_rig_models(models)
    data.save_rig_assignments(instances_per_rig)