#!/usr/bin/perl
use strict;
use warnings;
use Panotools::Script;
use Image::Size;
my $opts = {};
while (@ARGV)
{
my ($key, $value) = split ('=', shift);
$opts->{$key} = $value;
}
my $usage =
"Takes an equirectangular image and produces a .pto file suitable for
extracting six cube faces.
Usage:
$0 --erect=myerectangular.tif --ptofile=cubic.pto
Options:
--filespec (panotools format, defaults to 'TIFF_m')
--roll (degrees)
--pitch (degrees, use -90 if nadir is in centre)
--yaw (degrees, adjust position of first cubeface)
--face (cubeface size in pixels, defaults to optimum)
";
my $roll = $opts->{'--roll'} || 0;
my $pitch = $opts->{'--pitch'} || 0;
my $yaw = $opts->{'--yaw'} || 0;
my $filespec = $opts->{'--filespec'} || 'TIFF_m';
my $erect = $opts->{'--erect'} or die $usage;
my $ptofile = $opts->{'--ptofile'} or die $usage;
my ($width, $height) = imgsize ($erect);
my $face = $opts->{'--face'} || 8 * int ($width / 3.14159265 / 8);
my $p = new Panotools::Script;
$p->Panorama->Set (v => 90, f => 0, u => 0, w => $face, h => $face, n => "\"$filespec\"");
$p->Image->[0] = new Panotools::Script::Line::Image;
$p->Image->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => 0, y => 0, n => "\"$erect\"");
$p->Image->[0]->Transform ($roll, $pitch, $yaw);
$p->Image->[1] = $p->Image->[0]->Clone;
$p->Image->[1]->Transform (0, 0, -90);
$p->Image->[2] = $p->Image->[0]->Clone;
$p->Image->[2]->Transform (0, 0, 180);
$p->Image->[3] = $p->Image->[0]->Clone;
$p->Image->[3]->Transform (0, 0, 90);
$p->Image->[4] = $p->Image->[0]->Clone;
$p->Image->[4]->Transform (0, -90, 0);
$p->Image->[5] = $p->Image->[0]->Clone;
$p->Image->[5]->Transform (0, 90, 0);
$p->Write ($ptofile);
0;
__END__
=head1 NAME
erect2cubic - creates a hugin .pto file for converting equirectangular to cubic
=head1 Synopsis
erect2cubic --erect=panorama.tif --ptofile=cube_project.pto
nona -o cube_prefix cube_project.pto
=head1 DESCRIPTION
Takes an equirectangular image and produces a .pto file suitable for
extracting six cube faces in TIFF_m format.
Cube faces are produced in front, right, back, left, up & down
order. The cube edge length is set to the sphere diameter reduced
to the nearest multiple of 8. Prerotate the scene with --roll,
--pitch and --yaw parameters if required.
erect2cubic --erect=panorama.tif --ptofile=cube_project.pto
nona -o cube_prefix cube_project.pto
=head1 Calling syntax
cubic2erect --erect=panorama.tif --ptofile=cube_project.pto \
[--roll=12] [--pitch=34] [--yaw=56] [--filespec=PNG] [--face=1024]
=head1 License
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
=head1 See Also
L<http://panotools.sourceforge.net/>
=head1 Author
Bruno Postle, E<lt>bruno (at) postle.netE<gt>
=cut