Cross-Eyed Stereobilder in Side-By-Side Format umwandeln

Gentoo-Blog Ersatz

Moderator: el_hakim

Antworten
Benutzeravatar
el_hakim
Beiträge: 1114
Registriert: 09.08.2007, 13:53
Kontaktdaten:

Cross-Eyed Stereobilder in Side-By-Side Format umwandeln

Beitrag von el_hakim » 17.10.2011, 20:46

Wenn man nach Stereobildern im Netz sucht, findet man hauptsächlich Cross-Eyed-Bilder. Z.B.:

Bild

Hat man einen 3D-fähigen Fernseher (und die eventuell nötigen (Shutter-)Brillen) und möchte sich gern das Schielen ersparen, so könnte man nun auf die Idee kommen, solche Bilder auf dem TV anzuzeigen. Natürlich funktioniert das nicht ohne weiteres, da so ein 3D-TV zwar neben diversen HDMI-Framepacking-Verfahren zwar auch meistens einen sog. Side-by-Side Modus (SbS) hat, dieser aber etwas anders funktioniert.
Hauptunterschied ist, dass die Bilder horizontal um die Hälfte gestaucht nebeneinander abgespeichert werden. Der Fernseher skaliert die Einzelbilder dann wieder auf die volle Auflösung und zeigt sie schnell nacheinander an. Zusätzlich müssen die Einzelbilder noch in ihrem jeweiligen Bereich zentriert werden. Für das obige Beispielbild würde das z.B. ungefähr so aussehen:

Bild

Leider habe ich für Linux keinen Konverter oder Viewer für diesen Anwendungsfall gefunden. Dem lässt sich natürlich leicht abhelfen, :). Gimp zu scripten oder Imagemagick wären eine Variante. Mit Python gehts natürlich auch:

Code: Alles auswählen

#!/usr/bin/python
# Script to convert cross-eyed to side by side stereo pictures.

import os, sys
import Image

disp=1920, 1080

def x2s(i):
        # stretch height by 2 and fit to display resolution
        d=max(i.size[0]/float(disp[0]), (i.size[1]*2)/float(disp[1]))
        if(d>1.0):
                i=i.resize((int(i.size[0]/d), int((i.size[1]*2)/d)),
                        Image.ANTIALIAS)
        else:
                i=i.resize((int(i.size[0]*1/d), int((i.size[1]*2)*1/d)),
                        Image.BICUBIC)

        # crop image for left an right eye
        left=i.crop((0, 0, i.size[0]/2, i.size[1]))
        right=i.crop((i.size[0]/2, 0, i.size[0], i.size[1]))

        # get center coordinates for either image
        x_left=(disp[0]/2-left.size[0])/2;
        x_right=x_left+disp[0]/2;
        y=(disp[1]-left.size[1])/2;

        # paste in new image at left and right center coordinates
        # (left and right swapped because thats what cross-eyed means)
        xi=Image.new(i.mode, disp)
        xi.paste(right, (x_left, y));
        xi.paste(left, (x_right, y));

        return xi


for infile in sys.argv[1:]:
        f, e = os.path.splitext(infile)
        outfile = f + "_sbs.jpg"
        try:
                im=Image.open(infile)
                xim=x2s(im)
                xim.save(outfile, "JPEG")
        except IOError:
                print "cannot open ", infile
Download

Lediglich die Python-Image-Library muss installiert sein (in Gentoo dev-python/imaging).

1. Bild unter GFDL 1.2, Wilfried Wittkowsky, 2004; 2. Bild dann natürlich auch unter GFDL 1.2.
Ubuntu: African word meaning "Gentoo is to hard for me"

Antworten