Décomposition d’une image panoramique en faces de cube

10 décembre 2009 - Mots-clés : Liens Linux Photographie

Installation des packages

$ yaourt perl-panotools-script
$ yaourt perl-image-size

Conversion en cube à 6 faces

La conversion d'une image panoramique en 6 faces d'un cube permet :

  • l'affichage direct par un visualisateur de panorama sphérique ;
  • de servir de phase intermédiaire avant la convertion en tuiles ;

Pour convertir une image panoramique au format équirectangulaire (.tif) vers le format cubique (6 faces du cube .jpg), j'utilise le script suivant :

#!/bin/sh

function usage {
        cat <<EOF
Usage: $0 PANOFILE OUTDIR
Create cubic pano including deep zoom tiles for PanoSalado2 (SaladoViewer).

PANOFILE: Input image in tif format. This must be a spherical panorama
          with image_width = 2 * image_height.
OUTDIR: output directory of cube faces tiles of cubic panorama
EOF
}

PANOFILE=$1
OUTDIR=$2

# Remove flags, so $1 points to input file
shift $(($OPTIND - 1))

if [ $# -ne 2 ] ; then
        usage
        exit 1
fi

mkdir -p $OUTDIR/panini

EXT=${PANOFILE##*.}
EXTMIN=`echo $EXT | tr '[A-Z]' '[a-z]'`
if [ "$EXTMIN" != "jpg" -a "$EXTMIN" != "tif" ] ; then
   echo "$EXT n est pas une extension correcte" ; exit 1
fi
PANOBASENAME=`basename $PANOFILE .$EXT`

# Creates cube tiles <basename_without_suffix>_{b|d|f|l|r|u}.tif.
erect2cubic --erect=$1 --ptofile=$PANOBASENAME.pto #--specfile="JPEG q92"
nona -o face_ $PANOBASENAME.pto
rm $PANOBASENAME.pto
OUTDIR=`readlink -m $OUTDIR`
mv face_0000.tif $OUTDIR/face_f.tif
mv face_0001.tif $OUTDIR/face_r.tif
mv face_0002.tif $OUTDIR/face_b.tif
mv face_0003.tif $OUTDIR/face_l.tif
mv face_0004.tif $OUTDIR/face_u.tif
mv face_0005.tif $OUTDIR/face_d.tif
ln -s $OUTDIR/face_f.tif $OUTDIR/panini/1_f.tif
ln -s $OUTDIR/face_r.tif $OUTDIR/panini/2_r.tif
ln -s $OUTDIR/face_b.tif $OUTDIR/panini/3_b.tif
ln -s $OUTDIR/face_l.tif $OUTDIR/panini/4_l.tif
ln -s $OUTDIR/face_u.tif $OUTDIR/panini/5_u.tif
ln -s $OUTDIR/face_d.tif $OUTDIR/panini/6_d.tif

Le premier argumenet est l'image panoramique équirectangulaire et les deuxième est le répertoire de destination. Exemple d'utilisation :

$ equi2cube.sh monpano.tif ~/tmp/cube

Un répertoire cube est crée dans le même répertoire où se trouve l'image. On obtient les 6 faces du cube nommés monpano_0000.jpg (face), monpano_0001.jpg (droite), monpano_0002.jpg (arrière), monpano_0003.jpg (gauche), monpano_0004.jpg (haut), monpano_0005.jpg (bas).

Exemple

Image équirectangulaire de départ

Faces

Montage des 6 faces


Comments