Een stereo image kan een .mpo bestand zijn. Dat zijn gewoon twee of meer afbeeldingen in een enkel bestand. Dit werd ook gebruikt op de 3DS.

Online .MPOs voor oefenen.

FileFormatSamples

Op Sembiance staan nog wat .mpo bestanden gearchiveerd. Die zijn hier te vinden.

3ds library

Mocht je willen oefenen met het parsen van .mpo bestanden, of een dataset willen opbouwen, staat op deze publiek toegankelijke drive een grote set aan afbeeldingen.

Warning

Ik heb deze set gevonden met de🔸digger. Ik heb geen bewijs van toestemming en wil dus benadrukken dat deze foto’s niet gedistribueerd mogen worden.

Mocht je perse met .mpo willen werken raad ik je aan ze zelf samen te stellen door gemaakte afbeeldingen met je stereo camera. Voor het verbinden met je camera heb ik instructies geschreven voor PoE cameras en Usb-C cameras.

Het uitlezen van .MPO bestanden in code

Niemand heeft tijd en zin om nieuwe code te schrijven om .mpo bestanden te ondersteunen. Daarom heb ik dit al voor je gedaan! 😙

Python

Voor Python heb ik een methode gemaakt die van een Path van een .mpo afbeelding een lijst teruggeeft van Image instanties uit PIL.

import pathlib  
from typing import List  
  
from PIL import Image  
  
# Based on this https://github.com/tribut/mposplit/tree/master beautifully WTFPL licensed script.  
def parse_mpo_file(path: pathlib.Path) -> List[Image] | None:  
    path = path.resolve()  
  
    try:  
        image = Image.open(path)  
    except IOError as e:  
        print('Could not read image: {}'.format(e))  
        return None  
  
    if image.format != 'MPO':  
        print('Format ' + image.format +  
              ' not recognized as MPO, this script may not work')  
  
    images_list = []  
    try:  
        position = 0  
        while True:  
            image.seek(position)  
            filename = '{}-{}{}'.format(path.stem, position, path.suffix)  
            fullname = path.parent.joinpath(filename)  
  
            if fullname.exists():  
                print('{} already exists - skipping.'.format(filename))  
            else:  
                print('Extracting image to {}'.format(filename))  
  
            try:  
                # image.save(fullname)  
                images_list.append(image)  
            except IOError as e:  
                print('  Could not# Only used on load, thus does never need to be validated again. save: {}'.format(e))  
  
            position = image.tell() + 1  
    except EOFError:  
        return images_list # All images processed

Andere programmeertalen

Ongetest!

Dit overzichtje bevat libraries die aldus documentatie .mpo bestanden kan uitlezen. Ik heb alleen met Python gewerkt voor dit onderdeel, dus ik heb deze libraries nooit getest.

Het schrijven van .MPO bestanden in code

Door middel van Pillow is het erg makkelijk om .MPO bestanden te schrijven in Python. Ik had in mijn eigen applicatie een methode geschreven om gelijk twee mappen samen te voegen:

class MPOMerger:  
    def __init__(self, logger: ILogger):  
        self.logger = logger  
  
    def merge_folders(self, export_dir: Path, left_dir: Path, right_dir: Path):  
        """Assumes left and right dir children file names are equal. Will skip entries that are not in both."""  
  
        # TODO: Check if image is actually image.  
        # TODO: Check if all dirs exist.  
        for image in left_dir.iterdir():  
            left_image = image  
            right_image = right_dir / image.name  
  
            if right_image.exists():  
                self.merge(export_dir / (image.stem + ".mpo"), left_image, right_image)  
  
    def merge(self, export_path: Path, img_path_1: Path, img_path_2: Path):  
        """Merges two images into a single .mpo image."""  
        # TODO: Check if image is actually image.  
        from PIL import Image  
        im1 = Image.open(img_path_1)  
        im2 = Image.open(img_path_2)  
        im1.save(export_path, save_all=True, append_images=[im2], format='MPO')  
        self.logger.info(f"Saved new mpo file to {export_path}")

Andere programmeertalen

Ongetest!

Dit overzichtje bevat libraries die aldus documentatie .mpo bestanden kan schrijven. Ik heb alleen met Python gewerkt voor dit onderdeel, dus ik heb deze libraries nooit getest.

.MPO Plugins voor externe software

Ongetest!

Dit overzichtje bevat plugins die aldus documentatie .mpo bestanden utiliseren. Ik heb deze libraries nooit getest.

Tijdens het onderzoek kwam ik ook plugins tegen voor verschillende software die van pas kan komen. Hieronder een overzicht:

SoftwarePlugin
Gimpfile-mpo

In Adobe Photoshop kan je geen .mpo bestanden meer openen. Het lijkt alsof dit alleen kon in Photoshop 13 Beta.