From: <bru...@us...> - 2006-10-24 22:43:18
|
Revision: 580 http://svn.sourceforge.net/panotools/?rev=580&view=rev Author: brunopostle Date: 2006-10-24 15:42:59 -0700 (Tue, 24 Oct 2006) Log Message: ----------- Add Transform() method to rotate script files. Various bugfixes. Modified Paths: -------------- trunk/Panotools-Script/.cvsignore trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL trunk/Panotools-Script/README trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm trunk/Panotools-Script/lib/Panotools/Script.pm Added Paths: ----------- trunk/Panotools-Script/META.yml trunk/Panotools-Script/bin/transform-pano trunk/Panotools-Script/lib/Panotools/Matrix.pm trunk/Panotools-Script/t/031.matrix.t Modified: trunk/Panotools-Script/.cvsignore =================================================================== --- trunk/Panotools-Script/.cvsignore 2006-10-24 16:50:49 UTC (rev 579) +++ trunk/Panotools-Script/.cvsignore 2006-10-24 22:42:59 UTC (rev 580) @@ -2,4 +2,5 @@ Makefile blib pm_to_blib +MANIFEST.bak Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2006-10-24 16:50:49 UTC (rev 579) +++ trunk/Panotools-Script/Changes 2006-10-24 22:42:59 UTC (rev 580) @@ -1,5 +1,9 @@ Revision history for Panotools::Script. +0.02 + - Add Transform() method to rotate project files + - various bugfixes + 0.01 - rewritten in less crappy OO style (Bruno Postle) Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2006-10-24 16:50:49 UTC (rev 579) +++ trunk/Panotools-Script/MANIFEST 2006-10-24 22:42:59 UTC (rev 580) @@ -1,9 +1,12 @@ +.cvsignore bin/cubic2erect bin/erect2cubic bin/erect2planet +bin/pto2tiff bin/qtvr2erect -bin/pto2tiff +bin/transform-pano Changes +lib/Panotools/Matrix.pm lib/Panotools/Script.pm lib/Panotools/Script/Line.pm lib/Panotools/Script/Line/Control.pm @@ -15,6 +18,7 @@ lib/Panotools/Script/Line/Variable.pm Makefile.PL MANIFEST This list of files +META.yml Module meta-data (added by MakeMaker) README t/001.parse-control.t t/002.parse-panorama.t @@ -26,6 +30,7 @@ t/012.read-pto.t t/020.create-script.t t/021.morph.t +t/031.matrix.t t/data/cemetery/dscn4905.jpg t/data/cemetery/dscn4906.jpg t/data/cemetery/dscn4907.jpg @@ -35,4 +40,3 @@ t/data/cemetery/hugin-stitch.txt t/data/cemetery/hugin.pto t/data/equirectangular/equirectangular.jpg -META.yml Module meta-data (added by MakeMaker) Added: trunk/Panotools-Script/META.yml =================================================================== --- trunk/Panotools-Script/META.yml (rev 0) +++ trunk/Panotools-Script/META.yml 2006-10-24 22:42:59 UTC (rev 580) @@ -0,0 +1,10 @@ +# http://module-build.sourceforge.net/META-spec.html +#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# +name: Panotools-Script +version: 0.02 +version_from: lib/Panotools/Script.pm +installdirs: site +requires: + +distribution_type: module +generated_by: ExtUtils::MakeMaker version 6.17 Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2006-10-24 16:50:49 UTC (rev 579) +++ trunk/Panotools-Script/Makefile.PL 2006-10-24 22:42:59 UTC (rev 580) @@ -3,7 +3,7 @@ # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Panotools::Script', - 'EXE_FILES' => [ 'bin/qtvr2erect', 'bin/cubic2erect', 'bin/erect2cubic', 'bin/erect2planet', 'bin/pto2tiff' ], + 'EXE_FILES' => [ 'bin/qtvr2erect', 'bin/cubic2erect', 'bin/erect2cubic', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION 'PREREQ_PM' => {}, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2006-10-24 16:50:49 UTC (rev 579) +++ trunk/Panotools-Script/README 2006-10-24 22:42:59 UTC (rev 580) @@ -36,10 +36,6 @@ * cyl2erect * Delete control points * Scale project -* Rotate/transform project -* Batch stitching -* Enblend -* Animation Copyright and licence Added: trunk/Panotools-Script/bin/transform-pano =================================================================== --- trunk/Panotools-Script/bin/transform-pano (rev 0) +++ trunk/Panotools-Script/bin/transform-pano 2006-10-24 22:42:59 UTC (rev 580) @@ -0,0 +1,15 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use File::Spec; +use Panotools::Script; + +die "Usage: $0 <roll> <pitch> <yaw> <input.pto> <output.pto>" unless @ARGV == 5; +my ($roll, $pitch, $yaw, $input, $output) = @ARGV; + +my $pano = new Panotools::Script; +$pano->Read ($input); +$pano->Transform ($roll, $pitch, $yaw); +$pano->Write ($output); + Property changes on: trunk/Panotools-Script/bin/transform-pano ___________________________________________________________________ Name: svn:executable + * Added: trunk/Panotools-Script/lib/Panotools/Matrix.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Matrix.pm (rev 0) +++ trunk/Panotools-Script/lib/Panotools/Matrix.pm 2006-10-24 22:42:59 UTC (rev 580) @@ -0,0 +1,101 @@ +package Panotools::Matrix; + +=head1 NAME + +Panotools::Matrix - Miscellaneous math for panoramic images + +=head1 SYNOPSIS + +$matrix = rollpitchyaw2matrix ($roll, $pitch, $yaw); + +All angles are in radians not degrees. + +=head1 DESCRIPTION + +rollpitchyaw2matrix returns a Math::Matrix object that encapsulates a +transformation suitable for rotating a vector/point by three degrees of freedom +(roll, pitch and yaw). + +roll is positive rotation around the x-axis + +pitch is negative rotation around the y-axis + +yaw is negative rotation around the z axis + +=head1 USAGE + +use Math::Matrix; + +use Panotools::Matrix; + +my $point = new Math::Matrix ([$x1], [$y1], [$z1]); + +my $matrix = rollpitchyaw2matrix ($roll, $pitch, $yaw); + +my $result = $matrix->multiply ($point); + +($x2, $y2, $z2) = ($result->[0][0], $result->[1][0], $result->[2][0]); + +=head1 FILES + +Requires Math::Matrix as this is all matrix mathematics. + +=head1 COPYRIGHT + +Copyright (c) 2001 Bruno Postle <br...@po...>. All Rights Reserved. This +module is Free Software. It may be used, redistributed and/or modified under +the same terms as Perl itself. + +This module is partly based on Math::Geometry by Greg McCarroll +<gr...@mc...> + +=cut + +use Math::Matrix; +use Math::Trig; +use Math::Trig ':radial'; +use strict; + +use Exporter; +use vars qw(@ISA @EXPORT); +@ISA = qw(Exporter); +@EXPORT = qw(rollpitchyaw2matrix matrix2rollpitchyaw); + +sub rollpitchyaw2matrix { + my ($roll, $pitch, $yaw) = @_; + + my $cosr = cos ($roll); + my $sinr = sin ($roll); + my $cosp = cos ($pitch); + my $sinp = sin (0 - $pitch); + my $cosy = cos ($yaw); + my $siny = sin (0 - $yaw); + + my $rollm = new Math::Matrix ([ 1, 0, 0 ], + [ 0, $cosr,-1*$sinr ], + [ 0, $sinr, $cosr ]); + + my $pitchm = new Math::Matrix ([ $cosp, 0, $sinp ], + [ 0, 1, 0 ], + [ -1*$sinp, 0, $cosp ]); + + my $yawm = new Math::Matrix ([ $cosy,-1*$siny, 0 ], + [ $siny, $cosy, 0 ], + [ 0, 0, 1 ]); + + $yawm->multiply ($pitchm)->multiply ($rollm); +} + +# following copied from a spreadsheet by Stuart Milne + +sub matrix2rollpitchyaw +{ + my $matrix = shift; + my $roll = atan2 ($matrix->[2]->[1], $matrix->[2]->[2]); + my $pitch = -1 * asin (-1 * $matrix->[2]->[0]); + my $yaw = atan2 (-1 * $matrix->[1]->[0], $matrix->[0]->[0]); + return ($roll, $pitch, $yaw); +} + +1; + Modified: trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2006-10-24 16:50:49 UTC (rev 579) +++ trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2006-10-24 22:42:59 UTC (rev 580) @@ -144,6 +144,7 @@ { my $vector = shift; my $name = shift; + return $name unless $vector; $name =~ s/^"//; $name =~ s/"$//; use File::Spec; Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2006-10-24 16:50:49 UTC (rev 579) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2006-10-24 22:42:59 UTC (rev 580) @@ -29,10 +29,13 @@ use Panotools::Script::Line::ControlMorph; use Panotools::Script::Line::Variable; +use Panotools::Matrix qw(matrix2rollpitchyaw rollpitchyaw2matrix); +use Math::Trig; + use File::Temp qw/ tempfile /; use File::Spec; -our $VERSION = 0.01; +our $VERSION = 0.02; our $CLEANUP = 1; $CLEANUP = 0 if defined $ENV{DEBUG}; @@ -87,6 +90,7 @@ for my $line (@raw) { + $line =~ s/(\r|\n)//g; $self->{mode}->Parse ($line) if ($line =~ /^m /); $self->{panorama}->Parse ($line) if ($line =~ /^p /); $self->{variable}->Parse ($line) if ($line =~ /^v /); @@ -189,6 +193,33 @@ =pod +Rotate transform all the images in a project, angles in degrees: + + $p->Transform ($roll, $pitch, $yaw); + +=cut + +sub Transform +{ + my $self = shift; + my ($roll, $pitch, $yaw) = @_; + my @transform_rpy = map (deg2rad ($_), ($roll, $pitch, $yaw)); + my $transform_matrix = rollpitchyaw2matrix (@transform_rpy); + for my $image (@{$self->{image}}) + { + my @rpy = map (deg2rad ($_), ($image->{r}, $image->{p}, $image->{y})); + my $matrix = rollpitchyaw2matrix (@rpy); + my $result = $transform_matrix->multiply ($matrix); + my ($r, $p, $y) = map (rad2deg ($_), matrix2rollpitchyaw ($result)); + $image->{r} = $r; + $image->{p} = $p; + $image->{y} = $y; + } + $self->Image2Output; +} + +=pod + 'o' output lines are generated by PTOptimizer and contain stitching parameters for each input image. 'i' image lines provide parameters for optimisation as well as stitching. Added: trunk/Panotools-Script/t/031.matrix.t =================================================================== --- trunk/Panotools-Script/t/031.matrix.t (rev 0) +++ trunk/Panotools-Script/t/031.matrix.t 2006-10-24 22:42:59 UTC (rev 580) @@ -0,0 +1,27 @@ +#!/usr/bin/perl +#Editor vim:syn=perl + +use strict; +use warnings; +use Test::More 'no_plan'; +use Math::Trig; +use lib 'lib'; + +use Panotools::Matrix qw(rollpitchyaw2matrix matrix2rollpitchyaw); + +# 0, 45, 0 +my $pitch45 = rollpitchyaw2matrix (map (deg2rad ($_),(0, -45, 0))); + +# 5, -5, 10 +my $foo = rollpitchyaw2matrix (map (deg2rad ($_),(5, -5, 10))); + +my $result = $pitch45->multiply ($foo); + +my @rpy = matrix2rollpitchyaw ($result); + +@rpy = map (rad2deg ($_), @rpy); + +like ($rpy[0], '/-5.79921896/'); +like ($rpy[1], '/-49.0553302/'); +like ($rpy[2], '/15.3057553/'); + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2006-11-19 23:25:04
|
Revision: 606 http://svn.sourceforge.net/panotools/?rev=606&view=rev Author: brunopostle Date: 2006-11-19 15:25:04 -0800 (Sun, 19 Nov 2006) Log Message: ----------- Housekeeping Modified Paths: -------------- trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2006-11-19 23:24:31 UTC (rev 605) +++ trunk/Panotools-Script/MANIFEST 2006-11-19 23:25:04 UTC (rev 606) @@ -3,7 +3,6 @@ bin/erect2cubic bin/erect2planet bin/pto2tiff -bin/qtvr2erect bin/transform-pano Changes lib/Panotools/Matrix.pm Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2006-11-19 23:24:31 UTC (rev 605) +++ trunk/Panotools-Script/Makefile.PL 2006-11-19 23:25:04 UTC (rev 606) @@ -3,9 +3,9 @@ # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Panotools::Script', - 'EXE_FILES' => [ 'bin/qtvr2erect', 'bin/cubic2erect', 'bin/erect2cubic', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano' ], + 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION - 'PREREQ_PM' => {}, + 'PREREQ_PM' => {'Math::Matrix' => 0.4, 'Image::Magick' => 5.0}, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 (ABSTRACT_FROM => 'lib/Panotools/Script.pm', # retrieve abstract from module AUTHOR => 'Bruno Postle <br...@po...>') : ()), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2006-11-20 22:08:21
|
Revision: 608 http://svn.sourceforge.net/panotools/?rev=608&view=rev Author: brunopostle Date: 2006-11-20 14:08:20 -0800 (Mon, 20 Nov 2006) Log Message: ----------- Add panotools related perl tools, can't think where else to put them. Modified Paths: -------------- trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL Added Paths: ----------- trunk/Panotools-Script/bin/enblend-mask trunk/Panotools-Script/bin/jpeg2qtvr trunk/Panotools-Script/bin/process-masks Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2006-11-20 21:38:34 UTC (rev 607) +++ trunk/Panotools-Script/MANIFEST 2006-11-20 22:08:20 UTC (rev 608) @@ -1,7 +1,10 @@ .cvsignore bin/cubic2erect +bin/enblend-mask bin/erect2cubic bin/erect2planet +bin/jpeg2qtvr +bin/process-masks bin/pto2tiff bin/transform-pano Changes Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2006-11-20 21:38:34 UTC (rev 607) +++ trunk/Panotools-Script/Makefile.PL 2006-11-20 22:08:20 UTC (rev 608) @@ -3,7 +3,7 @@ # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Panotools::Script', - 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano' ], + 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/jpeg2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION 'PREREQ_PM' => {'Math::Matrix' => 0.4, 'Image::Magick' => 5.0}, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 Added: trunk/Panotools-Script/bin/enblend-mask =================================================================== --- trunk/Panotools-Script/bin/enblend-mask (rev 0) +++ trunk/Panotools-Script/bin/enblend-mask 2006-11-20 22:08:20 UTC (rev 608) @@ -0,0 +1,62 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use File::Temp qw/tempdir/; +use File::Spec; + +=pod + +Wrapper around enblend. Usage is exactly the same as for enblend, +except that if files named '<filename>_mask.tif' exist, they are +inserted as alpha masks before blending. + +Requires enblend and ImageMagick. + +October 2006, Bruno Postle <bruno AT postle.net> + +This software is distributed under the same terms as enblend itself. + +=cut + +my @parameters; +my @files; +my $tempdir = tempdir (CLEANUP => 1); + +while (@ARGV) +{ + my $arg = shift @ARGV; + if ($arg =~ /-o/) + { + push @parameters, $arg; + push @parameters, shift @ARGV; + next; + } + if ($arg =~ /\.tif$/i) {push @files, $arg} + else {push @parameters, $arg} +} + +my $index = 0; + +for my $file (@files) +{ + my $mask = $file; + $mask =~ s/\.tif$/_mask.tif/i; + if (-e $mask) + { + print STDERR "Using mask $mask\n"; + my $tempfile = File::Spec->catfile ($tempdir, "$index.tif"); + `composite -compose CopyOpacity $mask $file $tempfile`; + push @parameters, $tempfile; + $index++; + } + else + { + push @parameters, $file; + } +} + +my $exec = 'enblend '. (join ' ', @parameters); + +`$exec`; + Property changes on: trunk/Panotools-Script/bin/enblend-mask ___________________________________________________________________ Name: svn:executable + * Added: trunk/Panotools-Script/bin/jpeg2qtvr =================================================================== --- trunk/Panotools-Script/bin/jpeg2qtvr (rev 0) +++ trunk/Panotools-Script/bin/jpeg2qtvr 2006-11-20 22:08:20 UTC (rev 608) @@ -0,0 +1,783 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use bytes; + +# jpeg2qtvr, assembles six jpeg cube faces into a QTVR file +# Copyright (C) 2006 Bruno Postle <bruno at postle dot net> +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +our $VERSION = 0.01; + +# http://wiki.multimedia.cx/index.php?title=Apple_QuickTime +# http://developer.apple.com/documentation/QuickTime/InsideQT_QTVR/index.html +# http://developer.apple.com/documentation/QuickTime/QTFF/index.html + +# date is seconds since midnight, January 1, 1904 + +my $date = pack4B (time + 2082844800); + +# pixel size of the view window + +my $width = pack4B (1024); +my $height = pack4B (768); + +die "Usage: $0 front.jpg right.jpg back.jpg left.jpg up.jpg down.jpg > output.mov" unless @ARGV == 6; + +# slurp in the JPEG data + +local ($/, *FH); + +open (FH, $ARGV[0]) or die "can't open $ARGV[0]"; +my $image0 = <FH>; +close FH; + +open (FH, $ARGV[1]) or die "can't open $ARGV[1]"; +my $image1 = <FH>; +close FH; + +open (FH, $ARGV[2]) or die "can't open $ARGV[2]"; +my $image2 = <FH>; +close FH; + +open (FH, $ARGV[3]) or die "can't open $ARGV[3]"; +my $image3 = <FH>; +close FH; + +open (FH, $ARGV[4]) or die "can't open $ARGV[4]"; +my $image4 = <FH>; +close FH; + +open (FH, $ARGV[5]) or die "can't open $ARGV[5]"; +my $image5 = <FH>; +close FH; + +# these will be filled later + +my $offsetA = '????'; +my $offsetB = '????'; +my $offset0 = '????'; +my $offset1 = '????'; +my $offset2 = '????'; +my $offset3 = '????'; +my $offset4 = '????'; +my $offset5 = '????'; + +# build the mov data + +my $mov; + +for (0 .. 1) +{ + +$mov = + +atom ('ftyp', + "qt\x{20}\x{20}\x{20}\x{05}\x{03}\x{00}". + "qt\x{20}\x{20}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}" +). + +atom ('moov', + +#[Subrecursing 'moov' atom] + + atom ('mvhd', + "\x{00}\x{00}\x{00}\x{00}". + $date.$date. + "\x{00}\x{00}\x{0e}\x{10}". + "\x{00}\x{00}\x{0e}\x{10}\x{00}\x{01}\x{00}\x{00}". + "\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{40}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{0e}\x{10}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{04}" + ). + + atom ('trak', + +# [Subrecursing 'trak' atom] + + atom ('tkhd', + "\x{00}\x{00}\x{00}\x{0f}". + $date.$date. + "\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{0e}\x{10}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{40}\x{00}". + $width.$height. + "\x{00}\x{00}" + ). + + atom ('edts', + + atom ('elst', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{0e}\x{10}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{00}\x{00}" + ) + ). + + atom ('tref', + + atom ('pano', + "\x{00}\x{00}\x{00}\x{02}" + ) + ). + + atom ('mdia', + +# [Subrecursing 'mdia' atom] + + atom ('mdhd', + "\x{00}\x{00}\x{00}\x{00}". + $date.$date. + "\x{00}\x{00}\x{0e}\x{10}". + "\x{00}\x{00}\x{0e}\x{10}\x{00}\x{00}\x{00}\x{00}" + ). + + atom ('hdlr', + "\x{00}\x{00}\x{00}\x{00}". + "mhlrqtvrappl". + "\x{80}\x{00}\x{00}\x{01}\x{00}\x{01}\x{02}\x{a1}\x{12}". + "QTVR Media Handler" + ). + + atom ('minf', + +# [Subrecursing 'minf' atom] + + atom ('gmhd', + + atom ('gmin', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{40}\x{80}\x{00}". + "\x{80}\x{00}\x{80}\x{00}\x{00}\x{00}\x{00}\x{00}" + ) + ). + + atom ('hdlr', + "\x{00}\x{00}\x{00}\x{00}dhlr". + "alisappl". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{01}\x{00}\x{2d}\x{18}". + "Apple Alias Data Handler" + ). + + atom ('dinf', + +# [Subrecursing 'dinf' atom] + + atom ('dref', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + + atom ('alis', + "\x{00}\x{00}\x{00}\x{01}" + ) + ) + +# [End subrecurse 'dinf' atom] + + ). + + atom ('stbl', + +# [Subrecursing 'stbl' atom] + + atom ('stsd', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + +"\x{00}\x{00}\x{01}\x{5c}". "qtvr". + +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + +"\x{00}\x{00}\x{01}\x{40}". "sean". + +"\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{03}\x{00}\x{00}\x{00}\x{00}". + + atom ('vrsc', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}" + ). + +"\x{00}\x{00}\x{00}\x{ac}". "imgp". + +"\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}\x{00}\x{00}". + + atom ('impn', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}\x{00}\x{03}". + "\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}" + ). + + atom ('impn', + "\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{03}". + "\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}\x{03}\x{ff}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}" + ). + + atom ('vrnp', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{00}". + + atom ('vrni', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{00}". + + atom ('nloc', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}". + "pano\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}" + ) + ) + ) + ). + + atom ('stts', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{0e}\x{10}" + ). + + atom ('stsc', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{01}" + ). + + atom ('stsz', + # ver # flags + "\x{00}\x{00}\x{00}\x{00}". + # standard size (80B) + "\x{00}\x{00}\x{00}\x{50}". + # number of samples + "\x{00}\x{00}\x{00}\x{01}" + ). + + atom ('stco', + # ver # flags + "\x{00}\x{00}\x{00}\x{00}". + # number entries + "\x{00}\x{00}\x{00}\x{01}". + $offsetA + ) + ) + +# [End subrecurse 'stbl' atom] + + ) + +# [End subrecurse 'minf' atom] + + ) + +# [End subrecurse 'mdia' atom] + + ). + +# [End subrecurse 'trak' atom] + + atom ('trak', + +# [Subrecursing 'trak' atom] + + atom ('tkhd', + + "\x{00}\x{00}\x{00}\x{0f}". + $date.$date. + "\x{00}\x{00}\x{00}\x{02}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{0e}\x{10}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{40}\x{00}". + $width.$height. + "\x{00}\x{00}" + ). + + atom ('load', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}\x{00}" + ). + + atom ('edts', + + atom ('elst', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{0e}\x{10}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{00}\x{00}" + ) + + ). + + atom ('tref', + + atom ('imgt', + "\x{00}\x{00}\x{00}\x{03}" + ) + + ). + + atom ('mdia', + +# [Subrecursing 'mdia' atom] + + atom ('mdhd', + "\x{00}\x{00}\x{00}\x{00}". + $date.$date. + "\x{00}\x{00}\x{0e}\x{10}". + "\x{00}\x{00}\x{0e}\x{10}". + "\x{00}\x{00}\x{00}\x{00}" + ). + + atom ('hdlr', + "\x{00}\x{00}\x{00}\x{00}mhlrpanoappl". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{01}\x{02}\x{99}\x{1b}". + "QTVR Panorama Media Handler" + ). + +# ReadAtom_HDLR: We found the 'pano' media! + + atom ('minf', + +# [Subrecursing 'minf' atom] + + atom ('gmhd', + + atom ('gmin', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{40}\x{80}\x{00}". + "\x{80}\x{00}\x{80}\x{00}\x{00}\x{00}\x{00}\x{00}" + ) + ). + + atom ('hdlr', + "\x{00}\x{00}\x{00}\x{00}dhlralisappl". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{01}\x{00}\x{2d}\x{18}". + "Apple Alias Data Handler" + ). + + atom ('dinf', + +# [Subrecursing 'dinf' atom] + + atom ('dref', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + + atom ('alis', + "\x{00}\x{00}\x{00}\x{01}" + ) + ) + ). + +# [End subrecurse 'dinf' atom] + + atom ('stbl', + +# [Subrecursing 'stbl' atom] + + atom ('stsd', + + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{10}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}" + ). + + atom ('stts', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{0e}\x{10}" + ). + + atom ('stsc', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{01}" + ). + + atom ('stsz', + # ver flags + "\x{00}\x{00}\x{00}\x{00}". + # standard size + "\x{00}\x{00}\x{00}\x{c0}". + # number of items + "\x{00}\x{00}\x{00}\x{01}" + ). + +# 'pano' sample size = : 192 + + atom ('stco', + # ver # flags + "\x{00}\x{00}\x{00}\x{00}". + # number samples + "\x{00}\x{00}\x{00}\x{01}". + $offsetB + +# Chunk offset to 'pano' is : 2322 + +# [Subrecursing pano 'stco' atom] +# +# QTAtom 0x0000091E (0x000000B4) sean child count: 2 +# +# [Subrecursing 'sean' qt atom] +# +# QTAtom 0x00000932 (0x00000068) pdat child count: 0 +# QTAtom 0x0000099A (0x00000038) cuvw child count: 0 +# +# [End subrecursing 'sean' qt atom] + + ) + +# [End subrecurse pano 'stco' atom] + + ) + +# [End subrecurse 'stbl' atom] + + ) + +# [End subrecurse 'minf' atom] + + ) + +# [End subrecurse 'mdia' atom] + + ). + +# [End subrecurse 'trak' atom] + + atom ('trak', + +# [Subrecursing 'trak' atom] + + atom ('tkhd', + "\x{00}\x{00}\x{00}\x{0e}". + $date.$date. + "\x{00}\x{00}\x{00}\x{03}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{0e}\x{10}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{40}\x{00}\x{00}\x{00}\x{07}\x{80}\x{00}\x{00}". + "\x{07}\x{80}\x{00}\x{00}" + ). + + atom ('edts', + + atom ('elst', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{0e}\x{10}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{00}\x{00}" + ) + ). + + atom ('mdia', + +# [Subrecursing 'mdia' atom] + + atom ('mdhd', + "\x{00}\x{00}\x{00}\x{00}". + $date.$date. + "\x{00}\x{00}\x{0e}\x{10}". + "\x{00}\x{00}\x{0e}\x{10}\x{00}\x{00}\x{00}\x{00}" + ). + + atom ('hdlr', + "\x{00}\x{00}\x{00}\x{00}mhlrvideappl". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}\x{00}\x{23}\x{19}". + "Apple Video Media Handler" + ). + +# ReadAtom_HDLR: We found a 'vide' media! + + atom ('minf', + +# [Subrecursing 'minf' atom] + + atom ('vmhd', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{40}\x{80}\x{00}". + "\x{80}\x{00}\x{80}\x{00}" + ). + + atom ('hdlr', + "\x{00}\x{00}\x{00}\x{00}dhlralisappl". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{01}\x{00}\x{2d}\x{18}". + "Apple Alias Data Handler" + ). + + atom ('dinf', + +# [Subrecursing 'dinf' atom] + + atom ('dref', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + + atom ('alis', + "\x{00}\x{00}\x{00}\x{01}" + ) + ) + ). + +# [End subrecurse 'dinf' atom] + + atom ('stbl', + +# [Subrecursing 'stbl' atom] + + atom ('stsd', + + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{56}jpeg". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{00}appl". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{02}\x{00}". + "\x{07}\x{80}\x{07}\x{80}\x{00}\x{48}\x{00}\x{00}". + "\x{00}\x{48}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{01}\x{0c}". + "Photo - JPEG". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{18}\x{ff}\x{ff}" + ). + + atom ('stts', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{06}\x{00}\x{00}\x{02}\x{58}" + ). + + atom ('stsc', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{01}" + ). + + atom ('stsz', + # ver # flags + "\x{00}\x{00}\x{00}\x{00}". + # standard size + "\x{00}\x{00}\x{00}\x{00}". + # number of items + "\x{00}\x{00}\x{00}\x{06}". + pack4B (length $image0). + pack4B (length $image1). + pack4B (length $image2). + pack4B (length $image3). + pack4B (length $image4). + pack4B (length $image5) + ). + + atom ('stco', + # ver # flags + "\x{00}\x{00}\x{00}\x{00}". + # number entries (6) + "\x{00}\x{00}\x{00}\x{06}". + $offset0. + $offset1. + $offset2. + $offset3. + $offset4. + $offset5 + ) + +# [End subrecurse 'stbl' atom] + + ) + +# [End subrecurse 'minf' atom] + + ) + +# [End subrecurse 'mdia' atom] + + ) + +# [End subrecurse 'trak' atom] + + ). + + atom ('udta', + atom ('ctyp', + "qtvr" + ). + atom ("\x{a9}swr", + "\x{00}\x{24}\x{00}\x{00}". + "jpeg2qtvr $VERSION" + ). + "\x{00}\x{00}\x{00}\x{00}" + ) + +#[End subrecurse 'moov' atom] + +). + +# end of instructions + +atom ('free', + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}" +). + +atom ('wide', ''); + +$mov .= + +# follows is the actual movie data + +#Atom 0x000008AA (0x001E29FC) mdat + +##"\x{00}\x{1e}\x{29}\x{fc}". "mdat". +## +##atom ('wide', ''). + +"\x{00}\x{00}\x{00}\x{00}". "mdat"; + +$offsetA = pack4B (length $mov); + +$mov .= + +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + +atom ('sean', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{00}". + + atom ('ndhd', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{02}\x{00}\x{00}". + "pano\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}" + ) +); + +$offsetB = pack4B (length $mov); + +$mov .= + +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + +atom ('sean', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{02}". + "\x{00}\x{00}\x{00}\x{00}". + + atom ('pdat', + "\x{00}\x{00}\x{00}\x{01}". + "\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}". + + # minPan + "\x{00}\x{02}\x{00}\x{00}". + # maxPan + "\x{00}\x{00}\x{00}\x{01}". + # minTilt + "\x{00}\x{00}\x{00}\x{00}". + # maxTilt + "\x{00}\x{00}\x{00}\x{00}". + # minFieldOfView + "\x{43}\x{b4}\x{00}\x{00}". + # maxFieldOfView + "\x{c2}\x{34}\x{00}\x{00}". + # defaultPan + "\x{42}\x{34}\x{00}\x{00}". + # defaultTilt + "\x{42}\x{48}\x{00}\x{00}". + # defaultFieldOfView + "\x{42}\x{b4}\x{00}\x{00}". + + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{42}\x{b4}\x{00}\x{00}\x{00}\x{00}\x{1e}\x{00}". + "\x{00}\x{00}\x{07}\x{80}\x{00}\x{04}\x{00}\x{01}". + "\x{00}\x{00}\x{1e}\x{00}\x{00}\x{00}\x{07}\x{80}". + "\x{00}\x{04}\x{00}\x{01}\x{00}\x{00}\x{00}\x{01}". + "cube\x{00}\x{00}\x{00}\x{00}" + ). + + atom ('cuvw', + "\x{00}\x{00}\x{00}\x{01}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{43}\x{b4}\x{00}\x{00}\x{c2}\x{b4}\x{00}\x{00}". + "\x{42}\x{b4}\x{00}\x{00}\x{42}\x{48}\x{00}\x{00}". + "\x{42}\x{f0}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". + "\x{00}\x{00}\x{00}\x{00}\x{42}\x{b4}\x{00}\x{00}" + ) +); + +$offset0 = pack4B (length $mov); +$mov .= $image0; + +$offset1 = pack4B (length $mov); +$mov .= $image1; + +$offset2 = pack4B (length $mov); +$mov .= $image2; + +$offset3 = pack4B (length $mov); +$mov .= $image3; + +$offset4 = pack4B (length $mov); +$mov .= $image4; + +$offset5 = pack4B (length $mov); +$mov .= $image5; + +} + +print STDOUT $mov; + +sub pack4B +{ + my $length = shift; + my $bytes = sprintf ('%.8x', $length); + $bytes =~ /(..)(..)(..)(..)/; + return chr(hex($1)). chr(hex($2)). chr(hex($3)). chr(hex($4)); +} + +sub atom +{ + my ($type, $data) = @_; + return pack4B ((length $data) + 8) . $type . $data; +} + Property changes on: trunk/Panotools-Script/bin/jpeg2qtvr ___________________________________________________________________ Name: svn:executable + * Added: trunk/Panotools-Script/bin/process-masks =================================================================== --- trunk/Panotools-Script/bin/process-masks (rev 0) +++ trunk/Panotools-Script/bin/process-masks 2006-11-20 22:08:20 UTC (rev 608) @@ -0,0 +1,64 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use File::Temp qw/tempdir/; +use File::Spec::Functions; +use File::Copy; + +=pod + +Preprocessor for enblend masks. Transfers white areas in each mask +(indicating pixels to keep) as black areas in other masks. Areas to +be blended need to be indicated as shades of grey. + +Pass mask tif files as program arguments, originals are renamed and +replaced by processed files. + +Requires ImageMagick. + +October 2006, Bruno Postle <bruno AT postle.net> +2006-10-20 mask threshold mask as well + +This software is distributed under the same terms as enblend itself. + +=cut + +my $tempdir = tempdir (CLEANUP => 1); + +my $maskdir = catfile ($tempdir, 'mask'); +my $pushdir = catfile ($tempdir, 'push'); +my $workdir = catfile ($tempdir, 'work'); + +mkdir $maskdir; +mkdir $pushdir; +mkdir $workdir; + +for my $file (@ARGV) +{ + my $maskdir_file = catfile ($maskdir, $file); + my $pushdir_file = catfile ($pushdir, $file); + my $workdir_file = catfile ($workdir, $file); + `convert -threshold 99% $file $maskdir_file`; + `convert -negate $maskdir_file $pushdir_file`; + copy ($file, $workdir_file); +} + +for my $file (@ARGV) +{ + my $tempdir_file = catfile ($tempdir, $file); + my $workdir_file = catfile ($workdir, $file); + + for my $temp (@ARGV) + { + next if ($temp eq $file); + my $pushdir_temp = catfile ($pushdir, $temp); + my $maskdir_temp = catfile ($maskdir, $temp); + `composite $pushdir_temp $workdir_file $maskdir_temp $tempdir_file`; + move ($tempdir_file, $workdir_file); + } + + move ($file, "$file.bak.tif"); + move ($workdir_file, $file); +} + Property changes on: trunk/Panotools-Script/bin/process-masks ___________________________________________________________________ Name: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2006-11-21 22:07:05
|
Revision: 610 http://svn.sourceforge.net/panotools/?rev=610&view=rev Author: brunopostle Date: 2006-11-21 14:07:01 -0800 (Tue, 21 Nov 2006) Log Message: ----------- Update erect2cubic to actually work with current version of the library Modified Paths: -------------- trunk/Panotools-Script/META.yml trunk/Panotools-Script/bin/erect2cubic Modified: trunk/Panotools-Script/META.yml =================================================================== --- trunk/Panotools-Script/META.yml 2006-11-20 22:14:32 UTC (rev 609) +++ trunk/Panotools-Script/META.yml 2006-11-21 22:07:01 UTC (rev 610) @@ -5,6 +5,8 @@ version_from: lib/Panotools/Script.pm installdirs: site requires: + Image::Magick: 5 + Math::Matrix: 0.4 distribution_type: module generated_by: ExtUtils::MakeMaker version 6.17 Modified: trunk/Panotools-Script/bin/erect2cubic =================================================================== --- trunk/Panotools-Script/bin/erect2cubic 2006-11-20 22:14:32 UTC (rev 609) +++ trunk/Panotools-Script/bin/erect2cubic 2006-11-21 22:07:01 UTC (rev 610) @@ -2,10 +2,12 @@ use strict; use warnings; - +use File::Spec; use Panotools::Script; my $erect = shift or die "usage\n $0 equirectangular.tif"; +$erect = File::Spec->rel2abs ($erect); +my $cwd = File::Spec->rel2abs (File::Spec->curdir); my ($width, $height); @@ -26,20 +28,20 @@ $scratch->{image}->[0] = new Panotools::Script::Line::Image; $scratch->{image}->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => 0, y => 0, n => "\"$erect\""); -$scratch->Stitch ('front.tif'); +$scratch->Stitch (File::Spec->catfile ($cwd, 'front.tif')); $scratch->{image}->[0]->Set (y => -90); -$scratch->Stitch ('right.tif'); +$scratch->Stitch (File::Spec->catfile ($cwd, 'right.tif')); $scratch->{image}->[0]->Set (y => -180); -$scratch->Stitch ('back.tif'); +$scratch->Stitch (File::Spec->catfile ($cwd, 'back.tif')); $scratch->{image}->[0]->Set (y => -270); -$scratch->Stitch ('left.tif'); +$scratch->Stitch (File::Spec->catfile ($cwd, 'left.tif')); $scratch->{image}->[0]->Set (y => 0, p => -90); -$scratch->Stitch ('up.tif'); +$scratch->Stitch (File::Spec->catfile ($cwd, 'up.tif')); $scratch->{image}->[0]->Set (y => 0, p => 90); -$scratch->Stitch ('down.tif'); +$scratch->Stitch (File::Spec->catfile ($cwd, 'down.tif')); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-02-08 22:13:34
|
Revision: 670 http://svn.sourceforge.net/panotools/?rev=670&view=rev Author: brunopostle Date: 2007-02-08 14:13:29 -0800 (Thu, 08 Feb 2007) Log Message: ----------- Update for first release Modified Paths: -------------- trunk/Panotools-Script/README trunk/Panotools-Script/lib/Panotools/Script.pm trunk/Panotools-Script/t/010.read-stitch.t Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-02-06 05:31:37 UTC (rev 669) +++ trunk/Panotools-Script/README 2007-02-08 22:13:29 UTC (rev 670) @@ -1,7 +1,7 @@ Panotools::Script - Panorama Tools scripting ============================================ -A perl module for reading, writing and driving Panorama Tools script files +A perl module for reading, writing and driving Panorama Tools and hugin script files http://panotools.sourceforge.net/ @@ -20,20 +20,21 @@ Dependencies ------------ -This module requires libpano12 +Math::Matrix +Image::Magick +This module requires panotools and/or hugin. + TODO ---- * z lines -* PTOptimizer can't cope with "i Va0 Vb0 ..." * More tests * pod documentation - -Scripts: - -* cyl2erect +* autopano support +* straighten +* open/save lens profiles * Delete control points * Scale project Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-02-06 05:31:37 UTC (rev 669) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-02-08 22:13:29 UTC (rev 670) @@ -35,7 +35,7 @@ use File::Temp qw/ tempfile /; use File::Spec; -our $VERSION = 0.02; +our $VERSION = 0.03; our $CLEANUP = 1; $CLEANUP = 0 if defined $ENV{DEBUG}; Modified: trunk/Panotools-Script/t/010.read-stitch.t =================================================================== --- trunk/Panotools-Script/t/010.read-stitch.t 2007-02-06 05:31:37 UTC (rev 669) +++ trunk/Panotools-Script/t/010.read-stitch.t 2007-02-08 22:13:29 UTC (rev 670) @@ -28,7 +28,7 @@ ok ($p->Write ($tempfile), "script written to $tempfile"); } -for my $stitcher ('nona', 'PTmender') +for my $stitcher ('nona') { $p->{stitcher} = $stitcher; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-03-18 13:31:48
|
Revision: 677 http://svn.sourceforge.net/panotools/?rev=677&view=rev Author: brunopostle Date: 2007-03-17 16:38:56 -0700 (Sat, 17 Mar 2007) Log Message: ----------- add erect2qtvr and bump version Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/META.yml trunk/Panotools-Script/Makefile.PL trunk/Panotools-Script/README trunk/Panotools-Script/lib/Panotools/Script.pm Added Paths: ----------- trunk/Panotools-Script/bin/erect2qtvr Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-02-18 23:48:30 UTC (rev 676) +++ trunk/Panotools-Script/Changes 2007-03-17 23:38:56 UTC (rev 677) @@ -1,5 +1,11 @@ Revision history for Panotools::Script. +0.04 + - add erect2qtvr + +0.03 + - add jpeg2qtvr + 0.02 - Add Transform() method to rotate project files - various bugfixes Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2007-02-18 23:48:30 UTC (rev 676) +++ trunk/Panotools-Script/MANIFEST 2007-03-17 23:38:56 UTC (rev 677) @@ -4,6 +4,7 @@ bin/erect2cubic bin/erect2planet bin/jpeg2qtvr +bin/erect2qtvr bin/process-masks bin/pto2tiff bin/transform-pano Modified: trunk/Panotools-Script/META.yml =================================================================== --- trunk/Panotools-Script/META.yml 2007-02-18 23:48:30 UTC (rev 676) +++ trunk/Panotools-Script/META.yml 2007-03-17 23:38:56 UTC (rev 677) @@ -1,7 +1,7 @@ # http://module-build.sourceforge.net/META-spec.html #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# name: Panotools-Script -version: 0.02 +version: 0.04 version_from: lib/Panotools/Script.pm installdirs: site requires: Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2007-02-18 23:48:30 UTC (rev 676) +++ trunk/Panotools-Script/Makefile.PL 2007-03-17 23:38:56 UTC (rev 677) @@ -3,7 +3,7 @@ # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Panotools::Script', - 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/jpeg2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano' ], + 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION 'PREREQ_PM' => {'Math::Matrix' => 0.4, 'Image::Magick' => 5.0}, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-02-18 23:48:30 UTC (rev 676) +++ trunk/Panotools-Script/README 2007-03-17 23:38:56 UTC (rev 677) @@ -23,7 +23,8 @@ Math::Matrix Image::Magick -This module requires panotools and/or hugin. +This module requires panotools and/or hugin. Some of the scripts require +ImageMagick command-line tools and enblend. TODO Added: trunk/Panotools-Script/bin/erect2qtvr =================================================================== --- trunk/Panotools-Script/bin/erect2qtvr (rev 0) +++ trunk/Panotools-Script/bin/erect2qtvr 2007-03-17 23:38:56 UTC (rev 677) @@ -0,0 +1,202 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use File::Spec; +use Panotools::Script; + +use File::Temp qw/tempdir/; + +my $opts = {}; + +my $qtvr_opts = ''; + +while (@ARGV) +{ + my ($key, $value) = split ('=', shift); + $opts->{$key} = $value; + $qtvr_opts .= $key .'='. quotemeta ($value) .' '; +} + +my $cleanup = $opts->{'--cleanup'} || 1; +my $quality = $opts->{'--quality'} || 70; +my $pitch = $opts->{'--pitch'} || 0; +my $erect = $opts->{'--erect'} or die + +"usage\n $0 --erect=mypanorama.tif + +Generates a cubic QTVR named mypanorama.mov. Input needs to be a full +360 degree equirectangular image in PNG, JPEG or TIFF format. + +Options: + + --pitch pre-rotates the entire panorama. eg. if your panorama + has the nadir in the centre set this to -90 + --quality JPEG quality for QTVR tiles, defaults to 70 + --cleanup set to '0' to keep temporary files, defaults to '1' + +A subset of jpeg2qtvr options are also accepted: + + --date date in seconds since January 1st 1970, defaults to current time + --name title of the panorama + --width preferred window width, defaults to 1024 + --height preferred window height, defaults to 768 + --pan initial pan (yaw), defaults to 0.0 degrees + --tilt initial tilt (pitch), defaults to 0.0 degrees + --fov initial vertical angle of view, defaults to 60 degrees + --min-fov minimum vertical angle of view, defaults to 10 degrees + --max-fov maximum vertical angle of view, defaults to 120 degrees"; + +$erect = File::Spec->rel2abs ($erect); +my $cwd = File::Spec->rel2abs (File::Spec->curdir); +my $tempdir = tempdir (CLEANUP => $cleanup); + +my $stub = $erect; +$stub =~ s/\.([[:alnum:]]+)$//; + +my $prefix = File::Spec->catfile ($tempdir, 'cube'); + +# get the width and height of the input image + +my ($width, $height); + +{ + use Image::Magick; + my $image = new Image::Magick; + $image->Read ($erect); + ($width, $height) = $image->Get ('width', 'height'); +} + +# calculate an 'ideal' cubeface size + +my $face = 8 * int (int ($width / 3.1416) / 8); + +# generate JPEG cubefaces + +my $scratch = new Panotools::Script; +$scratch->{panorama}->Set (v => 90, f => 0, u => 0, w => $face, h => $face, n => '"TIFF"'); + +$scratch->{stitcher} = 'nona'; + +$scratch->{image}->[0] = new Panotools::Script::Line::Image; + +$scratch->{image}->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => $pitch, y => 0, n => "\"$erect\""); + +$scratch->Stitch ("$prefix-0.tif"); + +$scratch->Transform (0, 0, -90); +$scratch->Stitch ("$prefix-1.tif"); + +$scratch->Transform (0, 0, -90); +$scratch->Stitch ("$prefix-2.tif"); + +$scratch->Transform (0, 0, -90); +$scratch->Stitch ("$prefix-3.tif"); + +$scratch->Transform (0, 0, -90); +$scratch->Transform (0, -90, 0); +$scratch->Stitch ("$prefix-4.tif"); + +$scratch->Transform (0, 180, 0); +$scratch->Stitch ("$prefix-5.tif"); + +for my $index (0 .. 5) +{ + `convert -quality $quality $prefix-$index.tif $prefix-$index.jpg`; +} + +# fisheye cubefaces for preview track + +$scratch->{panorama}->Set (v => 100, f => 3); + +$scratch->{image}->[0]->Set (r => 0, p => $pitch, y => 0); +$scratch->Stitch ("$prefix-preview-0.tif"); + +$scratch->Transform (0, 0, -90); +$scratch->Stitch ("$prefix-preview-1.tif"); + +$scratch->Transform (0, 0, -90); +$scratch->Stitch ("$prefix-preview-2.tif"); + +$scratch->Transform (0, 0, -90); +$scratch->Stitch ("$prefix-preview-3.tif"); + +$scratch->Transform (0, 0, -90); +$scratch->Transform (0, -90, 0); +$scratch->Stitch ("$prefix-preview-4.tif"); + +$scratch->Transform (0, 180, 0); +$scratch->Stitch ("$prefix-preview-5.tif"); + +$scratch->{panorama}->Set (v => 90, f => 0, w => 256, h => 256, n => '"JPEG"'); + +for my $index (0 .. 5) +{ + # generate JPEG preview cubefaces + `mogrify -geometry 32x32 $prefix-preview-$index.tif`; + $scratch->{image}->[0]->Set (w => 32, h => 32, v => 100, f => 3, r => 0, p => 0, y => 0, n => "\"$prefix-preview-$index.tif\""); + $scratch->Stitch ("$prefix-preview-$index.jpg"); + `mogrify -quality 80 $prefix-preview-$index.jpg`; +} + +print "Tempdir: $tempdir\n" unless $cleanup; + +`jpeg2qtvr $qtvr_opts --prefix=$prefix- --preview=$prefix-preview- --outfile=$stub.mov`; + +__END__ + +=head1 NAME + +erect2qtvr - Assemble a Quicktime QTVR file from an equirectangular image + +=head1 Synopsis + + erect2qtvr --erect=mypanorama.tif + +=head1 DESCRIPTION + +This tool generates a cubic QTVR from a single equirectangular image, see +L<http://wiki.panotools.org/Equirectangular_Projection> for more details +of the input file format. + +A QTVR file is created with the same path as the input image except with a .mov +extension. + +=head1 Calling syntax + + erect2qtvr [options] --erect=mypanorama.tif + +Options: + + --pitch pre-rotates the entire panorama. eg. if your panorama + has the nadir in the centre set this to -90 + --quality JPEG quality for QTVR tiles, defaults to 70 + --cleanup set to '0' to keep temporary files, defaults to '1' + +A subset of jpeg2qtvr options are also accepted: + + --date date in seconds since January 1st 1970, defaults to current time + --name title of the panorama + --width preferred window width, defaults to 1024 + --height preferred window height, defaults to 768 + --pan initial pan (yaw), defaults to 0.0 degrees + --tilt initial tilt (pitch), defaults to 0.0 degrees + --fov initial vertical angle of view, defaults to 60 degrees + --min-fov minimum vertical angle of view, defaults to 10 degrees + --max-fov maximum vertical angle of view, defaults to 120 degrees"; + +=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<perl>, L<Panotools::Script> + +=head1 Author + +March 2007, Bruno Postle <bruno AT postle.net> + Property changes on: trunk/Panotools-Script/bin/erect2qtvr ___________________________________________________________________ Name: svn:executable + * Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-02-18 23:48:30 UTC (rev 676) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-03-17 23:38:56 UTC (rev 677) @@ -35,7 +35,7 @@ use File::Temp qw/ tempfile /; use File::Spec; -our $VERSION = 0.03; +our $VERSION = 0.04; our $CLEANUP = 1; $CLEANUP = 0 if defined $ENV{DEBUG}; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-03-22 10:08:56
|
Revision: 678 http://svn.sourceforge.net/panotools/?rev=678&view=rev Author: brunopostle Date: 2007-03-22 03:08:52 -0700 (Thu, 22 Mar 2007) Log Message: ----------- change order of nona parameters for BSD (Milan Knizek) bump version for 0.05 release Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/META.yml trunk/Panotools-Script/bin/jpeg2qtvr trunk/Panotools-Script/lib/Panotools/Script.pm Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-03-17 23:38:56 UTC (rev 677) +++ trunk/Panotools-Script/Changes 2007-03-22 10:08:52 UTC (rev 678) @@ -1,5 +1,8 @@ Revision history for Panotools::Script. +0.05 + - change order of nona parameters for BSD (Milan Knizek) + 0.04 - add erect2qtvr Modified: trunk/Panotools-Script/META.yml =================================================================== --- trunk/Panotools-Script/META.yml 2007-03-17 23:38:56 UTC (rev 677) +++ trunk/Panotools-Script/META.yml 2007-03-22 10:08:52 UTC (rev 678) @@ -1,7 +1,7 @@ # http://module-build.sourceforge.net/META-spec.html #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# name: Panotools-Script -version: 0.04 +version: 0.05 version_from: lib/Panotools/Script.pm installdirs: site requires: Modified: trunk/Panotools-Script/bin/jpeg2qtvr =================================================================== --- trunk/Panotools-Script/bin/jpeg2qtvr 2007-03-17 23:38:56 UTC (rev 677) +++ trunk/Panotools-Script/bin/jpeg2qtvr 2007-03-22 10:08:52 UTC (rev 678) @@ -22,7 +22,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -our $VERSION = 0.04; +our $VERSION = 0.05; # http://wiki.multimedia.cx/index.php?title=Apple_QuickTime # http://developer.apple.com/documentation/QuickTime/InsideQT_QTVR/index.html Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-03-17 23:38:56 UTC (rev 677) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-03-22 10:08:52 UTC (rev 678) @@ -35,7 +35,7 @@ use File::Temp qw/ tempfile /; use File::Spec; -our $VERSION = 0.04; +our $VERSION = 0.05; our $CLEANUP = 1; $CLEANUP = 0 if defined $ENV{DEBUG}; @@ -182,7 +182,8 @@ my $self = shift; my ($fh, $tempfile) = tempfile (SUFFIX => '.txt', UNLINK => $CLEANUP); $self->Write ($tempfile); - `$self->{optimiser} $tempfile`; + my @args = ($self->{optimiser}, $tempfile); + system (@args); return 0 unless ($? == 0); my $try = new Panotools::Script; $try->Read ($tempfile) || return 0; @@ -285,7 +286,8 @@ $self->Write ($tempfile, $vector); my $cwd = File::Spec->curdir; chdir (File::Spec->tmpdir); - `$self->{stitcher} $tempfile -o $outfile`; + my @args = ($self->{stitcher}, '-o', $outfile, $tempfile); + system (@args); chdir ($cwd); return 0 unless ($? == 0); return 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-03-26 21:42:02
|
Revision: 679 http://svn.sourceforge.net/panotools/?rev=679&view=rev Author: brunopostle Date: 2007-03-26 14:42:01 -0700 (Mon, 26 Mar 2007) Log Message: ----------- Make nona default stitcher Modified Paths: -------------- trunk/Panotools-Script/README trunk/Panotools-Script/lib/Panotools/Script.pm Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-03-22 10:08:52 UTC (rev 678) +++ trunk/Panotools-Script/README 2007-03-26 21:42:01 UTC (rev 679) @@ -23,8 +23,8 @@ Math::Matrix Image::Magick -This module requires panotools and/or hugin. Some of the scripts require -ImageMagick command-line tools and enblend. +This module requires 'PTOptimizer' from pano12 and 'nona' from hugin. Some of +the scripts require 'enblend' and ImageMagick command-line tools. TODO Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-03-22 10:08:52 UTC (rev 678) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-03-26 21:42:01 UTC (rev 679) @@ -65,8 +65,8 @@ $self->{output} = []; $self->{control} = []; $self->{controlmorph} = []; - $self->{stitcher} = 'PTmender'; # nona, PTmender, PTStitcher - $self->{optimiser} = 'PTOptimizer'; # PTOptimizer, autooptimiser + $self->{stitcher} = 'nona'; # nona, PTmender, PTStitcher, Tmender + $self->{optimiser} = 'PTOptimizer'; # PToptimizer PTOptimizer, autooptimiser $self->{basedir} = File::Spec->rel2abs (File::Spec->curdir); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-03-26 23:05:11
|
Revision: 680 http://svn.sourceforge.net/panotools/?rev=680&view=rev Author: brunopostle Date: 2007-03-26 16:05:11 -0700 (Mon, 26 Mar 2007) Log Message: ----------- Use same jpeg quality for preview tracks as main track Modified Paths: -------------- trunk/Panotools-Script/README trunk/Panotools-Script/bin/erect2qtvr Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-03-26 21:42:01 UTC (rev 679) +++ trunk/Panotools-Script/README 2007-03-26 23:05:11 UTC (rev 680) @@ -38,6 +38,7 @@ * open/save lens profiles * Delete control points * Scale project +* jpeg2qtvr: calculate window size from fov and cubeface size Copyright and licence Modified: trunk/Panotools-Script/bin/erect2qtvr =================================================================== --- trunk/Panotools-Script/bin/erect2qtvr 2007-03-26 21:42:01 UTC (rev 679) +++ trunk/Panotools-Script/bin/erect2qtvr 2007-03-26 23:05:11 UTC (rev 680) @@ -136,7 +136,7 @@ `mogrify -geometry 32x32 $prefix-preview-$index.tif`; $scratch->{image}->[0]->Set (w => 32, h => 32, v => 100, f => 3, r => 0, p => 0, y => 0, n => "\"$prefix-preview-$index.tif\""); $scratch->Stitch ("$prefix-preview-$index.jpg"); - `mogrify -quality 80 $prefix-preview-$index.jpg`; + `mogrify -quality $quality $prefix-preview-$index.jpg`; } print "Tempdir: $tempdir\n" unless $cleanup; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-04-04 21:11:01
|
Revision: 681 http://svn.sourceforge.net/panotools/?rev=681&view=rev Author: brunopostle Date: 2007-04-04 14:11:02 -0700 (Wed, 04 Apr 2007) Log Message: ----------- typos and TODO Modified Paths: -------------- trunk/Panotools-Script/README trunk/Panotools-Script/bin/cubic2erect Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-03-26 23:05:11 UTC (rev 680) +++ trunk/Panotools-Script/README 2007-04-04 21:11:02 UTC (rev 681) @@ -37,7 +37,14 @@ * straighten * open/save lens profiles * Delete control points +* error distance * Scale project +* nona-mask tool +* $STITCHER environment +* split enblend step from pto2tiff +* pto2tiff stitches one file at a time +* jpeg2qtvr calculate window size from fov +* erect2qtvr --yaw value * jpeg2qtvr: calculate window size from fov and cubeface size Modified: trunk/Panotools-Script/bin/cubic2erect =================================================================== --- trunk/Panotools-Script/bin/cubic2erect 2007-03-26 23:05:11 UTC (rev 680) +++ trunk/Panotools-Script/bin/cubic2erect 2007-04-04 21:11:02 UTC (rev 681) @@ -7,7 +7,7 @@ use File::Spec; my @images = @ARGV; -die "usage\n $0 front.tif right.tif back.tif left.tif up.tif down.tif erectangular.tif\n" unless scalar @images == 7; +die "usage\n $0 front.tif right.tif back.tif left.tif up.tif down.tif equirectangular.tif\n" unless scalar @images == 7; my $out = File::Spec->rel2abs ($ARGV[6]); @@ -51,7 +51,7 @@ =head1 Synopsis - cubic2erect front.tif right.tif back.tif left.tif up.tif down.tif erectangular.tif + cubic2erect front.tif right.tif back.tif left.tif up.tif down.tif equirectangular.tif =head1 DESCRIPTION This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-04-13 23:06:43
|
Revision: 689 http://svn.sourceforge.net/panotools/?rev=689&view=rev Author: brunopostle Date: 2007-04-13 16:06:34 -0700 (Fri, 13 Apr 2007) Log Message: ----------- Fix some bugs in nona-mask, seems to work ok Modified Paths: -------------- trunk/Panotools-Script/Makefile.PL trunk/Panotools-Script/README trunk/Panotools-Script/bin/nona-mask Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2007-04-13 21:32:47 UTC (rev 688) +++ trunk/Panotools-Script/Makefile.PL 2007-04-13 23:06:34 UTC (rev 689) @@ -3,7 +3,7 @@ # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Panotools::Script', - 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano' ], + 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano', 'bin/nona-mask' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION 'PREREQ_PM' => {'Math::Matrix' => 0.4, 'Image::Magick' => 5.0}, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-04-13 21:32:47 UTC (rev 688) +++ trunk/Panotools-Script/README 2007-04-13 23:06:34 UTC (rev 689) @@ -39,13 +39,10 @@ * Delete control points * error distance * Scale project -* nona-mask tool -* $STITCHER environment * split enblend step from pto2tiff * pto2tiff stitches one file at a time -* jpeg2qtvr calculate window size from fov * erect2qtvr --yaw value -* jpeg2qtvr: calculate window size from fov and cubeface size +* jpeg2qtvr calculate window size from fov and cubeface size Copyright and licence Modified: trunk/Panotools-Script/bin/nona-mask =================================================================== --- trunk/Panotools-Script/bin/nona-mask 2007-04-13 21:32:47 UTC (rev 688) +++ trunk/Panotools-Script/bin/nona-mask 2007-04-13 23:06:34 UTC (rev 689) @@ -19,14 +19,16 @@ my $arg = shift @ARGV; if ($arg =~ /-o/) { - $outfile = shift @ARGV; - $script = shift @ARGV; + $outfile = File::Spec->rel2abs (shift @ARGV); + $script = File::Spec->rel2abs (shift @ARGV); next; } if ($arg =~ /\.[[:alnum:]]+$/i) {push @files, $arg} else {push @parameters, $arg} } +die "Usage: $0 [options] -o output project_file (image files)" unless ($outfile && $script); + my $pano = new Panotools::Script; $pano->Read ($script); @@ -45,8 +47,14 @@ my $tempfile = File::Spec->catfile ($tempdir, "$index.tif"); my $name = $image->{n}; $name =~ s/(^"|"$)//g; - my $mask = $name; - $mask =~ s/\.[[:alnum:]]+$/_mask.tif/i; + my $prefix = $name; + $prefix =~ s/\.[[:alnum:]]+$//i; + + # prefer TIF or SVG versions if they exist + $name = "$prefix.tif" if (-e "$prefix.tif"); + $name = "$prefix.svg" if (-e "$prefix.svg"); + + my $mask = $prefix . '_mask.tif'; if (-e $mask) { print STDERR "Using mask $mask\n"; @@ -59,13 +67,14 @@ system ('convert', '-background', 'transparent', $name, $tempfile); $image->{n} = "\"$tempfile\""; } - $name =~ s/\.jpg$/\.tif/i; - $image->{n} = "\"$name\"" if -e $name; - $name =~ s/\.jpg$/\.svg/i; - $image->{n} = "\"$name\"" if -e $name; + else + { + $image->{n} = "\"$name\""; + } + $index++; } -$pano->Stitch ($outfile); +$pano->Stitch ($outfile, @parameters); __END__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-04-13 23:13:21
|
Revision: 690 http://svn.sourceforge.net/panotools/?rev=690&view=rev Author: brunopostle Date: 2007-04-13 16:13:21 -0700 (Fri, 13 Apr 2007) Log Message: ----------- housekeeping Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/META.yml trunk/Panotools-Script/lib/Panotools/Script.pm Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-04-13 23:06:34 UTC (rev 689) +++ trunk/Panotools-Script/Changes 2007-04-13 23:13:21 UTC (rev 690) @@ -1,5 +1,10 @@ Revision history for Panotools::Script. +0.06 + - add nona-mask + - allow setting STITCHER and OPTIMISER environment + - pass options to Stitch() + 0.05 - change order of nona parameters for BSD (Milan Knizek) Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2007-04-13 23:06:34 UTC (rev 689) +++ trunk/Panotools-Script/MANIFEST 2007-04-13 23:13:21 UTC (rev 690) @@ -8,6 +8,7 @@ bin/process-masks bin/pto2tiff bin/transform-pano +bin/nona-mask Changes lib/Panotools/Matrix.pm lib/Panotools/Script.pm Modified: trunk/Panotools-Script/META.yml =================================================================== --- trunk/Panotools-Script/META.yml 2007-04-13 23:06:34 UTC (rev 689) +++ trunk/Panotools-Script/META.yml 2007-04-13 23:13:21 UTC (rev 690) @@ -1,7 +1,7 @@ # http://module-build.sourceforge.net/META-spec.html #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# name: Panotools-Script -version: 0.05 +version: 0.06 version_from: lib/Panotools/Script.pm installdirs: site requires: Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-04-13 23:06:34 UTC (rev 689) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-04-13 23:13:21 UTC (rev 690) @@ -35,7 +35,7 @@ use File::Temp qw/ tempfile /; use File::Spec; -our $VERSION = 0.05; +our $VERSION = 0.06; our $CLEANUP = 1; $CLEANUP = 0 if defined $ENV{DEBUG}; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-04-15 21:32:37
|
Revision: 692 http://svn.sourceforge.net/panotools/?rev=692&view=rev Author: brunopostle Date: 2007-04-15 14:32:39 -0700 (Sun, 15 Apr 2007) Log Message: ----------- prefer svg to tiff with enblend-mask Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/bin/enblend-mask Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-04-15 21:31:53 UTC (rev 691) +++ trunk/Panotools-Script/Changes 2007-04-15 21:32:39 UTC (rev 692) @@ -1,6 +1,8 @@ Revision history for Panotools::Script. 0.06 + - blend any input filetypes with enblend-mask + - prefer svg to tiff with enblend-mask - add nona-mask - allow setting STITCHER and OPTIMISER environment - pass options to Stitch() Modified: trunk/Panotools-Script/bin/enblend-mask =================================================================== --- trunk/Panotools-Script/bin/enblend-mask 2007-04-15 21:31:53 UTC (rev 691) +++ trunk/Panotools-Script/bin/enblend-mask 2007-04-15 21:32:39 UTC (rev 692) @@ -29,6 +29,9 @@ my $tempfile = File::Spec->catfile ($tempdir, "$index.tif"); my $mask = $file; $mask =~ s/\.[[:alnum:]]+$/_mask.tif/i; + my $svg = $file; + $svg =~ s/\.[[:alnum:]]+$/.svg/i; + $file = $svg if (-e $svg); if (-e $mask) { print STDERR "Using mask $mask\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-04-30 20:43:13
|
Revision: 699 http://svn.sourceforge.net/panotools/?rev=699&view=rev Author: brunopostle Date: 2007-04-30 13:43:15 -0700 (Mon, 30 Apr 2007) Log Message: ----------- Clone() and Preview() methods. Can now be used in interactive mode via psh Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/Makefile.PL trunk/Panotools-Script/README trunk/Panotools-Script/bin/erect2planet trunk/Panotools-Script/lib/Panotools/Script.pm Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-04-24 01:25:42 UTC (rev 698) +++ trunk/Panotools-Script/Changes 2007-04-30 20:43:15 UTC (rev 699) @@ -6,6 +6,7 @@ - add nona-mask - allow setting STITCHER and OPTIMISER environment - pass options to Stitch() + - New Clone() and Preview() methods 0.05 - change order of nona parameters for BSD (Milan Knizek) Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2007-04-24 01:25:42 UTC (rev 698) +++ trunk/Panotools-Script/Makefile.PL 2007-04-30 20:43:15 UTC (rev 699) @@ -5,7 +5,7 @@ 'NAME' => 'Panotools::Script', 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano', 'bin/nona-mask' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION - 'PREREQ_PM' => {'Math::Matrix' => 0.4, 'Image::Magick' => 5.0}, + 'PREREQ_PM' => {'Math::Matrix' => 0.4, 'Image::Magick' => 5.0, 'Storable' => 2.0}, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 (ABSTRACT_FROM => 'lib/Panotools/Script.pm', # retrieve abstract from module AUTHOR => 'Bruno Postle <br...@po...>') : ()), Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-04-24 01:25:42 UTC (rev 698) +++ trunk/Panotools-Script/README 2007-04-30 20:43:15 UTC (rev 699) @@ -43,6 +43,9 @@ * pto2tiff stitches one file at a time * erect2qtvr --yaw value * jpeg2qtvr calculate window size from fov and cubeface size +* new response curve parameters +* fix OS X bug with paths +* remove non-optimisable hugin variables for PTOptimizer Copyright and licence Modified: trunk/Panotools-Script/bin/erect2planet =================================================================== --- trunk/Panotools-Script/bin/erect2planet 2007-04-24 01:25:42 UTC (rev 698) +++ trunk/Panotools-Script/bin/erect2planet 2007-04-30 20:43:15 UTC (rev 699) @@ -8,6 +8,8 @@ my $erect = shift or die "usage\n $0 equirectangular.tif"; $erect = File::Spec->rel2abs ($erect); +# FIXME should accept transform parameters + my $sgraphic = $erect; $sgraphic =~ s/\.([[:alnum:]]+)$/-sgraphic/; Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-04-24 01:25:42 UTC (rev 698) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-04-30 20:43:15 UTC (rev 699) @@ -35,6 +35,8 @@ use File::Temp qw/ tempfile /; use File::Spec; +use Storable qw/ dclone /; + our $VERSION = 0.06; our $CLEANUP = 1; @@ -171,6 +173,41 @@ =pod +Clone a script object + + $clone = $p->Clone; + +=cut + +sub Clone +{ + my $self = shift; + dclone ($self); +} + +=pod + +Preview a project (requires ImageMagick) + + $p->Preview; + +=cut + +sub Preview +{ + my $self = shift; + my ($fh, $tempfile) = tempfile (SUFFIX => '.jpg', UNLINK => $CLEANUP); + my $aspect = $self->{panorama}->{w} / $self->{panorama}->{h}; + my $clone = $self->Clone; + my $height = sqrt (40000 / $aspect); + my $width = $aspect * $height; + $clone->{panorama}->Set (w => int ($width), h => int ($height), n => '"JPEG"'); + $clone->Stitch ($tempfile); + system ('display', '-sample', '200%', $tempfile); +} + +=pod + Optimise image parameters in a project: $p->Optimise; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-04-30 21:32:07
|
Revision: 700 http://svn.sourceforge.net/panotools/?rev=700&view=rev Author: brunopostle Date: 2007-04-30 14:32:07 -0700 (Mon, 30 Apr 2007) Log Message: ----------- New accessor methods: Mode(), Panorama(), Variable(), Image(), Output(), Control(), ControlMorph() Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/bin/cubic2erect trunk/Panotools-Script/bin/erect2cubic trunk/Panotools-Script/bin/erect2planet trunk/Panotools-Script/bin/erect2qtvr trunk/Panotools-Script/bin/nona-mask trunk/Panotools-Script/bin/pto2tiff trunk/Panotools-Script/lib/Panotools/Script.pm trunk/Panotools-Script/t/010.read-stitch.t trunk/Panotools-Script/t/012.read-pto.t trunk/Panotools-Script/t/020.create-script.t trunk/Panotools-Script/t/021.morph.t Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/Changes 2007-04-30 21:32:07 UTC (rev 700) @@ -7,6 +7,7 @@ - allow setting STITCHER and OPTIMISER environment - pass options to Stitch() - New Clone() and Preview() methods + - New accessor methods: Mode(), Panorama(), Variable(), Image(), Output(), Control(), ControlMorph() 0.05 - change order of nona parameters for BSD (Milan Knizek) Modified: trunk/Panotools-Script/bin/cubic2erect =================================================================== --- trunk/Panotools-Script/bin/cubic2erect 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/bin/cubic2erect 2007-04-30 21:32:07 UTC (rev 700) @@ -21,25 +21,25 @@ my $pano = new Panotools::Script; -$pano->{panorama}->Set (v => 360, f => 2, u => 0, w => 4000, h => 2000, n => '"TIF"'); +$pano->Panorama->Set (v => 360, f => 2, u => 0, w => 4000, h => 2000, n => '"TIF"'); -$pano->{image}->[0] = new Panotools::Script::Line::Image; -$pano->{image}->[0]->Set (v => 90, r => 0, p => 0, y => 0, n => "\"$images[0]\""); +$pano->Image->[0] = new Panotools::Script::Line::Image; +$pano->Image->[0]->Set (v => 90, r => 0, p => 0, y => 0, n => "\"$images[0]\""); -$pano->{image}->[1] = new Panotools::Script::Line::Image; -$pano->{image}->[1]->Set (v => 90, r => 0, p => 0, y => 90, n => "\"$images[1]\""); +$pano->Image->[1] = new Panotools::Script::Line::Image; +$pano->Image->[1]->Set (v => 90, r => 0, p => 0, y => 90, n => "\"$images[1]\""); -$pano->{image}->[2] = new Panotools::Script::Line::Image; -$pano->{image}->[2]->Set (v => 90, r => 0, p => 0, y => 180, n => "\"$images[2]\""); +$pano->Image->[2] = new Panotools::Script::Line::Image; +$pano->Image->[2]->Set (v => 90, r => 0, p => 0, y => 180, n => "\"$images[2]\""); -$pano->{image}->[3] = new Panotools::Script::Line::Image; -$pano->{image}->[3]->Set (v => 90, r => 0, p => 0, y => 270, n => "\"$images[3]\""); +$pano->Image->[3] = new Panotools::Script::Line::Image; +$pano->Image->[3]->Set (v => 90, r => 0, p => 0, y => 270, n => "\"$images[3]\""); -$pano->{image}->[4] = new Panotools::Script::Line::Image; -$pano->{image}->[4]->Set (v => 90, r => 0, p => 90, y => 0, n => "\"$images[4]\""); +$pano->Image->[4] = new Panotools::Script::Line::Image; +$pano->Image->[4]->Set (v => 90, r => 0, p => 90, y => 0, n => "\"$images[4]\""); -$pano->{image}->[5] = new Panotools::Script::Line::Image; -$pano->{image}->[5]->Set (v => 90, r => 0, p => -90, y => 0, n => "\"$images[5]\""); +$pano->Image->[5] = new Panotools::Script::Line::Image; +$pano->Image->[5]->Set (v => 90, r => 0, p => -90, y => 0, n => "\"$images[5]\""); $pano->Stitch ($out); Modified: trunk/Panotools-Script/bin/erect2cubic =================================================================== --- trunk/Panotools-Script/bin/erect2cubic 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/bin/erect2cubic 2007-04-30 21:32:07 UTC (rev 700) @@ -21,13 +21,13 @@ my $face = int ($width / 3.1418); my $scratch = new Panotools::Script; -$scratch->{panorama}->Set (v => 90, f => 0, u => 0, w => $face, h => $face, n => '"TIFF"'); +$scratch->Panorama->Set (v => 90, f => 0, u => 0, w => $face, h => $face, n => '"TIFF"'); $scratch->{stitcher} = 'nona'; -$scratch->{image}->[0] = new Panotools::Script::Line::Image; +$scratch->Image->[0] = new Panotools::Script::Line::Image; -$scratch->{image}->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => 0, y => 0, n => "\"$erect\""); +$scratch->Image->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => 0, y => 0, n => "\"$erect\""); $scratch->Stitch (File::Spec->catfile ($cwd, 'front.tif')); $scratch->Transform (0, 0, -90); Modified: trunk/Panotools-Script/bin/erect2planet =================================================================== --- trunk/Panotools-Script/bin/erect2planet 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/bin/erect2planet 2007-04-30 21:32:07 UTC (rev 700) @@ -26,13 +26,13 @@ my $face = $width; my $stereographic = new Panotools::Script; -$stereographic->{panorama}->Set (v => 270, f => 4, u => 0, w => $face, h => $face, n => '"TIFF"'); +$stereographic->Panorama->Set (v => 270, f => 4, u => 0, w => $face, h => $face, n => '"TIFF"'); $stereographic->{stitcher} = 'nona'; -$stereographic->{image}->[0] = new Panotools::Script::Line::Image; +$stereographic->Image->[0] = new Panotools::Script::Line::Image; -$stereographic->{image}->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => 0, y => 0, n => "\"$erect\""); +$stereographic->Image->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => 0, y => 0, n => "\"$erect\""); $stereographic->Stitch ($sgraphic); __END__ Modified: trunk/Panotools-Script/bin/erect2qtvr =================================================================== --- trunk/Panotools-Script/bin/erect2qtvr 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/bin/erect2qtvr 2007-04-30 21:32:07 UTC (rev 700) @@ -74,13 +74,13 @@ # generate JPEG cubefaces my $scratch = new Panotools::Script; -$scratch->{panorama}->Set (v => 90, f => 0, u => 0, w => $face, h => $face, n => '"TIFF"'); +$scratch->Panorama->Set (v => 90, f => 0, u => 0, w => $face, h => $face, n => '"TIFF"'); $scratch->{stitcher} = 'nona'; -$scratch->{image}->[0] = new Panotools::Script::Line::Image; +$scratch->Image->[0] = new Panotools::Script::Line::Image; -$scratch->{image}->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => $pitch, y => 0, n => "\"$erect\""); +$scratch->Image->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => $pitch, y => 0, n => "\"$erect\""); $scratch->Stitch ("$prefix-0.tif"); @@ -107,9 +107,9 @@ # fisheye cubefaces for preview track -$scratch->{panorama}->Set (v => 100, f => 3); +$scratch->Panorama->Set (v => 100, f => 3); -$scratch->{image}->[0]->Set (r => 0, p => $pitch, y => 0); +$scratch->Image->[0]->Set (r => 0, p => $pitch, y => 0); $scratch->Stitch ("$prefix-preview-0.tif"); $scratch->Transform (0, 0, -90); @@ -128,13 +128,13 @@ $scratch->Transform (0, 180, 0); $scratch->Stitch ("$prefix-preview-5.tif"); -$scratch->{panorama}->Set (v => 90, f => 0, w => 256, h => 256, n => '"JPEG"'); +$scratch->Panorama->Set (v => 90, f => 0, w => 256, h => 256, n => '"JPEG"'); for my $index (0 .. 5) { # generate JPEG preview cubefaces system ('mogrify', '-geometry', '32x32', "$prefix-preview-$index.tif"); - $scratch->{image}->[0]->Set (w => 32, h => 32, v => 100, f => 3, r => 0, p => 0, y => 0, n => "\"$prefix-preview-$index.tif\""); + $scratch->Image->[0]->Set (w => 32, h => 32, v => 100, f => 3, r => 0, p => 0, y => 0, n => "\"$prefix-preview-$index.tif\""); $scratch->Stitch ("$prefix-preview-$index.jpg"); system ('mogrify', '-quality', $quality, "$prefix-preview-$index.jpg"); } Modified: trunk/Panotools-Script/bin/nona-mask =================================================================== --- trunk/Panotools-Script/bin/nona-mask 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/bin/nona-mask 2007-04-30 21:32:07 UTC (rev 700) @@ -38,11 +38,11 @@ for my $file (@files) { - $pano->{image}->[$index]->{n} = "\"$file\""; + $pano->Image->[$index]->{n} = "\"$file\""; $index++; } -for my $image (@{$pano->{image}}) +for my $image (@{$pano->Image}) { my $tempfile = File::Spec->catfile ($tempdir, "$index.tif"); my $name = $image->{n}; Modified: trunk/Panotools-Script/bin/pto2tiff =================================================================== --- trunk/Panotools-Script/bin/pto2tiff 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/bin/pto2tiff 2007-04-30 21:32:07 UTC (rev 700) @@ -17,11 +17,11 @@ my $p = new Panotools::Script; $p->{stitcher} = 'nona-mask'; $p->Read ($pto); - $p->{panorama}->Set (n => '"TIFF_m r:CROP c:DEFLATE"'); + $p->Panorama->Set (n => '"TIFF_m r:CROP c:DEFLATE"'); $p->Stitch ($stub .'_'); my $args = '-a -l 29'; - $args .= ' -w' if $p->{panorama}->{v} == 360; + $args .= ' -w' if $p->Panorama->{v} == 360; `enblend-mask $args -o $stub.tif $stub\_????.tif`; `convert $stub.tif $stub.jpg`; Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-04-30 21:32:07 UTC (rev 700) @@ -93,32 +93,32 @@ for my $line (@raw) { $line =~ s/(\r|\n)//g; - $self->{mode}->Parse ($line) if ($line =~ /^m /); - $self->{panorama}->Parse ($line) if ($line =~ /^p /); - $self->{variable}->Parse ($line) if ($line =~ /^v /); + $self->Mode->Parse ($line) if ($line =~ /^m /); + $self->Panorama->Parse ($line) if ($line =~ /^p /); + $self->Variable->Parse ($line) if ($line =~ /^v /); if ($line =~ /^i /) { my $image = new Panotools::Script::Line::Image; $image->Parse ($line); - push @{$self->{image}}, $image; + push @{$self->Image}, $image; } if ($line =~ /^o /) { my $output = new Panotools::Script::Line::Output; $output->Parse ($line); - push @{$self->{output}}, $output; + push @{$self->Output}, $output; } if ($line =~ /^c /) { my $control = new Panotools::Script::Line::Control; $control->Parse ($line); - push @{$self->{control}}, $control; + push @{$self->Control}, $control; } if ($line =~ /^C /) { my $controlmorph = new Panotools::Script::Line::ControlMorph; $controlmorph->Parse ($line); - push @{$self->{controlmorph}}, $controlmorph; + push @{$self->ControlMorph}, $controlmorph; } } $self->Output2Image; @@ -144,27 +144,27 @@ my $vector = shift || ''; open FILE, ">", $path or die "cannot write-open $path"; print FILE "# Created by ". (ref $self) ." $VERSION\n\n"; - print FILE $self->{panorama}->Assemble; - print FILE $self->{mode}->Assemble; + print FILE $self->Panorama->Assemble; + print FILE $self->Mode->Assemble; print FILE "\n# Image lines\n"; - for my $image (@{$self->{image}}) + for my $image (@{$self->Image}) { print FILE $image->Assemble ($vector); } print FILE "\n# Variable lines\n"; - print FILE $self->{variable}->Assemble; + print FILE $self->Variable->Assemble; print FILE "\n# Control point lines\n"; - for my $control (@{$self->{control}}) + for my $control (@{$self->Control}) { print FILE $control->Assemble; } - for my $controlmorph (@{$self->{controlmorph}}) + for my $controlmorph (@{$self->ControlMorph}) { print FILE $controlmorph->Assemble; } print FILE "\n*\n"; print FILE "\n# Output image lines\n"; - for my $output (@{$self->{output}}) + for my $output (@{$self->Output}) { print FILE $output->Assemble ($vector); } @@ -197,17 +197,78 @@ { my $self = shift; my ($fh, $tempfile) = tempfile (SUFFIX => '.jpg', UNLINK => $CLEANUP); - my $aspect = $self->{panorama}->{w} / $self->{panorama}->{h}; + my $aspect = $self->Panorama->{w} / $self->Panorama->{h}; my $clone = $self->Clone; my $height = sqrt (40000 / $aspect); my $width = $aspect * $height; - $clone->{panorama}->Set (w => int ($width), h => int ($height), n => '"JPEG"'); + $clone->Panorama->Set (w => int ($width), h => int ($height), n => '"JPEG"'); $clone->Stitch ($tempfile); system ('display', '-sample', '200%', $tempfile); } =pod +Access various sections of the scriptfile: + + $p->Mode; # a L<Panotools::Script::Line::Mode> object + $p->Panorama; # a L<Panotools::Script::Line::Panorama> object + $p->Variable; # a L<Panotools::Script::Line::Variable> object + +=cut + +sub Mode +{ + my $self = shift; + $self->{mode}; +} + +sub Panorama +{ + my $self = shift; + $self->{panorama}; +} + +sub Variable +{ + my $self = shift; + $self->{variable}; +} + +=pod + + $p->Image; # an array of L<Panotools::Script::Line::Image> objects + $p->Output; # an array of L<Panotools::Script::Line::Output> objects + $p->Control; # an array of L<Panotools::Script::Line::Control> objects + $p->ControlMorph; # an array of L<Panotools::Script::Line::ControlMorph> objects + +=cut + +sub Image +{ + my $self = shift; + $self->{image}; +} + +sub Output +{ + my $self = shift; + $self->{output}; +} + +sub Control +{ + my $self = shift; + $self->{control}; +} + +sub ControlMorph +{ + my $self = shift; + $self->{controlmorph}; +} + +=pod + Optimise image parameters in a project: $p->Optimise; @@ -224,7 +285,7 @@ return 0 unless ($? == 0); my $try = new Panotools::Script; $try->Read ($tempfile) || return 0; - $self->{output} = $try->{output}; + $self->{output} = $try->Output; $self->Output2Image; return 1; } @@ -243,7 +304,7 @@ my ($roll, $pitch, $yaw) = @_; my @transform_rpy = map (deg2rad ($_), ($roll, $pitch, $yaw)); my $transform_matrix = rollpitchyaw2matrix (@transform_rpy); - for my $image (@{$self->{image}}) + for my $image (@{$self->Image}) { my @rpy = map (deg2rad ($_), ($image->{r}, $image->{p}, $image->{y})); my $matrix = rollpitchyaw2matrix (@rpy); @@ -272,13 +333,13 @@ sub Output2Image { my $self = shift; - for my $index (0 .. (@{$self->{output}} - 1)) + for my $index (0 .. (@{$self->Output} - 1)) { - for my $entry (keys %{$self->{output}->[$index]}) + for my $entry (keys %{$self->Output->[$index]}) { - $self->{image}->[$index] = new Panotools::Script::Line::Image unless (defined $self->{image}->[$index]); - $self->{image}->[$index]->{$entry} = $self->{output}->[$index]->{$entry} - unless (defined $self->{image}->[$index]->{$entry} and $self->{image}->[$index]->{$entry} =~ /=/); + $self->Image->[$index] = new Panotools::Script::Line::Image unless (defined $self->Image->[$index]); + $self->Image->[$index]->{$entry} = $self->Output->[$index]->{$entry} + unless (defined $self->Image->[$index]->{$entry} and $self->Image->[$index]->{$entry} =~ /=/); } } } @@ -286,20 +347,20 @@ sub Image2Output { my $self = shift; - for my $index (0 .. (@{$self->{image}} - 1)) + for my $index (0 .. (@{$self->Image} - 1)) { - for my $entry (keys %{$self->{image}->[$index]}) + for my $entry (keys %{$self->Image->[$index]}) { - $self->{output}->[$index] = new Panotools::Script::Line::Output unless (defined $self->{output}->[$index]); - unless ($self->{image}->[$index]->{$entry} =~ /=/) + $self->Output->[$index] = new Panotools::Script::Line::Output unless (defined $self->Output->[$index]); + unless ($self->Image->[$index]->{$entry} =~ /=/) { - $self->{output}->[$index]->{$entry} = $self->{image}->[$index]->{$entry}; + $self->Output->[$index]->{$entry} = $self->Image->[$index]->{$entry}; } else { - my $base = $self->{image}->[$index]->{$entry}; + my $base = $self->Image->[$index]->{$entry}; $base =~ s/=//; - $self->{output}->[$index]->{$entry} = $self->{image}->[$base]->{$entry}; + $self->Output->[$index]->{$entry} = $self->Image->[$base]->{$entry}; } } } Modified: trunk/Panotools-Script/t/010.read-stitch.t =================================================================== --- trunk/Panotools-Script/t/010.read-stitch.t 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/t/010.read-stitch.t 2007-04-30 21:32:07 UTC (rev 700) @@ -18,10 +18,10 @@ } # set Gamma correction to 2.2 -$p->{mode}->{g} = '2.2'; +$p->Mode->{g} = '2.2'; # set projection to Mercator -$p->{panorama}->{f} = '5'; +$p->Panorama->{f} = '5'; { my ($fh, $tempfile) = tempfile (SUFFIX => '.txt', UNLINK => 1); @@ -35,21 +35,21 @@ { my ($fh, $image) = tempfile (SUFFIX => '.tif', UNLINK => 1); - $p->{panorama}->{n} = '"TIFF c:NONE"'; + $p->Panorama->{n} = '"TIFF c:NONE"'; ok ($p->Stitch ($image), "$stitcher stitched uncompressed file"); like ((stat($image))[7], '/^1[12][0-9]{5}$/', "$stitcher uncompressed size is about 1.2MiB"); } -{ - my ($fh, $image) = tempfile (SUFFIX => '.tif', UNLINK => 1); - $p->{panorama}->{n} = '"TIFF c:LZW"'; - ok ($p->Stitch ($image), "$stitcher stitched LZW compressed file"); - like ((stat($image))[7], '/^[567][0-9]{5}$/', "$stitcher LZW compressed size is about 5-700kB"); -} +#{ +# my ($fh, $image) = tempfile (SUFFIX => '.tif', UNLINK => 1); +# $p->Panorama->{n} = '"TIFF c:LZW"'; +# ok ($p->Stitch ($image), "$stitcher stitched LZW compressed file"); +# like ((stat($image))[7], '/^[567][0-9]{5}$/', "$stitcher LZW compressed size is about 5-700kB"); +#} { my ($fh, $image) = tempfile (SUFFIX => '.tif', UNLINK => 1); - $p->{panorama}->{n} = '"TIFF c:DEFLATE"'; + $p->Panorama->{n} = '"TIFF c:DEFLATE"'; ok ($p->Stitch ($image), "$stitcher stitched DEFLATE compressed file"); like ((stat($image))[7], '/^[567][0-9]{5}$/', "$stitcher DEFLATE compressed size is about 5-700kB"); } Modified: trunk/Panotools-Script/t/012.read-pto.t =================================================================== --- trunk/Panotools-Script/t/012.read-pto.t 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/t/012.read-pto.t 2007-04-30 21:32:07 UTC (rev 700) @@ -25,6 +25,6 @@ } # set projection to Mercator -$p->{panorama}->{f} = '5'; +$p->Panorama->{f} = '5'; ok ($p->Optimise == 0, 'Optimisation fails'); Modified: trunk/Panotools-Script/t/020.create-script.t =================================================================== --- trunk/Panotools-Script/t/020.create-script.t 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/t/020.create-script.t 2007-04-30 21:32:07 UTC (rev 700) @@ -16,10 +16,10 @@ ok ($p->Write ($tempfile), "script written to $tempfile"); } # set Gamma correction to 2.2 -$p->{mode}->{g} = '2.2'; +$p->Mode->{g} = '2.2'; # set projection to Mercator -$p->{panorama}->{f} = '5'; +$p->Panorama->{f} = '5'; { my $image = new Panotools::Script::Line::Image; @@ -29,7 +29,7 @@ v => 50, y => 0, p => 0, r => 0, n => '"somefile.jpg"'); - push @{$p->{image}}, $image; + push @{$p->Image}, $image; } { @@ -40,7 +40,7 @@ v => '=0', y => 40, p => 0, r => 0, n => '"someotherfile.jpg"'); - push @{$p->{image}}, $image; + push @{$p->Image}, $image; } { @@ -48,26 +48,26 @@ ok ($p->Write ($tempfile), "script written to $tempfile"); } -ok (@{$p->{output}} == 0, 'no o lines yet'); +ok (@{$p->Output} == 0, 'no o lines yet'); $p->Image2Output; -ok (@{$p->{output}} == 2, 'two o lines after Image2Output()'); +ok (@{$p->Output} == 2, 'two o lines after Image2Output()'); -ok ($p->{output}->[1]->{v} == 50, 'second image inherits fov from first'); +ok ($p->Output->[1]->{v} == 50, 'second image inherits fov from first'); -$p->{output}->[0]->{v} = 40; -$p->{output}->[1]->{v} = 30; +$p->Output->[0]->{v} = 40; +$p->Output->[1]->{v} = 30; $p->Output2Image; -ok ($p->{image}->[0]->{v} == 40, 'fov propogates back to first image'); -ok ($p->{image}->[1]->{v} eq '=0', 'fov doesn\'t propogate back to second image'); +ok ($p->Image->[0]->{v} == 40, 'fov propogates back to first image'); +ok ($p->Image->[1]->{v} eq '=0', 'fov doesn\'t propogate back to second image'); $p->Image2Output; -ok ($p->{output}->[1]->{v} == 40, 'second image inherits fov from first'); +ok ($p->Output->[1]->{v} == 40, 'second image inherits fov from first'); -ok ($p->{output}->[0]->{n} eq '"somefile.jpg"', 'filename reverts'); -ok ($p->{output}->[1]->{n} eq '"someotherfile.jpg"', 'filename reverts'); +ok ($p->Output->[0]->{n} eq '"somefile.jpg"', 'filename reverts'); +ok ($p->Output->[1]->{n} eq '"someotherfile.jpg"', 'filename reverts'); #use Data::Dumper; warn Dumper $p; Modified: trunk/Panotools-Script/t/021.morph.t =================================================================== --- trunk/Panotools-Script/t/021.morph.t 2007-04-30 20:43:15 UTC (rev 699) +++ trunk/Panotools-Script/t/021.morph.t 2007-04-30 21:32:07 UTC (rev 700) @@ -12,11 +12,11 @@ my $p = new Panotools::Script; # set projection to cylindrical -$p->{panorama}->Set (f => 1, w => 600, h => 600, n => 'JPEG'); +$p->Panorama->Set (f => 1, w => 600, h => 600, n => 'JPEG'); { - $p->{image}->[0] = new Panotools::Script::Line::Image; - $p->{image}->[0]->Set (w => 600, h => 300, + $p->Image->[0] = new Panotools::Script::Line::Image; + $p->Image->[0]->Set (w => 600, h => 300, f => 4, v => 360, y => 180, p => 0, r => 0, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-04-30 22:47:33
|
Revision: 701 http://svn.sourceforge.net/panotools/?rev=701&view=rev Author: brunopostle Date: 2007-04-30 15:47:33 -0700 (Mon, 30 Apr 2007) Log Message: ----------- Only pass optimisable parameters to PTOptimizer Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/README trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm trunk/Panotools-Script/lib/Panotools/Script.pm trunk/Panotools-Script/t/012.read-pto.t Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-04-30 21:32:07 UTC (rev 700) +++ trunk/Panotools-Script/Changes 2007-04-30 22:47:33 UTC (rev 701) @@ -8,6 +8,7 @@ - pass options to Stitch() - New Clone() and Preview() methods - New accessor methods: Mode(), Panorama(), Variable(), Image(), Output(), Control(), ControlMorph() + - Only pass optimisable variables to PTOptimizer 0.05 - change order of nona parameters for BSD (Milan Knizek) Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-04-30 21:32:07 UTC (rev 700) +++ trunk/Panotools-Script/README 2007-04-30 22:47:33 UTC (rev 701) @@ -45,13 +45,12 @@ * jpeg2qtvr calculate window size from fov and cubeface size * new response curve parameters * fix OS X bug with paths -* remove non-optimisable hugin variables for PTOptimizer Copyright and licence --------------------- -This module free software and is distributed under the +This module is free software and is distributed under the same license as Perl itself. Copyright (C) 2002 Bruno Postle Modified: trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2007-04-30 21:32:07 UTC (rev 700) +++ trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2007-04-30 22:47:33 UTC (rev 701) @@ -117,8 +117,20 @@ my $self = shift; } -sub _valid { return '^([abcdefghnoprtvwy]|[SCXYZ]|K[0-2][ab]|V[abcdfmxy])(.*)' } +sub _valid { return '^([abcdefghnprtvwy]|[SCXYZ]|K[0-2][ab]|V[abcdfmxy])(.*)' } +sub _valid_ptoptimizer { return '^([abcdefghnprtvwySC])(.*)' } + +sub _sanitise_ptoptimizer +{ + my $self = shift; + my $valid = $self->_valid_ptoptimizer; + for my $key (keys %{$self}) + { + delete $self->{$key} unless (grep /$valid/, $key); + } +} + sub Identifier { my $self = shift; Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-04-30 21:32:07 UTC (rev 700) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-04-30 22:47:33 UTC (rev 701) @@ -278,14 +278,26 @@ sub Optimise { my $self = shift; + $self->Image2Output; my ($fh, $tempfile) = tempfile (SUFFIX => '.txt', UNLINK => $CLEANUP); - $self->Write ($tempfile); - my @args = ($self->{optimiser}, $tempfile); - system (@args); + my $clone = $self->Clone; + for my $image (@{$clone->Image}) + { + $image->_sanitise_ptoptimizer; + } + $clone->Write ($tempfile); + system ($self->{optimiser}, $tempfile); return 0 unless ($? == 0); my $try = new Panotools::Script; $try->Read ($tempfile) || return 0; - $self->{output} = $try->Output; + for my $index (0 .. scalar (@{$try->Output}) - 1) + { + for my $key (keys %{$try->Output->[$index]}) + { + my $value = $try->Output->[$index]->{$key}; + $self->Output->[$index]->Set ($key => $value); + } + } $self->Output2Image; return 1; } @@ -385,8 +397,7 @@ $self->Write ($tempfile, $vector); my $cwd = File::Spec->curdir; chdir (File::Spec->tmpdir); - my @args = ($self->{stitcher}, @options, '-o', $outfile, $tempfile); - system (@args); + system ($self->{stitcher}, @options, '-o', $outfile, $tempfile); chdir ($cwd); return 0 unless ($? == 0); return 1; Modified: trunk/Panotools-Script/t/012.read-pto.t =================================================================== --- trunk/Panotools-Script/t/012.read-pto.t 2007-04-30 21:32:07 UTC (rev 700) +++ trunk/Panotools-Script/t/012.read-pto.t 2007-04-30 22:47:33 UTC (rev 701) @@ -17,14 +17,5 @@ ok ($p->Write ($tempfile), "script written to $tempfile"); } -TODO: { -local $TODO = 'PTOptimizer doesn\'t like Va0 Vb0 in image lines'; - ok ($p->Optimise, 'Optimisation succeeds'); -} - -# set projection to Mercator -$p->Panorama->{f} = '5'; - -ok ($p->Optimise == 0, 'Optimisation fails'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-05-06 16:10:20
|
Revision: 702 http://svn.sourceforge.net/panotools/?rev=702&view=rev Author: brunopostle Date: 2007-05-06 09:10:21 -0700 (Sun, 06 May 2007) Log Message: ----------- New exposure, white balance, output mode, bitdepth and camera response parameters supported by hugin/nona Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/README trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm trunk/Panotools-Script/lib/Panotools/Script/Line/Panorama.pm Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-04-30 22:47:33 UTC (rev 701) +++ trunk/Panotools-Script/Changes 2007-05-06 16:10:21 UTC (rev 702) @@ -9,6 +9,7 @@ - New Clone() and Preview() methods - New accessor methods: Mode(), Panorama(), Variable(), Image(), Output(), Control(), ControlMorph() - Only pass optimisable variables to PTOptimizer + - New exposure, white balance, output mode, bitdepth and camera response parameters supported by hugin/nona 0.05 - change order of nona parameters for BSD (Milan Knizek) Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-04-30 22:47:33 UTC (rev 701) +++ trunk/Panotools-Script/README 2007-05-06 16:10:21 UTC (rev 702) @@ -38,12 +38,8 @@ * open/save lens profiles * Delete control points * error distance -* Scale project -* split enblend step from pto2tiff -* pto2tiff stitches one file at a time * erect2qtvr --yaw value * jpeg2qtvr calculate window size from fov and cubeface size -* new response curve parameters * fix OS X bug with paths Modified: trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2007-04-30 22:47:33 UTC (rev 701) +++ trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2007-05-06 16:10:21 UTC (rev 702) @@ -50,6 +50,16 @@ i_blue = K2a * i_blue + K2b This correction is applied after the flatfield flatfield correction. + Eev exposure of image in EV (exposure values) + Er white balance factor for red channel + Eb white balance factor for blue channel + + Ra EMoR response model from the Computer Vision Lab at Columbia University + Rb This models the camera response curve + Rc + Rd + Re + Vm vignetting correction mode (default 0): 0: no vignetting correction 1: radial vignetting correction (see j,k,l,o options) @@ -117,7 +127,7 @@ my $self = shift; } -sub _valid { return '^([abcdefghnprtvwy]|[SCXYZ]|K[0-2][ab]|V[abcdfmxy])(.*)' } +sub _valid { return '^([abcdefghnprtvwy]|[SCXYZ]|K[0-2][ab]|V[abcdfmxy]|Eev|E[rb]|R[abcde])(.*)' } sub _valid_ptoptimizer { return '^([abcdefghnprtvwySC])(.*)' } Modified: trunk/Panotools-Script/lib/Panotools/Script/Line/Panorama.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script/Line/Panorama.pm 2007-04-30 22:47:33 UTC (rev 701) +++ trunk/Panotools-Script/lib/Panotools/Script/Line/Panorama.pm 2007-05-06 16:10:21 UTC (rev 702) @@ -55,6 +55,14 @@ d1 attempt color correction with no brightness change using image number as anchor Do not use more than one of k, d, b.This is new method of correcting + E1 exposure value for final panorama + R1 stitching mode: 0: normal LDR mode, 1: HDR mode + T"UINT8" bitdepth of output images, possible values are + UINT8 - 8 bit unsigned + UINT16 - 16 bit unsigned + FLOAT - 32 bit floating point + By default the bit depth of the input images is used. + =cut use vars qw /@ISA/; @@ -70,7 +78,7 @@ $self->{f} = "2"; } -sub _valid { '^([bdfhknuvw])(.*)' } +sub _valid { '^([bdfhknuvwERT])(.*)' } sub Identifier { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-05-09 08:26:35
|
Revision: 703 http://svn.sourceforge.net/panotools/?rev=703&view=rev Author: brunopostle Date: 2007-05-09 01:26:36 -0700 (Wed, 09 May 2007) Log Message: ----------- erect2qtvr add --yaw and --outfile options Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/README trunk/Panotools-Script/bin/erect2qtvr Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-05-06 16:10:21 UTC (rev 702) +++ trunk/Panotools-Script/Changes 2007-05-09 08:26:36 UTC (rev 703) @@ -10,6 +10,7 @@ - New accessor methods: Mode(), Panorama(), Variable(), Image(), Output(), Control(), ControlMorph() - Only pass optimisable variables to PTOptimizer - New exposure, white balance, output mode, bitdepth and camera response parameters supported by hugin/nona + - erect2qtvr add --yaw and --outfile options 0.05 - change order of nona parameters for BSD (Milan Knizek) Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-05-06 16:10:21 UTC (rev 702) +++ trunk/Panotools-Script/README 2007-05-09 08:26:36 UTC (rev 703) @@ -38,7 +38,6 @@ * open/save lens profiles * Delete control points * error distance -* erect2qtvr --yaw value * jpeg2qtvr calculate window size from fov and cubeface size * fix OS X bug with paths Modified: trunk/Panotools-Script/bin/erect2qtvr =================================================================== --- trunk/Panotools-Script/bin/erect2qtvr 2007-05-06 16:10:21 UTC (rev 702) +++ trunk/Panotools-Script/bin/erect2qtvr 2007-05-09 08:26:36 UTC (rev 703) @@ -21,6 +21,9 @@ my $cleanup = $opts->{'--cleanup'} || 1; my $quality = $opts->{'--quality'} || 70; my $pitch = $opts->{'--pitch'} || 0; +my $yaw = $opts->{'--yaw'} || 0; +my $outfile = $opts->{'--outfile'} || undef; +$outfile = File::Spec->rel2abs ($outfile) if defined ($outfile); my $erect = $opts->{'--erect'} or die "usage\n $0 --erect=mypanorama.tif @@ -30,8 +33,10 @@ Options: + --erect Filename of equirectangular input (required) --pitch pre-rotates the entire panorama. eg. if your panorama has the nadir in the centre set this to -90 + --yaw pre-rotates the entire panorama. --quality JPEG quality for QTVR tiles, defaults to 70 --cleanup set to '0' to keep temporary files, defaults to '1' @@ -39,6 +44,7 @@ --date date in seconds since January 1st 1970, defaults to current time --name title of the panorama + --outfile output filename, defaults to input filename with .mov extension --width preferred window width, defaults to 1024 --height preferred window height, defaults to 768 --pan initial pan (yaw), defaults to 0.0 degrees @@ -80,7 +86,7 @@ $scratch->Image->[0] = new Panotools::Script::Line::Image; -$scratch->Image->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => $pitch, y => 0, n => "\"$erect\""); +$scratch->Image->[0]->Set (w => $width, h => $height, v => 360, f => 4, r => 0, p => $pitch, y => $yaw, n => "\"$erect\""); $scratch->Stitch ("$prefix-0.tif"); @@ -109,7 +115,7 @@ $scratch->Panorama->Set (v => 100, f => 3); -$scratch->Image->[0]->Set (r => 0, p => $pitch, y => 0); +$scratch->Image->[0]->Set (r => 0, p => $pitch, y => $yaw); $scratch->Stitch ("$prefix-preview-0.tif"); $scratch->Transform (0, 0, -90); @@ -141,8 +147,10 @@ print "Tempdir: $tempdir\n" unless $cleanup; -`jpeg2qtvr $qtvr_opts --prefix=$prefix- --preview=$prefix-preview- --outfile=$stub.mov`; +$outfile = "$stub.mov" unless (defined $outfile); +`jpeg2qtvr $qtvr_opts --prefix=$prefix- --preview=$prefix-preview- --outfile=$outfile`; + __END__ =head1 NAME @@ -168,8 +176,10 @@ Options: + --erect Filename of equirectangular input (required) --pitch pre-rotates the entire panorama. eg. if your panorama has the nadir in the centre set this to -90 + --yaw pre-rotates the entire panorama. --quality JPEG quality for QTVR tiles, defaults to 70 --cleanup set to '0' to keep temporary files, defaults to '1' @@ -177,6 +187,7 @@ --date date in seconds since January 1st 1970, defaults to current time --name title of the panorama + --outfile output filename, defaults to input filename with mov extension --width preferred window width, defaults to 1024 --height preferred window height, defaults to 768 --pan initial pan (yaw), defaults to 0.0 degrees This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-05-09 21:47:42
|
Revision: 705 http://svn.sourceforge.net/panotools/?rev=705&view=rev Author: brunopostle Date: 2007-05-09 14:47:43 -0700 (Wed, 09 May 2007) Log Message: ----------- default to autooptimiser instead of PTOptimizer Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/README trunk/Panotools-Script/lib/Panotools/Script.pm trunk/Panotools-Script/t/010.read-stitch.t Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-05-09 20:59:56 UTC (rev 704) +++ trunk/Panotools-Script/Changes 2007-05-09 21:47:43 UTC (rev 705) @@ -8,7 +8,7 @@ - pass options to Stitch() - New Clone() and Preview() methods - New accessor methods: Mode(), Panorama(), Variable(), Image(), Output(), Control(), ControlMorph() - - Only pass optimisable variables to PTOptimizer + - Only pass optimisable variables to PTOptimizer but default to autooptimiser - New exposure, white balance, output mode, bitdepth and camera response parameters supported by hugin/nona - erect2qtvr add --yaw and --outfile options Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-05-09 20:59:56 UTC (rev 704) +++ trunk/Panotools-Script/README 2007-05-09 21:47:43 UTC (rev 705) @@ -23,7 +23,7 @@ Math::Matrix Image::Magick -This module requires 'PTOptimizer' from pano12 and 'nona' from hugin. Some of +This module requires 'autooptimiser' and 'nona' from hugin. Some of the scripts require 'enblend' and ImageMagick command-line tools. Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-05-09 20:59:56 UTC (rev 704) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-05-09 21:47:43 UTC (rev 705) @@ -68,7 +68,7 @@ $self->{control} = []; $self->{controlmorph} = []; $self->{stitcher} = $ENV{STITCHER} || 'nona'; # nona, PTmender, PTStitcher, Tmender - $self->{optimiser} = $ENV{OPTIMISER} || 'PTOptimizer'; # PToptimizer PTOptimizer, autooptimiser + $self->{optimiser} = $ENV{OPTIMISER} || 'autooptimiser'; # PToptimizer PTOptimizer, autooptimiser $self->{basedir} = File::Spec->rel2abs (File::Spec->curdir); } @@ -280,16 +280,27 @@ my $self = shift; $self->Image2Output; my ($fh, $tempfile) = tempfile (SUFFIX => '.txt', UNLINK => $CLEANUP); + my ($fh2, $outfile) = tempfile (SUFFIX => '.txt', UNLINK => $CLEANUP); my $clone = $self->Clone; for my $image (@{$clone->Image}) { $image->_sanitise_ptoptimizer; } $clone->Write ($tempfile); - system ($self->{optimiser}, $tempfile); - return 0 unless ($? == 0); my $try = new Panotools::Script; - $try->Read ($tempfile) || return 0; + if ($self->{optimiser} =~ /autooptimiser/) + { + system ($self->{optimiser}, '-o', $outfile, $tempfile); + return 0 unless ($? == 0); + $try->Read ($outfile) || return 0; + $try->Image2Output; + } + else + { + system ($self->{optimiser}, $tempfile); + return 0 unless ($? == 0); + $try->Read ($tempfile) || return 0; + } for my $index (0 .. scalar (@{$try->Output}) - 1) { for my $key (keys %{$try->Output->[$index]}) Modified: trunk/Panotools-Script/t/010.read-stitch.t =================================================================== --- trunk/Panotools-Script/t/010.read-stitch.t 2007-05-09 20:59:56 UTC (rev 704) +++ trunk/Panotools-Script/t/010.read-stitch.t 2007-05-09 21:47:43 UTC (rev 705) @@ -56,6 +56,6 @@ } -ok ($p->Optimise == 0, 'optimisation fails because of no control points'); +#ok ($p->Optimise == 0, 'optimisation fails because of no control points'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-07-12 22:14:28
|
Revision: 709 http://svn.sourceforge.net/panotools/?rev=709&view=rev Author: brunopostle Date: 2007-07-12 15:14:30 -0700 (Thu, 12 Jul 2007) Log Message: ----------- add qtvr2erect tool, depends on freepv Modified Paths: -------------- trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL Added Paths: ----------- trunk/Panotools-Script/bin/qtvr2erect Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2007-07-10 21:29:54 UTC (rev 708) +++ trunk/Panotools-Script/MANIFEST 2007-07-12 22:14:30 UTC (rev 709) @@ -5,6 +5,7 @@ bin/erect2planet bin/jpeg2qtvr bin/erect2qtvr +bin/qtvr2erect bin/process-masks bin/pto2tiff bin/transform-pano Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2007-07-10 21:29:54 UTC (rev 708) +++ trunk/Panotools-Script/Makefile.PL 2007-07-12 22:14:30 UTC (rev 709) @@ -3,7 +3,7 @@ # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Panotools::Script', - 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano', 'bin/nona-mask' ], + 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano', 'bin/nona-mask', 'bin/qtvr2erect' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION 'PREREQ_PM' => {'Math::Matrix' => 0.4, 'Image::Magick' => 5.0, 'Storable' => 2.0}, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 Added: trunk/Panotools-Script/bin/qtvr2erect =================================================================== --- trunk/Panotools-Script/bin/qtvr2erect (rev 0) +++ trunk/Panotools-Script/bin/qtvr2erect 2007-07-12 22:14:30 UTC (rev 709) @@ -0,0 +1,48 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use File::Temp qw/tempdir/; +use File::Spec; +use Image::Magick; +use Panotools::Script; + +for my $mov (@ARGV) +{ + my $tempdir = tempdir (CLEANUP => 0); + warn $tempdir; + system ('qtvr2img', $mov, "$tempdir/cube"); + $mov = File::Spec->rel2abs ($mov); + + my $image = new Image::Magick; + $image->Read ("$tempdir/cube_0.pnm"); + my ($width, $height) = $image->Get ('width', 'height'); + + my $height_erect = int ($width * 1.5708); + my $width_erect = 2 * $height_erect; + my $erect = new Panotools::Script; + $erect->Panorama->Set (h => int ($width * 1.5708), + w => 2 * int ($width * 1.5708), + n => '"TIFF"', E => 0); + $erect->Image->[0] = new Panotools::Script::Line::Image; + $erect->Image->[0]->Set (f => 0, w => $width, h => $height, v => 90, Eev => 0, + r => 0, p => 0, y => 0, n => "\"$tempdir/cube_0.pnm\""); + $erect->Image->[1] = new Panotools::Script::Line::Image; + $erect->Image->[1]->Set (f => 0, w => $width, h => $height, v => 90, Eev => 0, + r => 0, p => 0, y => 90, n => "\"$tempdir/cube_1.pnm\""); + $erect->Image->[2] = new Panotools::Script::Line::Image; + $erect->Image->[2]->Set (f => 0, w => $width, h => $height, v => 90, Eev => 0, + r => 0, p => 0, y => 180, n => "\"$tempdir/cube_2.pnm\""); + $erect->Image->[3] = new Panotools::Script::Line::Image; + $erect->Image->[3]->Set (f => 0, w => $width, h => $height, v => 90, Eev => 0, + r => 0, p => 0, y => -90, n => "\"$tempdir/cube_3.pnm\""); + $erect->Image->[4] = new Panotools::Script::Line::Image; + $erect->Image->[4]->Set (f => 0, w => $width, h => $height, v => 90, Eev => 0, + r => 0, p => 90, y => 0, n => "\"$tempdir/cube_4.pnm\""); + $erect->Image->[5] = new Panotools::Script::Line::Image; + $erect->Image->[5]->Set (f => 0, w => $width, h => $height, v => 90, Eev => 0, + r => 0, p => -90, y => 0, n => "\"$tempdir/cube_5.pnm\""); + $erect->Stitch ("$mov.tif"); + +} Property changes on: trunk/Panotools-Script/bin/qtvr2erect ___________________________________________________________________ Name: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-07-15 21:11:22
|
Revision: 714 http://svn.sourceforge.net/panotools/?rev=714&view=rev Author: brunopostle Date: 2007-07-15 14:11:23 -0700 (Sun, 15 Jul 2007) Log Message: ----------- process-masks test images Modified Paths: -------------- trunk/Panotools-Script/MANIFEST Added Paths: ----------- trunk/Panotools-Script/t/data/mask/ trunk/Panotools-Script/t/data/mask/sheep0001_mask.tif trunk/Panotools-Script/t/data/mask/sheep0002_mask.tif Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2007-07-15 21:08:46 UTC (rev 713) +++ trunk/Panotools-Script/MANIFEST 2007-07-15 21:11:23 UTC (rev 714) @@ -45,3 +45,5 @@ t/data/cemetery/hugin-stitch.txt t/data/cemetery/hugin.pto t/data/equirectangular/equirectangular.jpg +t/data/mask/sheep0001_mask.tif +t/data/mask/sheep0002_mask.tif Added: trunk/Panotools-Script/t/data/mask/sheep0001_mask.tif =================================================================== (Binary files differ) Property changes on: trunk/Panotools-Script/t/data/mask/sheep0001_mask.tif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Panotools-Script/t/data/mask/sheep0002_mask.tif =================================================================== (Binary files differ) Property changes on: trunk/Panotools-Script/t/data/mask/sheep0002_mask.tif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-07-18 21:04:15
|
Revision: 719 http://svn.sourceforge.net/panotools/?rev=719&view=rev Author: brunopostle Date: 2007-07-18 14:04:13 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Add tif2svg and enblend-svg for SVG mask editing Modified Paths: -------------- trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL trunk/Panotools-Script/bin/pto2tiff Added Paths: ----------- trunk/Panotools-Script/bin/enblend-svg trunk/Panotools-Script/bin/tif2svg Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2007-07-16 06:05:55 UTC (rev 718) +++ trunk/Panotools-Script/MANIFEST 2007-07-18 21:04:13 UTC (rev 719) @@ -10,6 +10,8 @@ bin/pto2tiff bin/transform-pano bin/nona-mask +bin/tif2svg +bin/enblend-svg Changes lib/Panotools/Matrix.pm lib/Panotools/Script.pm Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2007-07-16 06:05:55 UTC (rev 718) +++ trunk/Panotools-Script/Makefile.PL 2007-07-18 21:04:13 UTC (rev 719) @@ -3,7 +3,11 @@ # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Panotools::Script', - 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/transform-pano', 'bin/nona-mask', 'bin/qtvr2erect' ], + 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', + 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', + 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', + 'bin/tif2svg', 'bin/enblend-svg', + 'bin/transform-pano', 'bin/nona-mask', 'bin/qtvr2erect' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION 'PREREQ_PM' => {'Math::Matrix' => 0.4, 'Image::Magick' => 5.0, 'Storable' => 2.0}, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 Added: trunk/Panotools-Script/bin/enblend-svg =================================================================== --- trunk/Panotools-Script/bin/enblend-svg (rev 0) +++ trunk/Panotools-Script/bin/enblend-svg 2007-07-18 21:04:13 UTC (rev 719) @@ -0,0 +1,33 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +# Splits an SVG file into layers, then runs enblend-mask on the +# resulting SVG files. (c) July 2007 Bruno Postle <br...@po...> + +my $file = pop @ARGV; +exit unless ($file =~ /\.svg$/i); + +open (FILE, $file) or die "Can’t open $file: $!"; +my @lines = <FILE>; +my $xml = join ('', @lines); + +my @layers = $xml =~ /(<g.*?<\/g>)/gs; +exit unless @layers; + +my @files; +my $index = 0; +for my $layer (@layers) +{ + $xml =~ s/<g.*<\/g>/$layer/gs; + my $out = "$file-enblend-svg-$$-$index.svg"; + open (OUT, ">$out"); + print OUT $xml; + push @files, $out; + $index++; +} + +system ('enblend-mask', @ARGV, @files); +unlink @files; + Property changes on: trunk/Panotools-Script/bin/enblend-svg ___________________________________________________________________ Name: svn:executable + * Modified: trunk/Panotools-Script/bin/pto2tiff =================================================================== --- trunk/Panotools-Script/bin/pto2tiff 2007-07-16 06:05:55 UTC (rev 718) +++ trunk/Panotools-Script/bin/pto2tiff 2007-07-18 21:04:13 UTC (rev 719) @@ -20,7 +20,7 @@ $p->Panorama->Set (n => '"TIFF_m c:DEFLATE"'); $p->Stitch ($stub .'_'); - my $args = '-a -l 29'; + my $args = '-a'; $args .= ' -w' if $p->Panorama->{v} == 360; `enblend-mask $args -o $stub.tif $stub\_????.tif`; Added: trunk/Panotools-Script/bin/tif2svg =================================================================== --- trunk/Panotools-Script/bin/tif2svg (rev 0) +++ trunk/Panotools-Script/bin/tif2svg 2007-07-18 21:04:13 UTC (rev 719) @@ -0,0 +1,44 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Image::Magick; + +my @files = grep (/\.tif$/i, @ARGV); + +exit unless @files; + +my $stub0 = $files[0]; +$stub0 =~ s/\.tif$//i; +my $stub1 = $files[-1]; +$stub1 =~ s/\.tif$//i; +$stub1 =~ s/.*(\/|\\)//; + +my $image = new Image::Magick; +$image->Read ($files[0]); +my ($width, $height) = $image->Get ('width', 'height'); + +open (SVG, ">$stub0-$stub1.svg"); + +print SVG qq|<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" +xmlns:xlink="http://www.w3.org/1999/xlink" +xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" +width="$width" height="$height" version="1.0">|; + +my $index = 0; +for my $file (@files) +{ + print SVG qq| + <g inkscape:groupmode="layer" + id="layer$index" + inkscape:label="$index"> + <image y="0" x="0" id="image$index" style="display:inline" + width="$width" height="$height" xlink:href="$file" /> + </g>|; + $index++; +} + +print SVG qq| +</svg>| + Property changes on: trunk/Panotools-Script/bin/tif2svg ___________________________________________________________________ Name: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-07-19 21:41:24
|
Revision: 723 http://svn.sourceforge.net/panotools/?rev=723&view=rev Author: brunopostle Date: 2007-07-19 14:41:23 -0700 (Thu, 19 Jul 2007) Log Message: ----------- A bunch of GUI wrappers around various command-line tools (Linux only) Modified Paths: -------------- trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL trunk/Panotools-Script/README Added Paths: ----------- trunk/Panotools-Script/bin/enblend-svg-gui trunk/Panotools-Script/bin/erect2qtvr-gui trunk/Panotools-Script/bin/process-masks-gui trunk/Panotools-Script/bin/pto2tiff-gui trunk/Panotools-Script/bin/qtvr2erect-gui trunk/Panotools-Script/bin/tif2svg-gui Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2007-07-19 21:16:18 UTC (rev 722) +++ trunk/Panotools-Script/MANIFEST 2007-07-19 21:41:23 UTC (rev 723) @@ -12,6 +12,12 @@ bin/nona-mask bin/tif2svg bin/enblend-svg +bin/qtvr2erect-gui +bin/tif2svg-gui +bin/pto2tiff-gui +bin/process-masks-gui +bin/enblend-svg-gui +bin/erect2qtvr-gui Changes lib/Panotools/Matrix.pm lib/Panotools/Script.pm Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2007-07-19 21:16:18 UTC (rev 722) +++ trunk/Panotools-Script/Makefile.PL 2007-07-19 21:41:23 UTC (rev 723) @@ -7,6 +7,8 @@ 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/process-masks', 'bin/erect2planet', 'bin/pto2tiff', 'bin/tif2svg', 'bin/enblend-svg', + 'bin/qtvr2erect-gui', 'bin/tif2svg-gui', 'bin/pto2tiff-gui', + 'bin/process-masks-gui', 'bin/enblend-svg-gui', 'bin/erect2qtvr-gui', 'bin/transform-pano', 'bin/nona-mask', 'bin/qtvr2erect' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION 'PREREQ_PM' => {'Math::Matrix' => 0.4, 'Image::Magick' => 5.0, 'Storable' => 2.0}, Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-07-19 21:16:18 UTC (rev 722) +++ trunk/Panotools-Script/README 2007-07-19 21:41:23 UTC (rev 723) @@ -26,6 +26,8 @@ This module requires 'autooptimiser' and 'nona' from hugin. Some of the scripts require 'enblend' and ImageMagick command-line tools. +The various *-gui tools require 'zenity' and will only work on +Linux/unix systems. TODO ---- Added: trunk/Panotools-Script/bin/enblend-svg-gui =================================================================== --- trunk/Panotools-Script/bin/enblend-svg-gui (rev 0) +++ trunk/Panotools-Script/bin/enblend-svg-gui 2007-07-19 21:41:23 UTC (rev 723) @@ -0,0 +1,57 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +my $cwd = `cat \$HOME/.enblend-svg-gui` || $ENV{'HOME'}; +chomp $cwd; + +unless (`which enblend-svg`) +{ + `zenity --error --text='enblend-svg not found in your \$PATH'`; + exit 1; +} + +my $svg; + +if (@ARGV) +{ + $svg = shift; +} +else +{ + $svg = `zenity --file-selection \\ + --filename=$cwd/ \\ + --title='Select SVG image to blend layers'` || exit 0; + chomp $svg; + $cwd = $svg; + $cwd =~ s/\/[^\/]*$//; + $cwd =~ s/\\\//\//g; + `echo '$cwd' > \$HOME/.enblend-svg-gui` if ($cwd =~ /^\//); +} + +exit unless $svg =~ /\.svg$/i; + +my $wrap = system ("zenity --question \\ + --title='Wrap around?' \\ + --text='Click OK to blend across -180/+180 boundary. Click Cancel for normal scenes.'"); + +my $args = ''; +$args = '-w' unless $wrap; + +my $tif = $svg; +$tif =~ s/\.svg$/.tif/i; + +`enblend-svg $args -o '$tif' '$svg' | \\ + zenity --progress \\ + --title='Blending SVG...' \\ + --auto-close \\ + --pulsate \\ + --text='blending: $svg'`; + +`zenity --info \\ + --title='TIF created' \\ + --text='$svg'`; + +exit 0; + Property changes on: trunk/Panotools-Script/bin/enblend-svg-gui ___________________________________________________________________ Name: svn:executable + * Added: trunk/Panotools-Script/bin/erect2qtvr-gui =================================================================== --- trunk/Panotools-Script/bin/erect2qtvr-gui (rev 0) +++ trunk/Panotools-Script/bin/erect2qtvr-gui 2007-07-19 21:41:23 UTC (rev 723) @@ -0,0 +1,82 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Image::Magick; + +my $cwd = `cat \$HOME/.erect2qtvr-gui` || $ENV{'HOME'}; +chomp $cwd; + +unless (`which erect2qtvr`) +{ + `zenity --error --text='erect2qtvr not found in your \$PATH'`; + exit 1; +} + +my $erect; + +if (@ARGV) +{ + $erect = shift; +} +else +{ + $erect = `zenity --file-selection \\ + --filename=$cwd/ \\ + --title='Select equirectangular image to convert to QTVR'` || exit 0; + chomp $erect; + $cwd = $erect; + $cwd =~ s/\/[^\/]*$//; + $cwd =~ s/\\\//\//g; + `echo '$cwd' > \$HOME/.erect2qtvr-gui` if ($cwd =~ /^\//); +} + +my $image = new Image::Magick; +$image->Read ($erect); +my ($width, $height) = $image->Get ('width', 'height'); + +unless ($width and $height and $width == 2 * $height) +{ + `zenity --error --text='Image must have 2:1 aspect ratio'`; + exit 1; +} + +my $name = `zenity --entry \\ + --title='Enter title' \\ + --entry-text='My panorama' \\ + --text='What is the title of your panorama?'`; +chomp $name; +$name =~ s/'//g; + +my $quality = `zenity --entry \\ + --title='Enter quality' \\ + --entry-text=70 \\ + --text='Set the JPEG quality (1-100)'`; +chomp $quality; + +my $pitch = `zenity --entry \\ + --title='Enter transform' \\ + --entry-text=0 \\ + --text='Pre-tilt the panorama (degrees). Set this to -90 if the nadir is in the centre of your panorama'`; +chomp $pitch; + +my $yaw = `zenity --entry \\ + --title='Enter yaw' \\ + --entry-text=0 \\ + --text='Select initial yaw (degrees)'`; +chomp $yaw; +$yaw = 0.01 unless ($yaw); + +`erect2qtvr --erect='$erect' --name='$name' --quality=$quality --pitch=$pitch --yaw=$yaw | \\ + zenity --progress \\ + --title='Creating QTVR' \\ + --auto-close \\ + --pulsate \\ + --text='Assembling: $name'`; + +`zenity --info \\ + --title='QTVR created' \\ + --text='$erect'`; + +exit 0; + Property changes on: trunk/Panotools-Script/bin/erect2qtvr-gui ___________________________________________________________________ Name: svn:executable + * Added: trunk/Panotools-Script/bin/process-masks-gui =================================================================== --- trunk/Panotools-Script/bin/process-masks-gui (rev 0) +++ trunk/Panotools-Script/bin/process-masks-gui 2007-07-19 21:41:23 UTC (rev 723) @@ -0,0 +1,55 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +my $cwd = `cat \$HOME/.process-masks-gui` || $ENV{'HOME'}; +chomp $cwd; + +unless (`which process-masks`) +{ + `zenity --error --text='process-masks not found in your \$PATH'`; + exit 1; +} + +my @files; + +if (@ARGV) +{ + @files = @ARGV; +} +else +{ + my $result = `zenity --file-selection \\ + --filename=$cwd/ \\ + --title='Select enblend masks to process' \\ + --multiple` || exit 0; + chomp $result; + @files = split ('\|', $result); +} + +my $index = 1; + +@files = map (quotemeta, @files); +my $files = join ' ', @files; +my $title = "processing ". scalar (@files) ."masks"; +`process-masks $files | \\ + zenity --progress \\ + --title='$title' \\ + --auto-close \\ + --pulsate \\ + --text='Project: $files'`; + +$cwd = $files[0]; +$cwd =~ s/\/[^\/]*$//; +$cwd =~ s/\\\//\//g; +`echo '$cwd' > \$HOME/.process-masks-gui` if ($cwd =~ /^\//); + +$title = scalar (@files) . ' enblend masks processed'; +my $text = join ("\n", @files); + +`zenity --info \\ + --title='$title' \\ + --text='$text'`; + +exit 0; Property changes on: trunk/Panotools-Script/bin/process-masks-gui ___________________________________________________________________ Name: svn:executable + * Added: trunk/Panotools-Script/bin/pto2tiff-gui =================================================================== --- trunk/Panotools-Script/bin/pto2tiff-gui (rev 0) +++ trunk/Panotools-Script/bin/pto2tiff-gui 2007-07-19 21:41:23 UTC (rev 723) @@ -0,0 +1,60 @@ +#!/usr/bin/perl + +# GUI wrapper around pto2tiff. Requires zenity +# July 2007 Bruno Postle <br...@po...> + +use strict; +use warnings; + +my $cwd = `cat \$HOME/.pto2tiff-gui` || $ENV{'HOME'}; +chomp $cwd; + +unless (`which pto2tiff`) +{ + `zenity --error --text='pto2tiff not found in your \$PATH'`; + exit 1; +} + +my @files; + +if (@ARGV) +{ + @files = @ARGV; +} +else +{ + my $result = `zenity --file-selection \\ + --filename=$cwd/ \\ + --title='Select hugin .pto project(s) to stitch' \\ + --multiple` || exit 0; + chomp $result; + @files = split ('\|', $result); +} + +my $index = 1; + +for my $file (@files) +{ + $file = quotemeta ($file); + my $title = "Stitching project $index of ". scalar (@files); + `pto2tiff $file | \\ + zenity --progress \\ + --title='$title' \\ + --auto-close \\ + --pulsate \\ + --text='Project: $file'`; + $index++; + $cwd = $file; + $cwd =~ s/\/[^\/]*$//; + $cwd =~ s/\\\//\//g; + `echo '$cwd' > \$HOME/.pto2tiff-gui` if ($cwd =~ /^\//); +} + +my $title = scalar (@files) . ' hugin .pto project(s) stitched'; +my $text = join ("\n", @files); + +`zenity --info \\ + --title='$title' \\ + --text='$text'`; + +exit 0; Property changes on: trunk/Panotools-Script/bin/pto2tiff-gui ___________________________________________________________________ Name: svn:executable + * Added: trunk/Panotools-Script/bin/qtvr2erect-gui =================================================================== --- trunk/Panotools-Script/bin/qtvr2erect-gui (rev 0) +++ trunk/Panotools-Script/bin/qtvr2erect-gui 2007-07-19 21:41:23 UTC (rev 723) @@ -0,0 +1,45 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +my $cwd = `cat \$HOME/.qtvr2erect-gui` || $ENV{'HOME'}; +chomp $cwd; + +unless (`which qtvr2erect`) +{ + `zenity --error --text='qtvr2erect not found in your \$PATH'`; + exit 1; +} + +my $qtvr; + +if (@ARGV) +{ + $qtvr = shift; +} +else +{ + $qtvr = `zenity --file-selection \\ + --filename=$cwd/ \\ + --title='Select cubic QTVR .mov file'` || exit 0; + chomp $qtvr; + $cwd = $qtvr; + $cwd =~ s/\/[^\/]*$//; + $cwd =~ s/\\\//\//g; + `echo '$cwd' > \$HOME/.qtvr2erect-gui` if ($cwd =~ /^\//); +} + +`qtvr2erect '$qtvr' | \\ + zenity --progress \\ + --title='Converting QTVR' \\ + --auto-close \\ + --pulsate \\ + --text='Processing: $qtvr'`; + +`zenity --info \\ + --title='equirectangular created' \\ + --text='$qtvr.tif'`; + +exit 0; + Property changes on: trunk/Panotools-Script/bin/qtvr2erect-gui ___________________________________________________________________ Name: svn:executable + * Added: trunk/Panotools-Script/bin/tif2svg-gui =================================================================== --- trunk/Panotools-Script/bin/tif2svg-gui (rev 0) +++ trunk/Panotools-Script/bin/tif2svg-gui 2007-07-19 21:41:23 UTC (rev 723) @@ -0,0 +1,49 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +my $cwd = `cat \$HOME/.tif2svg-gui` || $ENV{'HOME'}; +chomp $cwd; + +unless (`which tif2svg`) +{ + `zenity --error --text='tif2svg not found in your \$PATH'`; + exit 1; +} + +my @files; + +if (@ARGV) +{ + @files = @ARGV; +} +else +{ + my $result = `zenity --file-selection \\ + --filename=$cwd/ \\ + --title='Select TIFF files to assemble to SVG' \\ + --multiple` || exit 0; + chomp $result; + @files = split ('\|', $result); +} + +my $index = 1; + +@files = map (quotemeta, @files); +my $files = join ' ', @files; +`tif2svg $files`; + +$cwd = $files[0]; +$cwd =~ s/\/[^\/]*$//; +$cwd =~ s/\\\//\//g; +`echo '$cwd' > \$HOME/.tif2svg-gui` if ($cwd =~ /^\//); + +my $title = scalar (@files) . ' layers added to SVG'; +my $text = join ("\n", @files); + +`zenity --info \\ + --title='$title' \\ + --text='$text'`; + +exit 0; Property changes on: trunk/Panotools-Script/bin/tif2svg-gui ___________________________________________________________________ Name: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-07-20 21:28:22
|
Revision: 724 http://svn.sourceforge.net/panotools/?rev=724&view=rev Author: brunopostle Date: 2007-07-20 14:28:25 -0700 (Fri, 20 Jul 2007) Log Message: ----------- update for 0.7 release Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/META.yml trunk/Panotools-Script/lib/Panotools/Script.pm Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-07-19 21:41:23 UTC (rev 723) +++ trunk/Panotools-Script/Changes 2007-07-20 21:28:25 UTC (rev 724) @@ -1,5 +1,12 @@ Revision history for Panotools::Script. +0.07 + - new tools: qtvr2erect, tif2svg, enblend-svg + - trivial zenity gui wrappers: enblend-svg-gui, erect2qtvr-gui, process-masks-gui, pto2tiff-gui, qtvr2erect-gui, tif2svg-gui + - fixes for recent hugin updates + - pto2tiff: don't generate cropped tiff images or specify blend levels + - portability fixes: process-masks, enblend-mask, pto2tiff, erect2qtvr + 0.06 - blend any input filetypes with enblend-mask - prefer svg to tiff with enblend-mask Modified: trunk/Panotools-Script/META.yml =================================================================== --- trunk/Panotools-Script/META.yml 2007-07-19 21:41:23 UTC (rev 723) +++ trunk/Panotools-Script/META.yml 2007-07-20 21:28:25 UTC (rev 724) @@ -1,12 +1,13 @@ # http://module-build.sourceforge.net/META-spec.html #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# name: Panotools-Script -version: 0.06 +version: 0.07 version_from: lib/Panotools/Script.pm installdirs: site requires: Image::Magick: 5 Math::Matrix: 0.4 + Storable: 2.0 distribution_type: module generated_by: ExtUtils::MakeMaker version 6.17 Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2007-07-19 21:41:23 UTC (rev 723) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2007-07-20 21:28:25 UTC (rev 724) @@ -37,7 +37,7 @@ use Storable qw/ dclone /; -our $VERSION = 0.06; +our $VERSION = 0.07; our $CLEANUP = 1; $CLEANUP = 0 if defined $ENV{DEBUG}; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2007-08-23 21:17:03
|
Revision: 730 http://panotools.svn.sourceforge.net/panotools/?rev=730&view=rev Author: brunopostle Date: 2007-08-23 14:17:06 -0700 (Thu, 23 Aug 2007) Log Message: ----------- tif2svg uses autotrace to generate initial vector paths Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/README trunk/Panotools-Script/bin/tif2svg Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2007-08-07 01:08:56 UTC (rev 729) +++ trunk/Panotools-Script/Changes 2007-08-23 21:17:06 UTC (rev 730) @@ -1,5 +1,8 @@ Revision history for Panotools::Script. +0.08 + - tif2svg uses autotrace to generate initail vector masks + 0.07 - new tools: qtvr2erect, tif2svg, enblend-svg - trivial zenity gui wrappers: enblend-svg-gui, erect2qtvr-gui, process-masks-gui, pto2tiff-gui, qtvr2erect-gui, tif2svg-gui Modified: trunk/Panotools-Script/README =================================================================== --- trunk/Panotools-Script/README 2007-08-07 01:08:56 UTC (rev 729) +++ trunk/Panotools-Script/README 2007-08-23 21:17:06 UTC (rev 730) @@ -24,7 +24,7 @@ Image::Magick This module requires 'autooptimiser' and 'nona' from hugin. Some of -the scripts require 'enblend' and ImageMagick command-line tools. +the scripts require 'enblend', 'autotrace' and ImageMagick command-line tools. The various *-gui tools require 'zenity' and will only work on Linux/unix systems. Modified: trunk/Panotools-Script/bin/tif2svg =================================================================== --- trunk/Panotools-Script/bin/tif2svg 2007-08-07 01:08:56 UTC (rev 729) +++ trunk/Panotools-Script/bin/tif2svg 2007-08-23 21:17:06 UTC (rev 730) @@ -4,6 +4,11 @@ use warnings; use Image::Magick; +use File::Temp qw/tempdir/; +use File::Spec; + +my $tempdir = tempdir (CLEANUP => 1); + my @files = grep (/\.tif$/i, @ARGV); exit unless @files; @@ -24,8 +29,35 @@ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" -width="$width" height="$height" version="1.0">|; +width="$width" height="$height" version="1.0"> +<defs>|; +for my $index (0 .. (scalar (@files) - 1)) +{ + # extract an alpha channel and convert to SVG + my $tiff = File::Spec->rel2abs ($files[$index]); + my $stub = File::Spec->catfile ($tempdir, $index); + system ('convert', $tiff, '-channel', 'matte', '-negate', '-separate', "$stub.png"); + system ('autotrace', '-background-color', '000000', '-corner-threshold', '150', + '-corner-surround', '16', '-output-format', 'svg', + '-output-file', "$stub.svg", "$stub.png"); + + open (FILE, "$stub.svg") or die "Can't open $stub.svg: $!"; + my @lines = <FILE>; + my $xml = join ('', @lines); + my @d = $xml =~ /( d="[^"]+")/gc; + + print SVG qq| + <clipPath + clipPathUnits="userSpaceOnUse" id="clipPath$index"> + <path + style="fill:#00ff00;fill-opacity:0.25;fill-rule:evenodd;stroke:#00ff00;stroke-width:1px;stroke-opacity:1" + $d[0] id="path$index" /> + </clipPath>|; +} +print SVG qq| +</defs>|; + my $index = 0; for my $file (@files) { @@ -33,8 +65,10 @@ print SVG qq| <g inkscape:groupmode="layer" id="layer$index" + style="opacity:0.75" inkscape:label="$index"> <image y="0" x="0" id="image$index" style="display:inline" + clip-path="url(#clipPath$index)" width="$width" height="$height" xlink:href="$file" /> </g>|; $index++; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |