From: <bru...@us...> - 2010-03-21 00:51:13
|
Revision: 1257 http://panotools.svn.sourceforge.net/panotools/?rev=1257&view=rev Author: brunopostle Date: 2010-03-21 00:50:50 +0000 (Sun, 21 Mar 2010) Log Message: ----------- new tool: lens-submit - collect lens and EXIF data Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL Added Paths: ----------- trunk/Panotools-Script/bin/lens-submit Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2010-03-12 00:05:56 UTC (rev 1256) +++ trunk/Panotools-Script/Changes 2010-03-21 00:50:50 UTC (rev 1257) @@ -9,6 +9,7 @@ - new tool: entile - splits images to google-maps style tiles - new tool: gmaptemplate - HTML template for viewing tiled images with Google Maps API - new tool: gigatile - crude stitching for very large panoramas + - new tool: lens-submit - collect lens and EXIF data - remove GraphViz build dependency as ptograph is superceded by Hugin layout mode - bugfix: pafextract was miscalculating FoV (Pablo d'Angelo) - Support new Mask 'k' line Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2010-03-12 00:05:56 UTC (rev 1256) +++ trunk/Panotools-Script/MANIFEST 2010-03-21 00:50:50 UTC (rev 1257) @@ -13,6 +13,7 @@ bin/gigatile bin/gmaptemplate bin/jpeg2qtvr +bin/lens-submit bin/match-n-shift bin/nona-mask bin/pafextract Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2010-03-12 00:05:56 UTC (rev 1256) +++ trunk/Panotools-Script/Makefile.PL 2010-03-21 00:50:50 UTC (rev 1257) @@ -11,11 +11,11 @@ 'bin/qtvr2erect-gui', 'bin/tif2svg-gui', 'bin/ptoinfo-gui', 'bin/ptosort', 'bin/ptovariable', 'bin/process-masks-gui', 'bin/enblend-svg-gui', 'bin/erect2qtvr-gui', 'bin/ptoclean', 'bin/gmaptemplate', 'bin/erect2mercator', 'bin/ptosplit', 'bin/ptomerge', 'bin/panostart', 'bin/ptsed', 'bin/ptscluster', - 'bin/transform-pano', 'bin/nona-mask', 'bin/qtvr2erect', 'bin/ptocentre' ], + 'bin/lens-submit', 'bin/transform-pano', 'bin/nona-mask', 'bin/qtvr2erect', 'bin/ptocentre' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION 'PREREQ_PM' => {'bytes' => 0.0, 'File::Copy' => 1.0, 'Image::ExifTool' => 6.0, - 'Getopt::Long' => 2.0, 'Pod::Usage' => 1.0, 'Getopt::Std' => 1.0, - 'Test::More' => 0.1, 'Math::Trig' => 0.1, 'File::Temp' => 0.1, + 'Getopt::Long' => 2.0, 'Pod::Usage' => 1.0, 'Getopt::Std' => 1.0, 'LWP::UserAgent' => 0.0, + 'Test::More' => 0.1, 'Math::Trig' => 0.1, 'File::Temp' => 0.1, 'URI' => 0.0, 'File::Spec' => 0.8, 'Image::Size' => 2.9, 'Storable' => 2.0}, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 (ABSTRACT_FROM => 'lib/Panotools/Script.pm', # retrieve abstract from module Added: trunk/Panotools-Script/bin/lens-submit =================================================================== --- trunk/Panotools-Script/bin/lens-submit (rev 0) +++ trunk/Panotools-Script/bin/lens-submit 2010-03-21 00:50:50 UTC (rev 1257) @@ -0,0 +1,67 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Panotools::Script; +use Image::ExifTool; +use LWP::UserAgent; +use URI; + +my $url = $ENV{LENS_URL} || 'http://oink.postle.net/'; + +my $agent = new LWP::UserAgent; +$agent->agent('lens-submit/'. $Panotools::Script::VERSION); +$agent->timeout (5); + +for my $path_pto (@ARGV) +{ + print "Project file: $path_pto\n"; + my $pto = new Panotools::Script; + $pto->Read ($path_pto); + unless (scalar @{$pto->Control} > 4) + { + print "Skipping: not enough control points\n"; next; + } + + my $image = $pto->Image->[0]; + + my $query_image = {}; + for my $parameter qw/w h f v a b c d e g t Ra Rb Rc Rd Re Va Vb Vc Vd Vx Vy/ + { + $query_image->{$parameter} = $image->{$parameter} + if defined $image->{$parameter}; + } + + my $path_photo = $image->Path ($path_pto); + unless (-e $path_photo) + { + print "Skipping: Can't find $path_photo\n"; next; + } + + my $exiftool = new Image::ExifTool; + $exiftool->Options (PrintConv => 0); + my $photo = $exiftool->ImageInfo ($path_photo); + unless (defined $photo->{Make} and defined $photo->{Model}) + { + print "Skipping: Incomplete EXIF\n"; next; + } + + my $query_photo = {}; + for my $parameter qw/ColorSpace ExifVersion FileType FNumber FocalLength FOV + FocalLengthIn35mmFormat ImageHeight ImageWidth Lens LensModel LensType Make + Model ResolutionUnit ScaleFactor35efl Software SubjectDistanceRange XResolution + YResolution/ + { + $query_photo->{$parameter} = $photo->{$parameter} + if defined $photo->{$parameter}; + } + + my $uri = new URI ($url); + $uri->query_form (%{$query_image}, %{$query_photo}); + + my $response = $agent->get ($uri->as_string); + + if ($response->is_success) {print 'Submitted: '} + else {print 'Failed: '} + print $query_photo->{Make} .' '. $query_photo->{Model} + .' : '. $response->status_line ."\n"; +} Property changes on: trunk/Panotools-Script/bin/lens-submit ___________________________________________________________________ Added: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2010-03-25 00:23:16
|
Revision: 1258 http://panotools.svn.sourceforge.net/panotools/?rev=1258&view=rev Author: brunopostle Date: 2010-03-25 00:23:09 +0000 (Thu, 25 Mar 2010) Log Message: ----------- lens-submit: include digest of .pto project for duplicate checking Modified Paths: -------------- trunk/Panotools-Script/bin/lens-submit trunk/Panotools-Script/lib/Panotools/Script.pm Modified: trunk/Panotools-Script/bin/lens-submit =================================================================== --- trunk/Panotools-Script/bin/lens-submit 2010-03-21 00:50:50 UTC (rev 1257) +++ trunk/Panotools-Script/bin/lens-submit 2010-03-25 00:23:09 UTC (rev 1258) @@ -56,7 +56,7 @@ } my $uri = new URI ($url); - $uri->query_form (%{$query_image}, %{$query_photo}); + $uri->query_form (%{$query_image}, %{$query_photo}, md5 => $pto->{md5}); my $response = $agent->get ($uri->as_string); Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2010-03-21 00:50:50 UTC (rev 1257) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2010-03-25 00:23:09 UTC (rev 1258) @@ -31,6 +31,7 @@ use Panotools::Script::Line::ControlMorph; use Panotools::Script::Line::Variable; use Panotools::Script::Line::Mask; +use Digest::MD5 'md5_hex'; use File::Temp qw/ tempdir /; use File::Spec; @@ -95,6 +96,8 @@ my @raw = <FILE>; close FILE; + $self->{md5} = md5_hex (join '', @raw); + my ($volume, $directories, $file) = File::Spec->splitpath ($path); for my $line (@raw) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2010-04-07 21:32:26
|
Revision: 1263 http://panotools.svn.sourceforge.net/panotools/?rev=1263&view=rev Author: brunopostle Date: 2010-04-07 21:32:20 +0000 (Wed, 07 Apr 2010) Log Message: ----------- On BSD use gmake Modified Paths: -------------- trunk/Panotools-Script/lib/Panotools/Makefile.pm trunk/Panotools-Script/t/101.makerule.t Modified: trunk/Panotools-Script/lib/Panotools/Makefile.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Makefile.pm 2010-04-07 20:14:31 UTC (rev 1262) +++ trunk/Panotools-Script/lib/Panotools/Makefile.pm 2010-04-07 21:32:20 UTC (rev 1263) @@ -14,6 +14,10 @@ prone to error, this library provides a simple perl interface for assembling Makefiles. +Note GNU make syntax is assumed, i.e. on BSD systems where pmake is the default +you will have to switch to gmake if you want to work with weirdly named targets +containing special characters such as spaces or parentheses. + =cut use strict; @@ -144,7 +148,9 @@ my $tempdir = tempdir (CLEANUP => 1); my $path_makefile = File::Spec->catfile ($tempdir, 'Makefile'); $self->Write ($path_makefile); - system ('make', '-f', $path_makefile, @_); + my $make_exe = 'make'; + $make_exe = 'gmake' if ($^O =~ /bsd$/); + system ($make_exe, '-f', $path_makefile, @_); return 1 if ($? == 0); return 0; } Modified: trunk/Panotools-Script/t/101.makerule.t =================================================================== --- trunk/Panotools-Script/t/101.makerule.t 2010-04-07 20:14:31 UTC (rev 1262) +++ trunk/Panotools-Script/t/101.makerule.t 2010-04-07 21:32:20 UTC (rev 1263) @@ -111,7 +111,9 @@ print MAKE $rule->Assemble; close MAKE; chdir $tempdir; - system ('make'); + my $make_exe = 'make'; + $make_exe = 'gmake' if ($^O =~ /bsd$/); + system ($make_exe); return 1 if -e $filename_out; print $rule->Assemble; return 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2010-04-16 21:43:51
|
Revision: 1269 http://panotools.svn.sourceforge.net/panotools/?rev=1269&view=rev Author: brunopostle Date: 2010-04-16 21:43:45 +0000 (Fri, 16 Apr 2010) Log Message: ----------- Panotools::Makefile fixes for irix/solaris Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/lib/Panotools/Makefile.pm trunk/Panotools-Script/lib/Panotools/Script.pm trunk/Panotools-Script/t/101.makerule.t Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2010-04-11 10:46:49 UTC (rev 1268) +++ trunk/Panotools-Script/Changes 2010-04-16 21:43:45 UTC (rev 1269) @@ -1,5 +1,8 @@ Revision history for Panotools::Script. +0.26 + - Panotools::Makefile fixes for irix/solaris + 0.25 - Image Radius() method and Panotools::Script OptimalWidth() method - match-n-shift calculate panorama pixel size Modified: trunk/Panotools-Script/lib/Panotools/Makefile.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Makefile.pm 2010-04-11 10:46:49 UTC (rev 1268) +++ trunk/Panotools-Script/lib/Panotools/Makefile.pm 2010-04-16 21:43:45 UTC (rev 1269) @@ -149,7 +149,7 @@ my $path_makefile = File::Spec->catfile ($tempdir, 'Makefile'); $self->Write ($path_makefile); my $make_exe = 'make'; - $make_exe = 'gmake' if ($^O =~ /bsd$/); + $make_exe = 'gmake' if ($^O =~ /^(.*bsd|irix|solaris|sunos)$/); system ($make_exe, '-f', $path_makefile, @_); return 1 if ($? == 0); return 0; Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2010-04-11 10:46:49 UTC (rev 1268) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2010-04-16 21:43:45 UTC (rev 1269) @@ -39,7 +39,7 @@ use Storable qw/ dclone /; -our $VERSION = '0.25'; +our $VERSION = '0.26'; our $CLEANUP = 1; $CLEANUP = 0 if defined $ENV{DEBUG}; Modified: trunk/Panotools-Script/t/101.makerule.t =================================================================== --- trunk/Panotools-Script/t/101.makerule.t 2010-04-11 10:46:49 UTC (rev 1268) +++ trunk/Panotools-Script/t/101.makerule.t 2010-04-16 21:43:45 UTC (rev 1269) @@ -112,7 +112,9 @@ close MAKE; chdir $tempdir; my $make_exe = 'make'; - $make_exe = 'gmake' if ($^O =~ /bsd$/); + # On bsd/irix/solaris 'make' doesn't support escaping special characters. + # We need to use GNU make (gmake) on these platforms. + $make_exe = 'gmake' if ($^O =~ /^(.*bsd|irix|solaris|sunos)$/); system ($make_exe); return 1 if -e $filename_out; print $rule->Assemble; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2010-04-18 19:37:55
|
Revision: 1270 http://panotools.svn.sourceforge.net/panotools/?rev=1270&view=rev Author: brunopostle Date: 2010-04-18 19:37:49 +0000 (Sun, 18 Apr 2010) Log Message: ----------- Apparently on darwin 0.0 is actually 2.37159346180998e-06 Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/t/033.points.t Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2010-04-16 21:43:45 UTC (rev 1269) +++ trunk/Panotools-Script/Changes 2010-04-18 19:37:49 UTC (rev 1270) @@ -2,6 +2,7 @@ 0.26 - Panotools::Makefile fixes for irix/solaris + - tests: workaround math on Darwin 0.25 - Image Radius() method and Panotools::Script OptimalWidth() method Modified: trunk/Panotools-Script/t/033.points.t =================================================================== --- trunk/Panotools-Script/t/033.points.t 2010-04-16 21:43:45 UTC (rev 1269) +++ trunk/Panotools-Script/t/033.points.t 2010-04-18 19:37:49 UTC (rev 1270) @@ -24,7 +24,7 @@ $p->Control->[1] = new Panotools::Script::Line::Control; $p->Control->[1]->Set (N => 0, n => 1, X => 50, Y => 50, x => 50, y => 50); -is ($p->Control->[0]->Distance ($p), 0, 'points are 0 pixel distance'); +ok ($p->Control->[0]->Distance ($p) < 0.00001, 'points are 0 pixel distance'); is ($p->Control->[1]->Distance ($p), 250, 'points are 250 pixel distance'); $p->Transform (10,20,30); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2010-08-09 08:36:44
|
Revision: 1291 http://panotools.svn.sourceforge.net/panotools/?rev=1291&view=rev Author: brunopostle Date: 2010-08-09 08:36:38 +0000 (Mon, 09 Aug 2010) Log Message: ----------- New tool ptohalve, resizes Hugin projects Modified Paths: -------------- trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL trunk/Panotools-Script/dos/make_exe.pl Added Paths: ----------- trunk/Panotools-Script/bin/ptohalve Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2010-08-09 03:57:06 UTC (rev 1290) +++ trunk/Panotools-Script/MANIFEST 2010-08-09 08:36:38 UTC (rev 1291) @@ -30,6 +30,7 @@ bin/ptofill bin/ptoget bin/ptograph +bin/ptohalve bin/ptoinfo bin/ptoinfo-gui bin/ptomerge Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2010-08-09 03:57:06 UTC (rev 1290) +++ trunk/Panotools-Script/Makefile.PL 2010-08-09 08:36:38 UTC (rev 1291) @@ -5,7 +5,7 @@ 'NAME' => 'Panotools::Script', 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/pafextract', 'bin/pto2mk2', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/match-n-shift', 'bin/ptoset', - 'bin/process-masks', 'bin/erect2planet', 'bin/ptograph', 'bin/ptoget', 'bin/enfuse-mask', + 'bin/process-masks', 'bin/erect2planet', 'bin/ptograph', 'bin/ptoget', 'bin/enfuse-mask', 'bin/ptohalve', 'bin/ptochain', 'bin/ptobind', 'bin/ptofill', 'bin/gigastart', 'bin/entile', 'bin/gigatile', 'bin/tif2svg', 'bin/enblend-svg', 'bin/ptoinfo', 'bin/ptopath', 'bin/ptodummy', 'bin/ptoanchor', 'bin/qtvr2erect-gui', 'bin/tif2svg-gui', 'bin/ptoinfo-gui', 'bin/ptosort', 'bin/ptovariable', Added: trunk/Panotools-Script/bin/ptohalve =================================================================== --- trunk/Panotools-Script/bin/ptohalve (rev 0) +++ trunk/Panotools-Script/bin/ptohalve 2010-08-09 08:36:38 UTC (rev 1291) @@ -0,0 +1,102 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Panotools::Script; +use Getopt::Long; +use Pod::Usage; + +my $path_output; +my $help = 0; + +GetOptions ('o|output=s' => \$path_output, + 'h|help' => \$help); + +pod2usage (-verbose => 2) if $help; + +my $path_pto = shift || pod2usage; +die "Can't find $path_pto" unless -e $path_pto; + +my $p = new Panotools::Script; +$p->Read ($path_pto); + +$p->Panorama->{w} = int ($p->Panorama->{w} / 2); +$p->Panorama->{h} = int ($p->Panorama->{h} / 2); + +for my $i (@{$p->Image}) +{ + die 'photo '. $i->{n} .' dimensions not multiple of two' + unless ($i->{w} %2 == 0 and $i->{h} %2 == 0); + $i->{w} /= 2; + $i->{h} /= 2; + $i->{d} /= 2 if $i->{d} =~ /^[-0-9.]+$/; + $i->{e} /= 2 if $i->{e} =~ /^[-0-9.]+$/; + $i->{Vx} /= 2 if $i->{Vx} =~ /^[-0-9.]+$/; + $i->{Vy} /= 2 if $i->{Vy} =~ /^[-0-9.]+$/; + + if (defined $i->{S}) + { + my @S = split (',', $i->{S}); + @S = map {int ($_ / 2)} @S; + $i->{S} = join ',', @S; + } +} + +for my $c (@{$p->Control}) +{ + $c->{x} /= 2; + $c->{y} /= 2; + $c->{X} /= 2; + $c->{Y} /= 2; +} + +for my $k (@{$p->Mask}) +{ + my $string = $k->{p}; + $string =~ s/"//g; + my @p = split (' ', $string); + @p = map {int ($_ / 2)} @p; + $k->{p} = '"'. (join ' ', @p) .'"'; +} + +$p->Write ($path_output); + +exit 0; + +__END__ + +=head1 NAME + +ptohalve - rescale a panorama project + +=head1 SYNOPSIS + +ptoclean [options] --output halved.pto project.pto + + Options: + -o | --output Filename of pruned project (can be the the same as the input) + -h | --help Outputs help documentation + +=head1 DESCRIPTION + +B<ptohalve> takes a hugin .pto project and halves all pixel dimensions. It +will fail if any photos have non-even pixel dimensions. If it succeeds you will +need to rescale the photos to match: + + mogrify -geometry 50% *.JPG + +=head1 LICENSE + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +=head1 SEE ALSO + +L<http://hugin.sourceforge.net/> + +=head1 AUTHOR + +Bruno Postle - July 2010. + +=cut Property changes on: trunk/Panotools-Script/bin/ptohalve ___________________________________________________________________ Added: svn:executable + * Modified: trunk/Panotools-Script/dos/make_exe.pl =================================================================== --- trunk/Panotools-Script/dos/make_exe.pl 2010-08-09 03:57:06 UTC (rev 1290) +++ trunk/Panotools-Script/dos/make_exe.pl 2010-08-09 08:36:38 UTC (rev 1291) @@ -33,6 +33,7 @@ ptofill ptoget ptograph +ptohalve ptoinfo ptomerge ptopath This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2010-09-03 21:52:48
|
Revision: 1296 http://panotools.svn.sourceforge.net/panotools/?rev=1296&view=rev Author: brunopostle Date: 2010-09-03 21:52:42 +0000 (Fri, 03 Sep 2010) Log Message: ----------- Use 'copy' instead of 'cp' on windows when running tests Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/t/101.makerule.t trunk/Panotools-Script/t/106.photos.t Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2010-09-01 21:35:20 UTC (rev 1295) +++ trunk/Panotools-Script/Changes 2010-09-03 21:52:42 UTC (rev 1296) @@ -3,6 +3,7 @@ 0.26 - Panotools::Makefile fixes for irix/solaris - tests: workaround math on Darwin + - tests: Use 'copy' instead of 'cp' on windows when running tests - new tools: ptohalve - resizes pto project files 0.25 Modified: trunk/Panotools-Script/t/101.makerule.t =================================================================== --- trunk/Panotools-Script/t/101.makerule.t 2010-09-01 21:35:20 UTC (rev 1295) +++ trunk/Panotools-Script/t/101.makerule.t 2010-09-03 21:52:42 UTC (rev 1296) @@ -97,7 +97,14 @@ $rule->Targets ($filename_out); $rule->Prerequisites ($filename); - $rule->Command ('cp', '--', $filename, $filename_out); + if ($^O =~ /^MSWin/) + { + $rule->Command ('copy', $filename, $filename_out); + } + else + { + $rule->Command ('cp', '--', $filename, $filename_out); + } my $tempdir = tempdir (CLEANUP => 1); my $file = File::Spec->catfile ($tempdir, $filename); Modified: trunk/Panotools-Script/t/106.photos.t =================================================================== --- trunk/Panotools-Script/t/106.photos.t 2010-09-01 21:35:20 UTC (rev 1295) +++ trunk/Panotools-Script/t/106.photos.t 2010-09-03 21:52:42 UTC (rev 1296) @@ -51,6 +51,11 @@ ok ($photos->Bracketed == 1); ok ($photos->Layered == 0); +# http://www.cpantesters.org/cpan/report/6a000430-b5c0-11df-af27-ffdf23310e15 +ok (Panotools::Photos::_longer ('2', '1/4'), '_longer'); +ok (Panotools::Photos::_longer ('1/2', '1/4'), '_longer'); +ok (Panotools::Photos::_longer ('2', '1/2'), '_longer'); + # sequences have to be in strict order $photos->[6] = {path => 'IMG_0007.JPG', exif => {ExposureTime => '1/4'}}; $photos->[7] = {path => 'IMG_0008.JPG', exif => {ExposureTime => '1/2'}}; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2011-01-08 23:34:48
|
Revision: 1314 http://panotools.svn.sourceforge.net/panotools/?rev=1314&view=rev Author: brunopostle Date: 2011-01-08 23:34:41 +0000 (Sat, 08 Jan 2011) Log Message: ----------- New ptodouble tool, complement to ptohalve Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL trunk/Panotools-Script/bin/ptohalve trunk/Panotools-Script/dos/make_exe.pl Added Paths: ----------- trunk/Panotools-Script/bin/ptodouble Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2011-01-07 03:42:08 UTC (rev 1313) +++ trunk/Panotools-Script/Changes 2011-01-08 23:34:41 UTC (rev 1314) @@ -4,7 +4,7 @@ - Panotools::Makefile fixes for irix/solaris - tests: workaround math on Darwin - tests: Use 'copy' instead of 'cp' on windows when running tests - - new tools: ptohalve - resizes pto project files + - new tools: ptohalve and ptodouble - resizes pto project files 0.25 - Image Radius() method and Panotools::Script OptimalWidth() method Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2011-01-07 03:42:08 UTC (rev 1313) +++ trunk/Panotools-Script/MANIFEST 2011-01-08 23:34:41 UTC (rev 1314) @@ -26,6 +26,7 @@ bin/ptocentre bin/ptochain bin/ptoclean +bin/ptodouble bin/ptodummy bin/ptofill bin/ptoget Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2011-01-07 03:42:08 UTC (rev 1313) +++ trunk/Panotools-Script/Makefile.PL 2011-01-08 23:34:41 UTC (rev 1314) @@ -4,7 +4,7 @@ WriteMakefile( 'NAME' => 'Panotools::Script', 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/pafextract', 'bin/pto2mk2', - 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/match-n-shift', 'bin/ptoset', + 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/match-n-shift', 'bin/ptoset', 'bin/ptodouble', 'bin/process-masks', 'bin/erect2planet', 'bin/ptograph', 'bin/ptoget', 'bin/enfuse-mask', 'bin/ptohalve', 'bin/ptochain', 'bin/ptobind', 'bin/ptofill', 'bin/gigastart', 'bin/entile', 'bin/gigatile', 'bin/tif2svg', 'bin/enblend-svg', 'bin/ptoinfo', 'bin/ptopath', 'bin/ptodummy', 'bin/ptoanchor', Added: trunk/Panotools-Script/bin/ptodouble =================================================================== --- trunk/Panotools-Script/bin/ptodouble (rev 0) +++ trunk/Panotools-Script/bin/ptodouble 2011-01-08 23:34:41 UTC (rev 1314) @@ -0,0 +1,104 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Panotools::Script; +use Getopt::Long; +use Pod::Usage; + +my $path_output; +my $help = 0; + +GetOptions ('o|output=s' => \$path_output, + 'h|help' => \$help); + +pod2usage (-verbose => 2) if $help; + +my $path_pto = shift || pod2usage; +die "Can't find $path_pto" unless -e $path_pto; + +my $p = new Panotools::Script; +$p->Read ($path_pto); + +$p->Panorama->{w} *= 2; +$p->Panorama->{h} *= 2; + +for my $i (@{$p->Image}) +{ + $i->{w} *= 2; + $i->{h} *= 2; + $i->{d} *= 2 if $i->{d} =~ /^[-0-9.]+$/; + $i->{e} *= 2 if $i->{e} =~ /^[-0-9.]+$/; + $i->{Vx} *= 2 if $i->{Vx} =~ /^[-0-9.]+$/; + $i->{Vy} *= 2 if $i->{Vy} =~ /^[-0-9.]+$/; + + if (defined $i->{S}) + { + my @S = split (',', $i->{S}); + @S = map {int ($_ * 2)} @S; + $i->{S} = join ',', @S; + } +} + +for my $c (@{$p->Control}) +{ + $c->{x} *= 2; + $c->{y} *= 2; + $c->{X} *= 2; + $c->{Y} *= 2; +} + +for my $k (@{$p->Mask}) +{ + my $string = $k->{p}; + $string =~ s/"//g; + my @p = split (' ', $string); + @p = map {int ($_ * 2)} @p; + $k->{p} = '"'. (join ' ', @p) .'"'; +} + +$p->Write ($path_output); + +exit 0; + +__END__ + +=head1 NAME + +ptodouble - rescale a panorama project + +=head1 SYNOPSIS + +ptodouble [options] --output doubled.pto project.pto + + Options: + -o | --output Filename of scaled project (can be the the same as the input) + -h | --help Outputs help documentation + +=head1 DESCRIPTION + +B<ptodouble> takes a hugin .pto project and doubles all pixel dimensions. +You will need to rescale the photos to match: + + mogrify -geometry 200% *.JPG + +Note, this tool is useful in conjunction with the L<ptohalve> tool which +performs the opposite transform. + +=head1 LICENSE + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +=head1 SEE ALSO + +L<http://hugin.sourceforge.net/> + +L<ptohalve> + +=head1 AUTHOR + +Bruno Postle - January 2011. + +=cut Property changes on: trunk/Panotools-Script/bin/ptodouble ___________________________________________________________________ Added: svn:executable + * Modified: trunk/Panotools-Script/bin/ptohalve =================================================================== --- trunk/Panotools-Script/bin/ptohalve 2011-01-07 03:42:08 UTC (rev 1313) +++ trunk/Panotools-Script/bin/ptohalve 2011-01-08 23:34:41 UTC (rev 1314) @@ -70,10 +70,10 @@ =head1 SYNOPSIS -ptoclean [options] --output halved.pto project.pto +ptohalve [options] --output halved.pto project.pto Options: - -o | --output Filename of pruned project (can be the the same as the input) + -o | --output Filename of scaled project (can be the the same as the input) -h | --help Outputs help documentation =head1 DESCRIPTION @@ -84,6 +84,9 @@ mogrify -geometry 50% *.JPG +Note, this tool is useful in conjunction with the L<ptodouble> tool which +performs the opposite transform. + =head1 LICENSE This program is free software; you can redistribute it and/or @@ -95,6 +98,8 @@ L<http://hugin.sourceforge.net/> +L<ptodouble> + =head1 AUTHOR Bruno Postle - July 2010. Modified: trunk/Panotools-Script/dos/make_exe.pl =================================================================== --- trunk/Panotools-Script/dos/make_exe.pl 2011-01-07 03:42:08 UTC (rev 1313) +++ trunk/Panotools-Script/dos/make_exe.pl 2011-01-08 23:34:41 UTC (rev 1314) @@ -29,6 +29,7 @@ ptocentre ptochain ptoclean +ptodouble ptodummy ptofill ptoget This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2011-01-13 00:05:29
|
Revision: 1318 http://panotools.svn.sourceforge.net/panotools/?rev=1318&view=rev Author: brunopostle Date: 2011-01-13 00:05:23 +0000 (Thu, 13 Jan 2011) Log Message: ----------- ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/bin/ptoanchor Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2011-01-11 20:38:25 UTC (rev 1317) +++ trunk/Panotools-Script/Changes 2011-01-13 00:05:23 UTC (rev 1318) @@ -1,6 +1,7 @@ Revision history for Panotools::Script. 0.26 + - ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 - Panotools::Makefile fixes for irix/solaris - tests: workaround math on Darwin - tests: Use 'copy' instead of 'cp' on windows when running tests Modified: trunk/Panotools-Script/bin/ptoanchor =================================================================== --- trunk/Panotools-Script/bin/ptoanchor 2011-01-11 20:38:25 UTC (rev 1317) +++ trunk/Panotools-Script/bin/ptoanchor 2011-01-13 00:05:23 UTC (rev 1318) @@ -32,8 +32,7 @@ $mk->Variable ('PTOSPLIT', 'ptosplit'); $mk->Variable ('PTOMERGE', 'ptomerge'); $mk->Variable ('PTOVARIABLE', 'ptovariable'); -$mk->Variable ('APSC', 'autopano-sift-c'); -$mk->Variable ('CELESTE', '-', 'celeste_standalone'); +$mk->Variable ('CPFIND', 'cpfind'); $mk->Variable ('CPCLEAN', 'cpclean'); $mk->Variable ('ALIGNIMAGESTACK', 'align_image_stack'); $mk->Variable ('AUTOOPTIMISER', 'autooptimiser'); @@ -95,13 +94,10 @@ $var_layer_a->Values ('$(PREFIX)_layer_'. $id_el .'.a.pto'); my $var_layer_b = $mk->Variable ('LAYER_'. $id_el .'_B'); $var_layer_b->Values ('$(PREFIX)_layer_'. $id_el .'.b.pto'); - my $var_layer_c = $mk->Variable ('LAYER_'. $id_el .'_C'); - $var_layer_c->Values ('$(PREFIX)_layer_'. $id_el .'.c.pto'); my $var_layer_d = $mk->Variable ('LAYER_'. $id_el .'_D'); $var_layer_d->Values ('$(PREFIX)_layer_'. $id_el .'.d.pto'); - $var_tempfiles->Values ($var_layer_a->NameRef, $var_layer_b->NameRef, - $var_layer_c->NameRef, $var_layer_d->NameRef); + $var_tempfiles->Values ($var_layer_a->NameRef, $var_layer_b->NameRef, $var_layer_d->NameRef); $mk->Comment ('Input photos for this layer'); my $var_layer_input = $mk->Variable ('LAYER_'. $id_el .'_INPUT'); @@ -115,18 +111,12 @@ $rule = $mk->Rule ($var_layer_b->NameRef); $rule->Prerequisites ($var_layer_a->NameRef, $var_layer_input->NameRef); - $rule->Command ('$(APSC_SHELL)', '--maxdim', $pix_max, @refine, '--ransac', $ransac, - '--maxmatches', $points, $var_layer_b->NameRefShell, $var_layer_a->NameRefShell); + $rule->Command ('$(CPFIND_SHELL)', '--celeste', '-o', $var_layer_b->NameRefShell, $var_layer_a->NameRefShell); - $rule = $mk->Rule ($var_layer_c->NameRef); - $rule->Prerequisites ($var_layer_b->NameRef, $var_layer_input->NameRef); - $rule->Command ('$(CELESTE_SHELL)', '-i', $var_layer_b->NameRefShell, - '-o', $var_layer_c->NameRefShell); - $rule = $mk->Rule ($var_layer_d->NameRef); - $rule->Prerequisites ($var_layer_c->NameRef); + $rule->Prerequisites ($var_layer_b->NameRef); $rule->Command ('$(CPCLEAN_SHELL)', '-n', 1.5, - '-o', $var_layer_d->NameRefShell, $var_layer_c->NameRefShell); + '-o', $var_layer_d->NameRefShell, $var_layer_b->NameRefShell); $var_layers->Values ($var_layer_d->NameRef); } @@ -194,13 +184,12 @@ $mk->Comment ('Some intermediate .pto project files'); $mk->Variable ('SIMPLE_A', '$(PREFIX)_simple.a.pto'); - $mk->Variable ('SIMPLE_B', '$(PREFIX)_simple.b.pto'); $mk->Variable ('SIMPLE_C', '$(PREFIX)_simple.c.pto'); $mk->Variable ('SIMPLE_D', '$(PREFIX)_simple.d.pto'); $mk->Variable ('SIMPLE_E', '$(PREFIX)_simple.e.pto'); $mk->Variable ('SIMPLE_F', '$(PREFIX)_simple.f.pto'); - $var_tempfiles->Values ('$(SIMPLE_A)', '$(SIMPLE_B)', '$(SIMPLE_C)', '$(SIMPLE_D)', '$(SIMPLE_E)', '$(SIMPLE_F)'); + $var_tempfiles->Values ('$(SIMPLE_A)', '$(SIMPLE_C)', '$(SIMPLE_D)', '$(SIMPLE_E)', '$(SIMPLE_F)'); $mk->Comment ('All input photos'); $mk->Variable ('INPUT_IMAGES', map {$_->Path} @{$pto->Image}); @@ -209,17 +198,11 @@ $rule = $mk->Rule ('$(SIMPLE_A)'); $rule->Prerequisites ('$(PROJECT_FILE)', '$(INPUT_IMAGES)'); - $rule->Command ('$(APSC_SHELL)', '--maxdim', $pix_max, @refine, '--ransac', $ransac, - '--maxmatches', $points, '$(SIMPLE_A_SHELL)', '$(PROJECT_FILE_SHELL)'); + $rule->Command ('$(CPFIND_SHELL)', '--celeste', '-o', '$(SIMPLE_A_SHELL)', '$(PROJECT_FILE_SHELL)'); - $rule = $mk->Rule ('$(SIMPLE_B)'); - $rule->Prerequisites ('$(SIMPLE_A)', '$(INPUT_IMAGES)'); - $rule->Command ('$(CELESTE_SHELL)', '-i', '$(SIMPLE_A_SHELL)', - '-o', '$(SIMPLE_B_SHELL)'); - $rule = $mk->Rule ('$(SIMPLE_C)'); - $rule->Prerequisites ('$(SIMPLE_B)'); - $rule->Command ('$(CPCLEAN_SHELL)', '-o', '$(SIMPLE_C_SHELL)', '$(SIMPLE_B_SHELL)'); + $rule->Prerequisites ('$(SIMPLE_A)'); + $rule->Command ('$(CPCLEAN_SHELL)', '-o', '$(SIMPLE_C_SHELL)', '$(SIMPLE_A_SHELL)'); $rule = $mk->Rule ('$(SIMPLE_D)'); $rule->Prerequisites ('$(SIMPLE_C)', '$(PROJECT_FILE)'); @@ -276,14 +259,6 @@ Stacks are passed to align_image_stack for processing, but need to be indicated with 'i-line' 'j' parameters in the input project file. -Control point generator parameters are set via Option lines in the input -project: - - #hugin_cpgenSize 1500 - #hugin_cpgenNumber 25 - #hugin_cpgenRansac true - #hugin_cpgenRefine false - =head1 LICENSE This program is free software; you can redistribute it and/or This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2011-05-30 23:52:31
|
Revision: 1327 http://panotools.svn.sourceforge.net/panotools/?rev=1327&view=rev Author: brunopostle Date: 2011-05-30 23:52:25 +0000 (Mon, 30 May 2011) Log Message: ----------- fix Transform() bug with linked stacks Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2011-03-02 21:29:55 UTC (rev 1326) +++ trunk/Panotools-Script/Changes 2011-05-30 23:52:25 UTC (rev 1327) @@ -6,6 +6,7 @@ - tests: workaround math on Darwin - tests: Use 'copy' instead of 'cp' on windows when running tests - new tools: ptohalve and ptodouble - resizes pto project files + - fix Transform() bug with linked stacks 0.25 - Image Radius() method and Panotools::Script OptimalWidth() method Modified: trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2011-03-02 21:29:55 UTC (rev 1326) +++ trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2011-05-30 23:52:25 UTC (rev 1327) @@ -174,13 +174,13 @@ my ($roll, $pitch, $yaw) = @_; my @transform_rpy = map (deg2rad ($_), ($roll, $pitch, $yaw)); my $transform_matrix = rollpitchyaw2matrix (@transform_rpy); - my @rpy = map (deg2rad ($_), ($self->{r}, $self->{p}, $self->{y})); + my @rpy = map (deg2rad ($_), ($self->r, $self->p, $self->y)); my $matrix = rollpitchyaw2matrix (@rpy); my $result = multiply ($transform_matrix, $matrix); my ($r, $p, $y) = map (rad2deg ($_), matrix2rollpitchyaw ($result)); - $self->{r} = $r; - $self->{p} = $p; - $self->{y} = $y; + $self->{r} = $r unless $self->{r} =~ /=/; + $self->{p} = $p unless $self->{p} =~ /=/; + $self->{y} = $y unless $self->{y} =~ /=/; } sub _prepend This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2011-06-14 22:11:36
|
Revision: 1330 http://panotools.svn.sourceforge.net/panotools/?rev=1330&view=rev Author: brunopostle Date: 2011-06-14 22:11:30 +0000 (Tue, 14 Jun 2011) Log Message: ----------- remove linux desktop entries for tif2svg-gui enblend-svg process-masks-gui qtvr2erect-gui Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST Removed Paths: ------------- trunk/Panotools-Script/desktop/enblend-svg.desktop trunk/Panotools-Script/desktop/process-masks-gui.desktop trunk/Panotools-Script/desktop/qtvr2erect-gui.desktop trunk/Panotools-Script/desktop/tif2svg-gui.desktop Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2011-06-14 22:10:19 UTC (rev 1329) +++ trunk/Panotools-Script/Changes 2011-06-14 22:11:30 UTC (rev 1330) @@ -1,5 +1,8 @@ Revision history for Panotools::Script. +0.27 + - remove linux desktop entries for tif2svg-gui enblend-svg process-masks-gui qtvr2erect-gui + 0.26 - ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 - Panotools::Makefile fixes for irix/solaris Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2011-06-14 22:10:19 UTC (rev 1329) +++ trunk/Panotools-Script/MANIFEST 2011-06-14 22:11:30 UTC (rev 1330) @@ -48,14 +48,10 @@ bin/tif2svg-gui bin/transform-pano Changes -desktop/enblend-svg.desktop desktop/erect2qtvr-gui.desktop desktop/img2pto.desktop -desktop/process-masks-gui.desktop desktop/ptoinfo-gui.desktop -desktop/qtvr2erect-gui.desktop desktop/README -desktop/tif2svg-gui.desktop doc/match-n-shift.svg dos/make_exe.pl lib/Panotools/Makefile.pm Deleted: trunk/Panotools-Script/desktop/enblend-svg.desktop =================================================================== --- trunk/Panotools-Script/desktop/enblend-svg.desktop 2011-06-14 22:10:19 UTC (rev 1329) +++ trunk/Panotools-Script/desktop/enblend-svg.desktop 2011-06-14 22:11:30 UTC (rev 1330) @@ -1,12 +0,0 @@ -[Desktop Entry] -Version=1.0 -Encoding=UTF-8 -Name=Enblend SVG blender -Comment=Split and blend SVG layers -Exec=enblend-svg-gui %f -Icon=hugin -Terminal=false -Type=Application -Categories=Graphics; -MimeType=image/svg+xml; -GenericName=SVG layer blender Deleted: trunk/Panotools-Script/desktop/process-masks-gui.desktop =================================================================== --- trunk/Panotools-Script/desktop/process-masks-gui.desktop 2011-06-14 22:10:19 UTC (rev 1329) +++ trunk/Panotools-Script/desktop/process-masks-gui.desktop 2011-06-14 22:11:30 UTC (rev 1330) @@ -1,12 +0,0 @@ -[Desktop Entry] -Version=1.0 -Encoding=UTF-8 -Name=Enblend mask processor -Comment=Convert equirectangular images to QTVR -Exec=process-masks-gui %F -Icon=hugin -Terminal=false -Type=Application -Categories=Graphics; -MimeType=image/tiff; -GenericName=Enblend mask processor Deleted: trunk/Panotools-Script/desktop/qtvr2erect-gui.desktop =================================================================== --- trunk/Panotools-Script/desktop/qtvr2erect-gui.desktop 2011-06-14 22:10:19 UTC (rev 1329) +++ trunk/Panotools-Script/desktop/qtvr2erect-gui.desktop 2011-06-14 22:11:30 UTC (rev 1330) @@ -1,12 +0,0 @@ -[Desktop Entry] -Version=1.0 -Encoding=UTF-8 -Name=QTVR extractor -Comment=Convert QTVR files to equirectangular -Exec=qtvr2erect-gui %f -Icon=hugin -Terminal=false -Type=Application -Categories=Graphics; -MimeType=video/quicktime; -GenericName=QTVR converter Deleted: trunk/Panotools-Script/desktop/tif2svg-gui.desktop =================================================================== --- trunk/Panotools-Script/desktop/tif2svg-gui.desktop 2011-06-14 22:10:19 UTC (rev 1329) +++ trunk/Panotools-Script/desktop/tif2svg-gui.desktop 2011-06-14 22:11:30 UTC (rev 1330) @@ -1,12 +0,0 @@ -[Desktop Entry] -Version=1.0 -Encoding=UTF-8 -Name=Hugin Multilayer SVG creator -Comment=Create a multilayer SVG file from multiple TIFF files -Exec=tif2svg-gui %F -Icon=hugin -Terminal=false -Type=Application -Categories=Graphics; -MimeType=image/tiff; -GenericName=Multilayer SVG creator This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2011-06-19 22:40:34
|
Revision: 1332 http://panotools.svn.sourceforge.net/panotools/?rev=1332&view=rev Author: brunopostle Date: 2011-06-19 22:40:27 +0000 (Sun, 19 Jun 2011) Log Message: ----------- new tool: ptoreset - reset photometric parameters in a .pto file Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL Added Paths: ----------- trunk/Panotools-Script/bin/ptoreset Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2011-06-19 22:35:09 UTC (rev 1331) +++ trunk/Panotools-Script/Changes 2011-06-19 22:40:27 UTC (rev 1332) @@ -2,6 +2,8 @@ 0.27 - remove linux desktop entries for tif2svg-gui enblend-svg process-masks-gui qtvr2erect-gui + - apparently there is a bsd called dragonfly + - new tool: ptoreset - reset photometric parameters in a .pto file 0.26 - ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2011-06-19 22:35:09 UTC (rev 1331) +++ trunk/Panotools-Script/MANIFEST 2011-06-19 22:40:27 UTC (rev 1332) @@ -36,6 +36,7 @@ bin/ptoinfo-gui bin/ptomerge bin/ptopath +bin/ptoreset bin/ptoset bin/ptosort bin/ptosplit Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2011-06-19 22:35:09 UTC (rev 1331) +++ trunk/Panotools-Script/Makefile.PL 2011-06-19 22:40:27 UTC (rev 1332) @@ -6,7 +6,7 @@ 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/pafextract', 'bin/pto2mk2', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/match-n-shift', 'bin/ptoset', 'bin/ptodouble', 'bin/process-masks', 'bin/erect2planet', 'bin/ptograph', 'bin/ptoget', 'bin/enfuse-mask', 'bin/ptohalve', - 'bin/ptochain', 'bin/ptobind', 'bin/ptofill', 'bin/gigastart', 'bin/entile', 'bin/gigatile', + 'bin/ptochain', 'bin/ptobind', 'bin/ptofill', 'bin/gigastart', 'bin/entile', 'bin/gigatile', 'bin/ptoreset', 'bin/tif2svg', 'bin/enblend-svg', 'bin/ptoinfo', 'bin/ptopath', 'bin/ptodummy', 'bin/ptoanchor', 'bin/qtvr2erect-gui', 'bin/tif2svg-gui', 'bin/ptoinfo-gui', 'bin/ptosort', 'bin/ptovariable', 'bin/process-masks-gui', 'bin/enblend-svg-gui', 'bin/erect2qtvr-gui', 'bin/ptoclean', 'bin/gmaptemplate', Added: trunk/Panotools-Script/bin/ptoreset =================================================================== --- trunk/Panotools-Script/bin/ptoreset (rev 0) +++ trunk/Panotools-Script/bin/ptoreset 2011-06-19 22:40:27 UTC (rev 1332) @@ -0,0 +1,117 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use Panotools::Script; +use Panotools::Photos; + +my $help = 0; + +my $path_pto; +my $eev; +my $balance; +my $response; +my $vignetting; + +GetOptions ('o|output=s' => \$path_pto, + 'e|eev' => \$eev, + 'b|balance' => \$balance, + 'r|response' => \$response, + 'v|vignetting' => \$vignetting, + 'h|help' => \$help); + +pod2usage (-verbose => 2) if $help; +pod2usage (2) unless (scalar @ARGV); + +$path_pto = $ARGV[0] unless defined $path_pto; + +my $pto = new Panotools::Script; +$pto->Read ($ARGV[0]); + +my $photos_all = new Panotools::Photos (map {$_->Path ($ARGV[0])} @{$pto->Image}); + +my @AverageRGB = $photos_all->AverageRGB; +my $sum_Eev; + +for my $id (0 .. scalar @{$photos_all} -1) +{ + my $image = $pto->Image->[$id]; + my $photo = $photos_all->[$id]; + $sum_Eev += $photos_all->Eev ($id); + + if ($eev) + { + $image->{Eev} = $photos_all->Eev ($id); + } + if ($balance) + { + $image->{Er} = 1.0; $image->{Eb} = 1.0; + $image->{Er} = $photo->{exif}->{RedBalance} / $AverageRGB[0] if $photo->{exif}->{RedBalance}; + $image->{Eb} = $photo->{exif}->{BlueBalance} / $AverageRGB[2] if $photo->{exif}->{BlueBalance}; + } + if ($response) + { + $image->{Ra} = 0; $image->{Rb} = 0; $image->{Rc} = 0; $image->{Rd} = 0; $image->{Re} = 0; + } + if ($vignetting) + { + $image->{Va} = 1; $image->{Vb} = 0; $image->{Vc} = 0; $image->{Vd} = 0; $image->{Vx} = 0; $image->{Vy} = 0; + } +} + +$pto->Panorama->{E} = sprintf ('%.3f', $sum_Eev / scalar @{$photos_all}) if ($eev); + +$pto->Write ($path_pto); + +exit 0; + +__END__ + +=head1 NAME + +ptoreset - reset photometric parameters in a .pto file + +=head1 SYNOPSIS + +ptoreset [options] --output output.pto project.pto + + Options: + -o | --output name Filename of output panorama project. + Input file is overwritten if not specified. + -e | --eev Reset Eev exposure value of photos to EXIF values + global project Eev is set to average of all photos + -b | --balance Reset white balance of photos to EXIF values + -r | --response Reset camera response of photos to EMoR default + -v | --vignetting Reset vignetting of photos to none + -h | --help Outputs help documentation. + +=head1 DESCRIPTION + +B<ptoreset> takes a Hugin .pto project file and writes it to a new file. +Optionally various photometric parameters are reset, either to EXIF values or +to sensible defaults. + +e.g. to reset all photometric parameters in a Hugin project: + + ptoreset -b -r -e -v project.pto + +=head1 LICENSE + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +=head1 SEE ALSO + +L<http://hugin.sourceforge.net/> + +=head1 AUTHOR + +Bruno Postle - June 2011. + +=cut + +=begin perl Property changes on: trunk/Panotools-Script/bin/ptoreset ___________________________________________________________________ Added: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2011-11-26 00:58:53
|
Revision: 1335 http://panotools.svn.sourceforge.net/panotools/?rev=1335&view=rev Author: brunopostle Date: 2011-11-26 00:58:46 +0000 (Sat, 26 Nov 2011) Log Message: ----------- fix gigatile bug with uncropped output (Emad ud din Bhatt) Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/bin/entile trunk/Panotools-Script/bin/gigatile Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2011-07-13 20:35:50 UTC (rev 1334) +++ trunk/Panotools-Script/Changes 2011-11-26 00:58:46 UTC (rev 1335) @@ -4,6 +4,7 @@ - remove linux desktop entries for tif2svg-gui enblend-svg process-masks-gui qtvr2erect-gui - apparently there is a bsd called dragonfly - new tool: ptoreset - reset photometric parameters in a .pto file + - fix gigatile bug with uncropped output (Emad ud din Bhatt) 0.26 - ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 Modified: trunk/Panotools-Script/bin/entile =================================================================== --- trunk/Panotools-Script/bin/entile 2011-07-13 20:35:50 UTC (rev 1334) +++ trunk/Panotools-Script/bin/entile 2011-11-26 00:58:46 UTC (rev 1335) @@ -58,7 +58,7 @@ } elsif ($w2 < $pix_tile) { - die; + exit; } else { Modified: trunk/Panotools-Script/bin/gigatile =================================================================== --- trunk/Panotools-Script/bin/gigatile 2011-07-13 20:35:50 UTC (rev 1334) +++ trunk/Panotools-Script/bin/gigatile 2011-11-26 00:58:46 UTC (rev 1335) @@ -28,6 +28,8 @@ my $pto = new Panotools::Script; $pto->Read ($path_input); +$pto->{panorama}->{S} = join (',', '0', $pto->{panorama}->{w}, '0', $pto->{panorama}->{h}) unless defined $pto->{panorama}->{S}; + for my $image (@{$pto->Image}) { $image->{n} = '"'. $image->Path ($path_input) .'"'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2012-02-01 20:57:13
|
Revision: 1337 http://panotools.svn.sourceforge.net/panotools/?rev=1337&view=rev Author: brunopostle Date: 2012-02-01 20:57:06 +0000 (Wed, 01 Feb 2012) Log Message: ----------- remove defunct ptograph tool Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL trunk/Panotools-Script/dos/make_exe.pl Removed Paths: ------------- trunk/Panotools-Script/bin/ptograph Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2011-11-28 21:06:43 UTC (rev 1336) +++ trunk/Panotools-Script/Changes 2012-02-01 20:57:06 UTC (rev 1337) @@ -5,6 +5,7 @@ - apparently there is a bsd called dragonfly - new tool: ptoreset - reset photometric parameters in a .pto file - fix gigatile bug with uncropped output (Emad ud din Bhatt) + - remove ptograph as superceded by Hugin layout mode 0.26 - ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2011-11-28 21:06:43 UTC (rev 1336) +++ trunk/Panotools-Script/MANIFEST 2012-02-01 20:57:06 UTC (rev 1337) @@ -30,7 +30,6 @@ bin/ptodummy bin/ptofill bin/ptoget -bin/ptograph bin/ptohalve bin/ptoinfo bin/ptoinfo-gui Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2011-11-28 21:06:43 UTC (rev 1336) +++ trunk/Panotools-Script/Makefile.PL 2012-02-01 20:57:06 UTC (rev 1337) @@ -5,7 +5,7 @@ 'NAME' => 'Panotools::Script', 'EXE_FILES' => [ 'bin/cubic2erect', 'bin/erect2cubic', 'bin/pafextract', 'bin/pto2mk2', 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/match-n-shift', 'bin/ptoset', 'bin/ptodouble', - 'bin/process-masks', 'bin/erect2planet', 'bin/ptograph', 'bin/ptoget', 'bin/enfuse-mask', 'bin/ptohalve', + 'bin/process-masks', 'bin/erect2planet', 'bin/ptoget', 'bin/enfuse-mask', 'bin/ptohalve', 'bin/ptochain', 'bin/ptobind', 'bin/ptofill', 'bin/gigastart', 'bin/entile', 'bin/gigatile', 'bin/ptoreset', 'bin/tif2svg', 'bin/enblend-svg', 'bin/ptoinfo', 'bin/ptopath', 'bin/ptodummy', 'bin/ptoanchor', 'bin/qtvr2erect-gui', 'bin/tif2svg-gui', 'bin/ptoinfo-gui', 'bin/ptosort', 'bin/ptovariable', Deleted: trunk/Panotools-Script/bin/ptograph =================================================================== --- trunk/Panotools-Script/bin/ptograph 2011-11-28 21:06:43 UTC (rev 1336) +++ trunk/Panotools-Script/bin/ptograph 2012-02-01 20:57:06 UTC (rev 1337) @@ -1,95 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; - -use Panotools::Script; -use GraphViz; - -for my $path_pto (@ARGV) -{ - my $pto = new Panotools::Script; - $pto->Read ($path_pto); - - my $g = GraphViz->new (directed => 0, layout => 'neato', overlap => 'false'); - - for my $index (0 .. scalar (@{$pto->Image}) - 1) - { - $g->add_node ($index, shape => 'circle'); - - # summarise control points for this image - my $results = {}; - for my $control (@{$pto->Control}) - { - my $N = $control->{N}; - my $n = $control->{n}; - next unless ($n == $index or $N == $index); - $results->{$N} += 1; - $results->{$n} += 1; - } - delete $results->{$index}; - for my $key (sort keys %{$results}) - { - next if ($index gt $key); - $g->add_edge ($index => $key, weight => $results->{$key}, label => $results->{$key}); - } - } - - my $svg = $g->as_svg; - - my @nodes = $svg =~ /(<ellipse.*?\/text>)/gs; - for my $xml_old (@nodes) - { - my ($cx, $cy, $index_real) = $xml_old =~ /cx="([-,0-9]+)".*cy="([-,0-9]+)".*>([0-9]+)<\/text>$/s; - $cx += -18; $cy += -27; - my $path_image = $pto->Image->[$index_real]->{n}; - my $xml_new = "<image x=\"$cx\" y=\"$cy\" style=\"display:inline\" - width=\"36\" height=\"54\" xlink:href=$path_image />\n"; - $svg =~ s/$xml_old/$xml_new/; - } - - open (OUTFILE, ">$path_pto.svg"); - print OUTFILE $svg; - close OUTFILE; -} - -__END__ - -=head1 NAME - -ptograph - generates undirected graph reports for .pto files - -=head1 Synopsis - - ptograph project1.pto [project2.pto ...] - -=head1 DESCRIPTION - -Takes one or more hugin .pto projects and writes an SVG report using -the same file path with .svg appended. - -Each node represents one of the input photos in the project and the edges -represent control-points connecting photos together. - -=head1 Calling syntax - - ptograph <pto-file> <pto-file> ... - -=head1 License - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -=head1 See Also - -L<http://hugin.sourceforge.net/> -L<GraphViz> - -=head1 Author - -Bruno Postle, E<lt>bruno (at) postle.netE<gt> - -=cut - Modified: trunk/Panotools-Script/dos/make_exe.pl =================================================================== --- trunk/Panotools-Script/dos/make_exe.pl 2011-11-28 21:06:43 UTC (rev 1336) +++ trunk/Panotools-Script/dos/make_exe.pl 2012-02-01 20:57:06 UTC (rev 1337) @@ -33,7 +33,6 @@ ptodummy ptofill ptoget -ptograph ptohalve ptoinfo ptomerge This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2012-02-09 20:34:12
|
Revision: 1338 http://panotools.svn.sourceforge.net/panotools/?rev=1338&view=rev Author: brunopostle Date: 2012-02-09 20:34:05 +0000 (Thu, 09 Feb 2012) Log Message: ----------- skip tests if there is no 'make' on the system https://rt.cpan.org/Ticket/Display.html?id=74756 Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/t/101.makerule.t Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2012-02-01 20:57:06 UTC (rev 1337) +++ trunk/Panotools-Script/Changes 2012-02-09 20:34:05 UTC (rev 1338) @@ -6,6 +6,7 @@ - new tool: ptoreset - reset photometric parameters in a .pto file - fix gigatile bug with uncropped output (Emad ud din Bhatt) - remove ptograph as superceded by Hugin layout mode + - skip Panotools::Makefile tests if no suitable make executable found 0.26 - ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 Modified: trunk/Panotools-Script/t/101.makerule.t =================================================================== --- trunk/Panotools-Script/t/101.makerule.t 2012-02-01 20:57:06 UTC (rev 1337) +++ trunk/Panotools-Script/t/101.makerule.t 2012-02-09 20:34:05 UTC (rev 1338) @@ -8,6 +8,18 @@ use File::Spec; use lib 'lib'; +my $make_exe = 'make'; +# On bsd/irix/solaris 'make' doesn't support escaping special characters. +# We need to use GNU make (gmake) on these platforms. +$make_exe = 'gmake' if ($^O =~ /^(.*bsd|dragonfly|irix|solaris|sunos)$/); + +unless (`$make_exe -v`) +{ + print STDERR "make not found, skipping tests..."; + ok(1); + exit; +} + use Panotools::Makefile::Rule; for my $file ('foo', 'Westward Ho!', @@ -118,10 +130,6 @@ print MAKE $rule->Assemble; close MAKE; chdir $tempdir; - my $make_exe = 'make'; - # On bsd/irix/solaris 'make' doesn't support escaping special characters. - # We need to use GNU make (gmake) on these platforms. - $make_exe = 'gmake' if ($^O =~ /^(.*bsd|dragonfly|irix|solaris|sunos)$/); system ($make_exe); return 1 if -e $filename_out; print $rule->Assemble; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2012-04-17 20:49:50
|
Revision: 1339 http://panotools.svn.sourceforge.net/panotools/?rev=1339&view=rev Author: brunopostle Date: 2012-04-17 20:49:40 +0000 (Tue, 17 Apr 2012) Log Message: ----------- Wrapper around pano_trafo for fast querying of the hugin coordinate transform Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/lib/Panotools/Script.pm Added Paths: ----------- trunk/Panotools-Script/t/201.pano_trafo.t Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2012-02-09 20:34:05 UTC (rev 1338) +++ trunk/Panotools-Script/Changes 2012-04-17 20:49:40 UTC (rev 1339) @@ -7,6 +7,7 @@ - fix gigatile bug with uncropped output (Emad ud din Bhatt) - remove ptograph as superceded by Hugin layout mode - skip Panotools::Makefile tests if no suitable make executable found + - some methods for fast querying of transformation coordinates via pano_trafo 0.26 - ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2012-02-09 20:34:05 UTC (rev 1338) +++ trunk/Panotools-Script/MANIFEST 2012-04-17 20:49:40 UTC (rev 1339) @@ -99,6 +99,7 @@ t/104.metachars.t t/105.vars.t t/106.photos.t +t/201.pano_trafo.t t/data/cemetery/dscn4905.jpg t/data/cemetery/dscn4906.jpg t/data/cemetery/dscn4907.jpg Modified: trunk/Panotools-Script/lib/Panotools/Script.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script.pm 2012-02-09 20:34:05 UTC (rev 1338) +++ trunk/Panotools-Script/lib/Panotools/Script.pm 2012-04-17 20:49:40 UTC (rev 1339) @@ -1062,7 +1062,78 @@ return int (($pix_width * $factor / 16) +1) * 16; } +=pod +Hugin ships with a tool called pano_trafo for querying the forward and reverse +transform for pixel coordinates in a PTO project. + +Initialise this as a service, spawns two pano_trafo processes which are only +killed when the perl process finishes: + + $pto->InitTrafo ('/path/to/project.pto'); + +This is very unlikely to work on non-unixy systems. + +=cut + +sub InitTrafo +{ + my $self = shift; + my $path_pto = shift || return 0; + use IPC::Open2; + use Symbol; + + my $WTR_forward = gensym; + my $RDR_forward = gensym; + my $pid_forward = open2 ($RDR_forward, $WTR_forward, 'pano_trafo', $path_pto); + $self->{trafo_forward} = {pid => $pid_forward, WTR => $WTR_forward, RDR => $RDR_forward}; + + my $WTR_reverse = gensym; + my $RDR_reverse = gensym; + my $pid_reverse = open2 ($RDR_reverse, $WTR_reverse, 'pano_trafo', '-r', $path_pto); + $self->{trafo_reverse} = {pid => $pid_reverse, WTR => $WTR_reverse, RDR => $RDR_reverse}; +} + +=pod + +Query the forward transform like so: + + ($X, $Y) = $pto->Trafo ($image_no, $x, $y); + +=cut + +sub Trafo +{ + my $self = shift; + my ($image, $x, $y) = @_; + my $WTX = $self->{trafo_forward}->{WTR}; + my $RDX = $self->{trafo_forward}->{RDR}; + print $WTX join (' ', $image, $x, $y) . "\n"; + my $result = <$RDX>; + chomp $result; + return split ' ', $result; +} + +=pod + +Query the reverse transform like so: + + ($x, $y) = $pto->TrafoReverse ($image_no, $X, $Y); + +=cut + +sub TrafoReverse +{ + my $self = shift; + my ($image, $x, $y) = @_; + my $WTX = $self->{trafo_reverse}->{WTR}; + my $RDX = $self->{trafo_reverse}->{RDR}; + print $WTX join (' ', $image, $x, $y) . "\n"; + my $result = <$RDX>; + chomp $result; + return split ' ', $result; +} + =head1 COPYRIGHT Copyright (c) 2001 Bruno Postle <br...@po...>. All Rights Reserved. Added: trunk/Panotools-Script/t/201.pano_trafo.t =================================================================== --- trunk/Panotools-Script/t/201.pano_trafo.t (rev 0) +++ trunk/Panotools-Script/t/201.pano_trafo.t 2012-04-17 20:49:40 UTC (rev 1339) @@ -0,0 +1,32 @@ +#!/usr/bin/perl +#Editor vim:syn=perl + +use strict; +use warnings; +use Test::More 'no_plan'; +use lib 'lib'; + +use Panotools::Script; + +my $pto = new Panotools::Script; + +unless (`pano_trafo`) +{ + print STDERR "pano_trafo not found, skipping tests...\n"; + ok(1); + exit; +} + +$pto->InitTrafo ('t/data/cemetery/hugin.pto'); + +like (join (', ', $pto->TrafoReverse (0, $pto->Trafo (0, 0, 0))), '/^0\.0.*, 0\.0/'); +like (join (', ', $pto->TrafoReverse (0, $pto->Trafo (0, 1, 0))), '/^1\.0.*, 0\.0/'); +like (join (', ', $pto->TrafoReverse (0, $pto->Trafo (0, 2, 0))), '/^2\.0.*, 0\.0/'); +like (join (', ', $pto->TrafoReverse (0, $pto->Trafo (0, 3, 0))), '/^3\.0.*, 0\.0/'); + +like (join (', ', $pto->TrafoReverse (1, $pto->Trafo (1, 0, 0))), '/^0\.0.*, 0\.0/'); +like (join (', ', $pto->TrafoReverse (1, $pto->Trafo (1, 1, 0))), '/^1\.0.*, 0\.0/'); +like (join (', ', $pto->TrafoReverse (1, $pto->Trafo (1, 2, 0))), '/^2\.0.*, 0\.0/'); +like (join (', ', $pto->TrafoReverse (1, $pto->Trafo (1, 3, 0))), '/^3\.0.*, 0\.0/'); + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2012-07-05 21:14:30
|
Revision: 1344 http://panotools.svn.sourceforge.net/panotools/?rev=1344&view=rev Author: brunopostle Date: 2012-07-05 21:14:24 +0000 (Thu, 05 Jul 2012) Log Message: ----------- try and fix division by zero error when EXIF ExposureTime = 0 (Tobias Mueller) Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/lib/Panotools/Photos.pm Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2012-04-23 20:33:45 UTC (rev 1343) +++ trunk/Panotools-Script/Changes 2012-07-05 21:14:24 UTC (rev 1344) @@ -9,6 +9,7 @@ - skip Panotools::Makefile tests if no suitable make executable found - some methods for fast querying of transformation coordinates via pano_trafo - new tool: ptomorph - distort photos before stitching + - try and fix division by zero error when EXIF ExposureTime = 0 (Tobias Mueller) 0.26 - ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 Modified: trunk/Panotools-Script/lib/Panotools/Photos.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Photos.pm 2012-04-23 20:33:45 UTC (rev 1343) +++ trunk/Panotools-Script/lib/Panotools/Photos.pm 2012-07-05 21:14:24 UTC (rev 1344) @@ -142,6 +142,7 @@ if ($longest =~ /^1\/([0-9]+)$/) {$longest = 1 / $1}; if ($shortest =~ /^1\/([0-9]+)$/) {$shortest = 1 / $1}; return 0 unless $longest or $shortest; + return 0 if $shortest == 0; return 0 if $longest / $shortest < $factor; return 1; } @@ -160,7 +161,7 @@ my $speeds = {}; for my $image (@{$self}) { - my $et = $image->{exif}->{ExposureTime} || $image->{exif}->{ShutterSpeed} || 0; + my $et = $image->{exif}->{ShutterSpeedValue} || $image->{exif}->{ExposureTime} || $image->{exif}->{ShutterSpeed} || 0; $speeds->{$et} = 'TRUE'; } return [sort {_longer ($b, $a)} keys (%{$speeds})]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2012-07-09 23:03:56
|
Revision: 1345 http://panotools.svn.sourceforge.net/panotools/?rev=1345&view=rev Author: brunopostle Date: 2012-07-09 23:03:49 +0000 (Mon, 09 Jul 2012) Log Message: ----------- erect2planet and erect2mercator now take multiple input files Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/bin/erect2mercator trunk/Panotools-Script/bin/erect2planet Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2012-07-05 21:14:24 UTC (rev 1344) +++ trunk/Panotools-Script/Changes 2012-07-09 23:03:49 UTC (rev 1345) @@ -10,6 +10,7 @@ - some methods for fast querying of transformation coordinates via pano_trafo - new tool: ptomorph - distort photos before stitching - try and fix division by zero error when EXIF ExposureTime = 0 (Tobias Mueller) + - erect2planet and erect2mercator now take multiple input files 0.26 - ptoanchor now uses cpfind instead of autopano-sift-c, requires Hugin 2010.4.0 Modified: trunk/Panotools-Script/bin/erect2mercator =================================================================== --- trunk/Panotools-Script/bin/erect2mercator 2012-07-05 21:14:24 UTC (rev 1344) +++ trunk/Panotools-Script/bin/erect2mercator 2012-07-09 23:03:49 UTC (rev 1345) @@ -6,8 +6,11 @@ use Panotools::Script; use Image::Size; -my $img_erect = shift or die "usage\n $0 equirectangular.tif"; +die "usage\n $0 equirectangular.tif [...]" unless scalar @ARGV; +for my $img_erect (@ARGV) +{ + my $pto_mercator = $img_erect; $pto_mercator =~ s/\.([[:alnum:]]+)$/-mercator.pto/; @@ -30,6 +33,8 @@ } $mercator->Write ($pto_mercator); +} + __END__ =head1 NAME Modified: trunk/Panotools-Script/bin/erect2planet =================================================================== --- trunk/Panotools-Script/bin/erect2planet 2012-07-05 21:14:24 UTC (rev 1344) +++ trunk/Panotools-Script/bin/erect2planet 2012-07-09 23:03:49 UTC (rev 1345) @@ -6,8 +6,11 @@ use Panotools::Script; use Image::Size; -my $img_erect = shift or die "usage\n $0 equirectangular.tif"; +die "usage\n $0 equirectangular.tif [...]" unless scalar @ARGV; +for my $img_erect (@ARGV) +{ + my $pto_sgraphic = $img_erect; $pto_sgraphic =~ s/\.([[:alnum:]]+)$/-sgraphic.pto/; @@ -31,6 +34,8 @@ } $stereographic->Write ($pto_sgraphic); +} + __END__ =head1 NAME This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2012-09-03 22:21:35
|
Revision: 1347 http://panotools.svn.sourceforge.net/panotools/?rev=1347&view=rev Author: brunopostle Date: 2012-09-03 22:21:29 +0000 (Mon, 03 Sep 2012) Log Message: ----------- A not-entirely working tool for remapping SVG files Modified Paths: -------------- trunk/Panotools-Script/Makefile.PL Added Paths: ----------- trunk/Panotools-Script/bin/nona-svg Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2012-07-11 21:57:32 UTC (rev 1346) +++ trunk/Panotools-Script/Makefile.PL 2012-09-03 22:21:29 UTC (rev 1347) @@ -8,7 +8,7 @@ 'bin/process-masks', 'bin/erect2planet', 'bin/ptoget', 'bin/enfuse-mask', 'bin/ptohalve', 'bin/ptomorph', 'bin/ptochain', 'bin/ptobind', 'bin/ptofill', 'bin/gigastart', 'bin/entile', 'bin/gigatile', 'bin/ptoreset', 'bin/tif2svg', 'bin/enblend-svg', 'bin/ptoinfo', 'bin/ptopath', 'bin/ptodummy', 'bin/ptoanchor', - 'bin/qtvr2erect-gui', 'bin/tif2svg-gui', 'bin/ptoinfo-gui', 'bin/ptosort', 'bin/ptovariable', + 'bin/qtvr2erect-gui', 'bin/tif2svg-gui', 'bin/ptoinfo-gui', 'bin/ptosort', 'bin/ptovariable', 'bin/nona-svg', 'bin/process-masks-gui', 'bin/enblend-svg-gui', 'bin/erect2qtvr-gui', 'bin/ptoclean', 'bin/gmaptemplate', 'bin/erect2mercator', 'bin/ptosplit', 'bin/ptomerge', 'bin/panostart', 'bin/ptsed', 'bin/ptscluster', 'bin/lens-submit', 'bin/transform-pano', 'bin/nona-mask', 'bin/qtvr2erect', 'bin/ptocentre' ], Added: trunk/Panotools-Script/bin/nona-svg =================================================================== --- trunk/Panotools-Script/bin/nona-svg (rev 0) +++ trunk/Panotools-Script/bin/nona-svg 2012-09-03 22:21:29 UTC (rev 1347) @@ -0,0 +1,155 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Panotools::Script; +use Getopt::Long; +use Pod::Usage; +my $help = 0; +my @image; +my $output = 'output'; + +GetOptions ('i=s' => \@image, + 'o=s' => \$output, + 'h|help' => \$help); + +pod2usage (-verbose => 2) if $help; + +my $path_pto = shift || pod2usage; +die "Can't find $path_pto" unless -e $path_pto; + +my $pto = new Panotools::Script; +$pto->Read ($path_pto); + +# input image paths can be overridden on command line +for my $id (0 .. scalar @ARGV -1) +{ + $pto->Image->[$id]->{n} = '"'. $ARGV[$id] .'"'; +} + +# do all images unless -i parameter is specified +unless (scalar @image) +{ + @image = (0 .. scalar @{$pto->Image} -1); +} + +$pto->InitTrafo ($path_pto); + +for my $id_image (@image) +{ + + open SVG, '<'. $pto->Image->[$id_image]->Path ($pto); + my @lines = (<SVG>); + close SVG; + + my $xml = join '', @lines; + $xml =~ s/(\r|\l|\n)//g; + $xml =~ s/[[:space:]]+/ /g; + $xml =~ s/> </></g; + + my ($width) = $xml =~ /<svg[^>]*[[:space:]]width="([0-9.]+)"/; + my ($height) = $xml =~ /<svg[^>]*[[:space:]]height="([0-9.]+)"/; + + next unless $width; + next unless $height; + + my $width_out = $pto->Panorama->{w}; + my $height_out = $pto->Panorama->{h}; + + $xml =~ s/(<svg[^>]*[[:space:]]width=)"[0-9.]+"/$1"$width_out"/; + $xml =~ s/(<svg[^>]*[[:space:]]height=)"[0-9.]+"/$1"$height_out"/; + + for my $path ($xml =~ /([[:space:]]d="[-0-9.,CLMQSTZclmqstz[:space:]]*")/g) + { + my @tokens = $path =~ /([[:space:]]d="|[-0-9.]+[,[:space:]][-0-9.]+|[[:space:]]|[CLMQSTZclmqstz]|")/g; + + my $relative = 0; + my ($x_last, $y_last) = (0.0, 0.0); + my ($x_curr, $y_curr) = (0.0, 0.0); + my @tokens_out; + + for my $token (@tokens) + { + $relative = 0 if ($token =~ /^([CLMQST])$/); + # lower case letters indicate relative coordinates follow + $relative = 1 if ($token =~ /^([lm])$/); + # these are relative to start of command + if ($token =~ /^([cqst])$/) + { + $relative = 2; + ($x_curr, $y_curr) = ($x_last, $y_last); + } + + # coordinate pairs can be space or comma separated + if ($token =~ /([-0-9.]+)[,[:space:]]([-0-9.]+)/) + { + my ($x, $y) = ($1, $2); + if ($relative == 1) + { + $x += $x_last; + $y += $y_last; + } + if ($relative == 2) + { + $x += $x_curr; + $y += $y_curr; + } + $x_last = $x; + $y_last = $y; + + ($x, $y) = $pto->Trafo ($id_image, $x, $y); + $token = $x .','. $y; + } + push @tokens_out, $token; + } + my $path_new = join '', @tokens_out; + # all coordinates are now absolute + $path_new =~ tr/clmqst/CLMQST/; + + $xml =~ s/$path/$path_new/; + } + + open SVG, '>'. $output . sprintf("%04d", $id_image) .'.svg'; + print SVG $xml; + close SVG; +} + +0; + +__END__ + +=head1 NAME + +nona-svg - stitch a vector panorama image + +=head1 SYNOPSIS + + nona-svg [options] -o output project_file (image files) + + Options: + -o prefix Prefix for output + -i num Images to render, can be specified multiple times + -h | --help Outputs help documentation. + +=head1 DESCRIPTION + +B<nona-svg> is a drop in replacement for nona that works with SVG vector files. + +=head1 LICENSE + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +=head1 SEE ALSO + +L<http://hugin.sourceforge.net/> + +=head1 AUTHOR + +Bruno Postle - August 2012 + +=cut + Property changes on: trunk/Panotools-Script/bin/nona-svg ___________________________________________________________________ Added: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2012-09-04 20:14:59
|
Revision: 1348 http://panotools.svn.sourceforge.net/panotools/?rev=1348&view=rev Author: brunopostle Date: 2012-09-04 20:14:53 +0000 (Tue, 04 Sep 2012) Log Message: ----------- add some doc Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/bin/nona-svg Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2012-09-03 22:21:29 UTC (rev 1347) +++ trunk/Panotools-Script/Changes 2012-09-04 20:14:53 UTC (rev 1348) @@ -1,5 +1,8 @@ Revision history for Panotools::Script. +0.28 + - new tool: nona-svg - stitch a vector panorama image + 0.27 - remove linux desktop entries for tif2svg-gui enblend-svg process-masks-gui qtvr2erect-gui - apparently there is a bsd called dragonfly Modified: trunk/Panotools-Script/bin/nona-svg =================================================================== --- trunk/Panotools-Script/bin/nona-svg 2012-09-03 22:21:29 UTC (rev 1347) +++ trunk/Panotools-Script/bin/nona-svg 2012-09-04 20:14:53 UTC (rev 1348) @@ -136,6 +136,28 @@ B<nona-svg> is a drop in replacement for nona that works with SVG vector files. +There are some snags: + +The .pto project needs to prepared with the correct w and h (width and height +in pixels) parameters for the input SVG files in each i-line. You can specify +the SVG filenames using the n parameter, or by appending the SVG filenames on +the command-line (similar to nona). + +This tool uses regular expressions rather than an SVG parser, so expect it to +fail in all sorts of situations. It seems to be ok with simple lines and +curves generated by Inkscape. + +This tool uses pano_trafo from the Hugin project to do the projection math, the +way the connection is done makes it only likely to work on unixy systems. + +Expect to see 'ContractViolation' errors from vigra, ignore them, this is a bug +in pano_trafo which unnecessarily tries to open image files. + +Note that only homography transformations preserve splines, i.e. this only +works properly if the input and output projection is rectilinear. Having said +that, the error with other projections isn't so noticeable if your lines are +short and/or they are converted to 'curves' in Inkscape before remapping. + =head1 LICENSE This program is free software; you can redistribute it and/or This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2013-01-07 00:18:22
|
Revision: 1351 http://panotools.svn.sourceforge.net/panotools/?rev=1351&view=rev Author: brunopostle Date: 2013-01-07 00:18:13 +0000 (Mon, 07 Jan 2013) Log Message: ----------- New tool to set XMP GPano metadata in a JPEG panorama. Reads project data from the PTO file and writes XMP to any equivalently named JPEG file, so should reliably work with partial panoramas. Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/MANIFEST trunk/Panotools-Script/Makefile.PL Added Paths: ----------- trunk/Panotools-Script/bin/pto2gpano Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2012-09-16 21:40:08 UTC (rev 1350) +++ trunk/Panotools-Script/Changes 2013-01-07 00:18:13 UTC (rev 1351) @@ -2,6 +2,7 @@ 0.28 - new tool: nona-svg - stitch a vector panorama image + - new tool: pto2gpano - add GPano XMP metadata 0.27 - remove linux desktop entries for tif2svg-gui enblend-svg process-masks-gui qtvr2erect-gui Modified: trunk/Panotools-Script/MANIFEST =================================================================== --- trunk/Panotools-Script/MANIFEST 2012-09-16 21:40:08 UTC (rev 1350) +++ trunk/Panotools-Script/MANIFEST 2013-01-07 00:18:13 UTC (rev 1351) @@ -20,6 +20,7 @@ bin/panostart bin/process-masks bin/process-masks-gui +bin/pto2gpano bin/pto2mk2 bin/ptoanchor bin/ptobind Modified: trunk/Panotools-Script/Makefile.PL =================================================================== --- trunk/Panotools-Script/Makefile.PL 2012-09-16 21:40:08 UTC (rev 1350) +++ trunk/Panotools-Script/Makefile.PL 2013-01-07 00:18:13 UTC (rev 1351) @@ -7,13 +7,13 @@ 'bin/jpeg2qtvr', 'bin/erect2qtvr', 'bin/enblend-mask', 'bin/match-n-shift', 'bin/ptoset', 'bin/ptodouble', 'bin/process-masks', 'bin/erect2planet', 'bin/ptoget', 'bin/enfuse-mask', 'bin/ptohalve', 'bin/ptomorph', 'bin/ptochain', 'bin/ptobind', 'bin/ptofill', 'bin/gigastart', 'bin/entile', 'bin/gigatile', 'bin/ptoreset', - 'bin/tif2svg', 'bin/enblend-svg', 'bin/ptoinfo', 'bin/ptopath', 'bin/ptodummy', 'bin/ptoanchor', + 'bin/tif2svg', 'bin/enblend-svg', 'bin/ptoinfo', 'bin/ptopath', 'bin/ptodummy', 'bin/ptoanchor', 'bin/pto2gpano', 'bin/qtvr2erect-gui', 'bin/tif2svg-gui', 'bin/ptoinfo-gui', 'bin/ptosort', 'bin/ptovariable', 'bin/nona-svg', 'bin/process-masks-gui', 'bin/enblend-svg-gui', 'bin/erect2qtvr-gui', 'bin/ptoclean', 'bin/gmaptemplate', 'bin/erect2mercator', 'bin/ptosplit', 'bin/ptomerge', 'bin/panostart', 'bin/ptsed', 'bin/ptscluster', 'bin/lens-submit', 'bin/transform-pano', 'bin/nona-mask', 'bin/qtvr2erect', 'bin/ptocentre' ], 'VERSION_FROM' => 'lib/Panotools/Script.pm', # finds $VERSION - 'PREREQ_PM' => {'bytes' => 0.0, 'File::Copy' => 1.0, 'Image::ExifTool' => 6.0, + 'PREREQ_PM' => {'bytes' => 0.0, 'File::Copy' => 1.0, 'Image::ExifTool' => 9.07, 'Getopt::Long' => 2.0, 'Pod::Usage' => 1.0, 'Getopt::Std' => 1.0, 'LWP::UserAgent' => 0.0, 'Test::More' => 0.1, 'Math::Trig' => 0.1, 'File::Temp' => 0.1, 'URI' => 0.0, 'File::Spec' => 0.8, 'Image::Size' => 2.9, 'Storable' => 2.0}, Added: trunk/Panotools-Script/bin/pto2gpano =================================================================== --- trunk/Panotools-Script/bin/pto2gpano (rev 0) +++ trunk/Panotools-Script/bin/pto2gpano 2013-01-07 00:18:13 UTC (rev 1351) @@ -0,0 +1,105 @@ +#!/usr/bin/perl +use strict; +use warnings; +use 5.010; +use Panotools::Script; +use Image::ExifTool; +use Pod::Usage; + +pod2usage (2) unless (scalar @ARGV); + +for my $path_pto (@ARGV) +{ + say "Project file: $path_pto"; + + my $path_jpg = $path_pto; + $path_jpg =~ s/\.pto/.jpg/; + say "JPEG file: $path_jpg"; + next unless -e $path_jpg; + + my $pto = new Panotools::Script; + $pto->Read ($path_pto) || next; + + my $format = undef; + $format = 'cylindrical' if $pto->Panorama->{f} == 1; + $format = 'equirectangular' if $pto->Panorama->{f} == 2; + next unless $format; + + my $left = 0; + my $top = 0; + my $width = $pto->Panorama->{w}; + my $height = $pto->Panorama->{h}; + + if (defined $pto->Panorama->{S}) + { + # S100,600,100,800 Selection(left,right,top,bottom) + my @crop = split ',', $pto->Panorama->{S}; + $left = $crop[0]; + $top = $crop[2]; + $width = $crop[1] - $crop[0]; + $height = $crop[3] - $crop[2]; + } + + my $path_first = $pto->Image->[0]->Path ($path_pto); + my $path_last = $pto->Image->[-1]->Path ($path_pto); + + my $exiftool = new Image::ExifTool; + $exiftool->SetNewValue ('UsePanoramaViewer', 'True'); + $exiftool->SetNewValue ('StitchingSoftware', 'Hugin'); + $exiftool->SetNewValue ('ProjectionType', $format); + $exiftool->SetNewValue ('CroppedAreaLeftPixels', $left); + $exiftool->SetNewValue ('CroppedAreaTopPixels', $top); + $exiftool->SetNewValue ('CroppedAreaImageWidthPixels', $width); + $exiftool->SetNewValue ('CroppedAreaImageHeightPixels', $height); + $exiftool->SetNewValue ('FullPanoWidthPixels', $pto->Panorama->{w}); + $exiftool->SetNewValue ('FullPanoHeightPixels', $pto->Panorama->{h}); + $exiftool->SetNewValue ('FirstPhotoDate', Image::ExifTool::ImageInfo ($path_first)->{DateTimeOriginal}); + $exiftool->SetNewValue ('LastPhotoDate', Image::ExifTool::ImageInfo ($path_last)->{DateTimeOriginal}); + $exiftool->SetNewValue ('SourcePhotosCount', scalar @{$pto->Image}); + + $exiftool->WriteInfo ($path_jpg); +} + +0; + + +__END__ + +=head1 NAME + +pto2gpano - set XMP GPano metadata in a JPEG panorama + +=head1 SYNOPSIS + +pto2gpano project1.pto project2.pto [...] + +Options: None + +=head1 DESCRIPTION + +Sets XMP metadata as described here, panoramas tagged with this metadata will +display in the Google+ panorama viewer: + +https://developers.google.com/panorama/metadata/ + +This tool assumes that for each project.pto, there is an equivalent project.jpg +that needs updated metadata. It also assumes that the original photos are +available to extract EXIF data info. + +=head1 LICENSE + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +=head1 SEE ALSO + +L<http://hugin.sourceforge.net/> +L<http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/XMP.html#GPano> + +=head1 AUTHOR + +Bruno Postle - January 2013. + +=cut Property changes on: trunk/Panotools-Script/bin/pto2gpano ___________________________________________________________________ Added: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2013-01-13 00:04:05
|
Revision: 1354 http://panotools.svn.sourceforge.net/panotools/?rev=1354&view=rev Author: brunopostle Date: 2013-01-13 00:03:54 +0000 (Sun, 13 Jan 2013) Log Message: ----------- support XYZ translation parameters in ptovariable Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/bin/ptovariable Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2013-01-08 21:27:37 UTC (rev 1353) +++ trunk/Panotools-Script/Changes 2013-01-13 00:03:54 UTC (rev 1354) @@ -3,6 +3,7 @@ 0.28 - new tool: nona-svg - stitch a vector panorama image - new tool: pto2gpano - add GPano XMP metadata + - ptovariable: support XYZ translation parameters 0.27 - remove linux desktop entries for tif2svg-gui enblend-svg process-masks-gui qtvr2erect-gui Modified: trunk/Panotools-Script/bin/ptovariable =================================================================== --- trunk/Panotools-Script/bin/ptovariable 2013-01-08 21:27:37 UTC (rev 1353) +++ trunk/Panotools-Script/bin/ptovariable 2013-01-13 00:03:54 UTC (rev 1354) @@ -13,6 +13,10 @@ my @r; my @p; my @y; +my $translations; +my @TrX; +my @TrY; +my @TrZ; my $view = 0; my $barrel = 0; my $centre = 0; @@ -34,6 +38,10 @@ 'r=i' => \@r, 'p=i' => \@p, 'y=i' => \@y, + 'translations' => \$translations, + 'TrX=i' => \@TrX, + 'TrY=i' => \@TrY, + 'TrZ=i' => \@TrZ, 'vignetting' => \$vignetting, 'vignetting-centre' => \$vignetting_centre, 'response' => \$response, @@ -81,6 +89,10 @@ $variable->{$index}->{p} = $positions || $pitch; $variable->{$index}->{y} = $positions || $yaw; + $variable->{$index}->{TrX} = $translations; + $variable->{$index}->{TrY} = $translations; + $variable->{$index}->{TrZ} = $translations; + $variable->{$index}->{Eev} = $exposure; $variable->{$index}->{Er} = $white_balance; @@ -91,6 +103,10 @@ $variable->{$_}->{p} = 1 for (@p); $variable->{$_}->{y} = 1 for (@y); +$variable->{$_}->{TrX} = 1 for (@TrX); +$variable->{$_}->{TrY} = 1 for (@TrY); +$variable->{$_}->{TrZ} = 1 for (@TrZ); + $pto->Write ($path_output); __END__ @@ -111,6 +127,10 @@ -r <num> <num> <..> Optimise roll for specified images -p <num> <num> <..> Optimise pitch for specified images -y <num> <num> <..> Optimise yaw for specified images + --translations Optimise XYZ mosaic translations for all images except anchor + -TrX <num> <..> Optimise X translation for specified images + -TrY <num> <..> Optimise Y translation for specified images + -TrZ <num> <..> Optimise Z translation for specified images --view Optimise angle of view --barrel Optimise barrel distortion --centre Optimise optical centre This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2013-01-29 21:21:05
|
Revision: 1355 http://panotools.svn.sourceforge.net/panotools/?rev=1355&view=rev Author: brunopostle Date: 2013-01-29 21:20:58 +0000 (Tue, 29 Jan 2013) Log Message: ----------- Create a PTO project based on a CSV file specifying yaw, pitch etc... Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2013-01-13 00:03:54 UTC (rev 1354) +++ trunk/Panotools-Script/Changes 2013-01-29 21:20:58 UTC (rev 1355) @@ -4,6 +4,7 @@ - new tool: nona-svg - stitch a vector panorama image - new tool: pto2gpano - add GPano XMP metadata - ptovariable: support XYZ translation parameters + - match-n-shift: create a project based on a CSV list input file 0.27 - remove linux desktop entries for tif2svg-gui enblend-svg process-masks-gui qtvr2erect-gui Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2013-01-13 00:03:54 UTC (rev 1354) +++ trunk/Panotools-Script/bin/match-n-shift 2013-01-29 21:20:58 UTC (rev 1355) @@ -6,8 +6,10 @@ use Pod::Usage; use Panotools::Script; use Panotools::Photos; +use Text::ParseWords; my $path_oto; +my $path_csv; my $pix_max = 1600; my $points = 25; my $noransac = 0; @@ -22,6 +24,7 @@ my $help = 0; GetOptions ('o|output=s' => \$path_oto, + 'i|input=s' => \$path_csv, 's|size=i' => \$pix_max, 'p|points=i' => \$points, 'n|noransac' => \$noransac, @@ -36,12 +39,24 @@ 'h|help' => \$help); # code assumes images are sorted -@ARGV = sort @ARGV; +my @path_photos = sort @ARGV; +# if csv file is specified, parse and replace list of photos +my @csv; +if ($path_csv) +{ + open (CSV, '<'. $path_csv); + my @lines = (<CSV>); + chomp @lines; + close CSV; + @csv = map {[parse_line ('\s*,\s*', 0, $_)]} @lines; + @path_photos = map {$_->[0]} @csv; +} + pod2usage (-verbose => 2) if $help; -pod2usage (2) unless (scalar @ARGV > 1); +pod2usage (2) unless (scalar @path_photos > 1); -my $photos_all = new Panotools::Photos (@ARGV); +my $photos_all = new Panotools::Photos (@path_photos); $deg_fov = 50 unless defined $deg_fov; # decimal separator workaround @@ -52,7 +67,7 @@ my @AverageRGB = $photos_all->AverageRGB; my $sum_Eev; -for my $id (0 .. scalar @ARGV -1) +for my $id (0 .. scalar @path_photos -1) { my $image = new Panotools::Script::Line::Image; my $photo = $photos_all->[$id]; @@ -73,6 +88,9 @@ $sum_Eev += $photos_all->Eev ($id); $image->{Er} = $photo->{exif}->{RedBalance} / $AverageRGB[0] if $photo->{exif}->{RedBalance}; $image->{Eb} = $photo->{exif}->{BlueBalance} / $AverageRGB[2] if $photo->{exif}->{BlueBalance}; + $image->{y} = $csv[$id]->[1] if (defined $csv[$id] and defined $csv[$id]->[1]); + $image->{p} = $csv[$id]->[2] if (defined $csv[$id] and defined $csv[$id]->[2]); + $image->{r} = $csv[$id]->[3] if (defined $csv[$id] and defined $csv[$id]->[3]); if ($photos_all->Bracketed) { @@ -158,13 +176,7 @@ Options: -o | --output name Filename of created panorama project - -s | --size number Downsize images until width and height is - smaller than number, default 1600 - -p | --points number Number of generated control points between, - each pair, default: 25 - -n | --noransac No ransac detection, useful for fisheye images - -r | --refine Refine the found control points using the - original images, delete unrefinable. + -i | --input name Filename of CSV file specifying input images (optional, see below) -f | --projection Panotools style input projection number. Use 0 for rectilinear (default), 2 for circular fisheye and 3 for full-frame fisheye images. Note, this has to be @@ -178,11 +190,49 @@ -a | --align Generate control points (default no). -h | --help Outputs help documentation. + Deprecated options (have no effect when using cpfind): + -s | --size number Downsize images until width and height is + smaller than number, default 1600 + -p | --points number Number of generated control points between, + each pair, default: 25 + -n | --noransac No ransac detection, useful for fisheye images + -r | --refine Refine the found control points using the + original images, delete unrefinable. + =head1 DESCRIPTION B<match-n-shift> takes a list of image files and creates a hugin compatible -project file optionally containing control points linking the images together. +project file (optionally containing control points linking the images together, +though there are better ways of doing this). +As much information as possible is extracted from photo EXIF data. So photo +orientation, exposure, angle of view and white balance will all be initialised +if possible. + +An optional input file can be chosen with the --input option, this can be a +simple list of photo filenames, or full paths, one per line: + + DSC_0001.JPG + DSC_0002.JPG + DSC_0003.JPG + DSC_0004.JPG + +..or a CSV file specifying "filename, yaw, pitch, roll" (in degrees): + + DSC_0001.JPG,0,20,90 + DSC_0002.JPG,90,-20,90 + DSC_0003.JPG,180,20,90 + DSC_0004.JPG,-180,-20,90 + +If the roll field is ommitted then it will be set to zero or any value +obtainable from EXIF data, similarly if the pitch field is ommitted then pitch +will be set to zero. So this should also work: + + DSC_0001.JPG,0 + DSC_0002.JPG,90 + DSC_0003.JPG,180 + DSC_0004.JPG,-180 + =head1 LICENSE This program is free software; you can redistribute it and/or This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2013-03-20 23:01:28
|
Revision: 1357 http://panotools.svn.sourceforge.net/panotools/?rev=1357&view=rev Author: brunopostle Date: 2013-03-20 23:01:21 +0000 (Wed, 20 Mar 2013) Log Message: ----------- Support new Tpp and Tpy parameters Modified Paths: -------------- trunk/Panotools-Script/Changes trunk/Panotools-Script/bin/ptovariable trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm trunk/Panotools-Script/lib/Panotools/Script/Line/Panorama.pm trunk/Panotools-Script/lib/Panotools/Script/Line/Variable.pm Modified: trunk/Panotools-Script/Changes =================================================================== --- trunk/Panotools-Script/Changes 2013-01-31 21:31:23 UTC (rev 1356) +++ trunk/Panotools-Script/Changes 2013-03-20 23:01:21 UTC (rev 1357) @@ -5,6 +5,7 @@ - new tool: pto2gpano - add GPano XMP metadata - ptovariable: support XYZ translation parameters - match-n-shift: create a project based on a CSV list input file + - support new Tpy,Tpp yaw and pitch of remapping plane for translation 0.27 - remove linux desktop entries for tif2svg-gui enblend-svg process-masks-gui qtvr2erect-gui Modified: trunk/Panotools-Script/bin/ptovariable =================================================================== --- trunk/Panotools-Script/bin/ptovariable 2013-01-31 21:31:23 UTC (rev 1356) +++ trunk/Panotools-Script/bin/ptovariable 2013-03-20 23:01:21 UTC (rev 1357) @@ -17,6 +17,8 @@ my @TrX; my @TrY; my @TrZ; +my @Tpp; +my @Tpy; my $view = 0; my $barrel = 0; my $centre = 0; @@ -42,6 +44,8 @@ 'TrX=i' => \@TrX, 'TrY=i' => \@TrY, 'TrZ=i' => \@TrZ, + 'Tpp=i' => \@Tpp, + 'Tpy=i' => \@Tpy, 'vignetting' => \$vignetting, 'vignetting-centre' => \$vignetting_centre, 'response' => \$response, @@ -107,6 +111,9 @@ $variable->{$_}->{TrY} = 1 for (@TrY); $variable->{$_}->{TrZ} = 1 for (@TrZ); +$variable->{$_}->{Tpp} = 1 for (@Tpp); +$variable->{$_}->{Tpy} = 1 for (@Tpy); + $pto->Write ($path_output); __END__ Modified: trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2013-01-31 21:31:23 UTC (rev 1356) +++ trunk/Panotools-Script/lib/Panotools/Script/Line/Image.pm 2013-03-20 23:01:21 UTC (rev 1357) @@ -70,6 +70,8 @@ TrX,TrY,TrZ Translation on x axis, y axis, z axis + Tpy,Tpp yaw and pitch of remapping plane for translation + Te0,Te1,Te2,Te3 Test parameters Vm vignetting correction mode (default 0): @@ -124,9 +126,9 @@ %{$self} = (a => 0, b => 0, c => 0, d => 0, e => 0, r => 0, p => 0, y => 0); } -sub _valid { return '^([abcdefghjnprtvwy]|[SCXYZ]|K[0-2][ab]|V[abcdfmxy]|Eev|E[rb]|Te[0123]|Tr[XYZ]|Ti[XYZS]|R[abcde])(.*)' } +sub _valid { return '^([abcdefghjnprtvwy]|[SCXYZ]|K[0-2][ab]|V[abcdfmxy]|Eev|E[rb]|Tp[yp]|Te[0123]|Tr[XYZ]|Ti[XYZS]|R[abcde])(.*)' } -sub _valid_ptoptimizer { return '^([abcdefghnprtvwySC]|Te[0123]|Tr[XYZ]|Ti[XYZS])(.*)' } +sub _valid_ptoptimizer { return '^([abcdefghnprtvwySC]|Tp[yp]|Te[0123]|Tr[XYZ]|Ti[XYZS])(.*)' } sub _sanitise_ptoptimizer { Modified: trunk/Panotools-Script/lib/Panotools/Script/Line/Panorama.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script/Line/Panorama.pm 2013-01-31 21:31:23 UTC (rev 1356) +++ trunk/Panotools-Script/lib/Panotools/Script/Line/Panorama.pm 2013-03-20 23:01:21 UTC (rev 1357) @@ -36,6 +36,9 @@ 16 - Equirectangular Panini 17 - Biplane 18 - Triplane + 19 - Panini_General + 20 - Thoby + 21 - Hammer v360 horizontal field of view of panorama (default 360) nPICT Panorama file format, one of: Modified: trunk/Panotools-Script/lib/Panotools/Script/Line/Variable.pm =================================================================== --- trunk/Panotools-Script/lib/Panotools/Script/Line/Variable.pm 2013-01-31 21:31:23 UTC (rev 1356) +++ trunk/Panotools-Script/lib/Panotools/Script/Line/Variable.pm 2013-03-20 23:01:21 UTC (rev 1357) @@ -38,6 +38,8 @@ TrX3 Optimise x-coordinate of image 3, mosaic/translation mode TrY2 Optimise y-coordinate of image 2, mosaic/translation mode TrZ1 Optimise z-coordinate of image 1, mosaic/translation mode + Tpp1 Optimise pitch of picture plane of image 1, mosaic/translation mode + Tpy1 Optimise yaw of picture plane of image 1, mosaic/translation mode Additionally, photometric optimisation uses the same system. although this is a secondary process and not simultaneous with geometric optimisation: @@ -63,7 +65,7 @@ =cut -sub _valid { return '^([abcdegprtvyXYZ]|Te[0123]|Tr[XYZ]|Ti[XYZS]|Eev|Er|Eb|Ra|Rb|Rc|Rd|Re|Va|Vb|Vc|Vd|Vx|Vy)(.*)' } +sub _valid { return '^([abcdegprtvyXYZ]|Te[0123]|Tp[py]|Tr[XYZ]|Ti[XYZS]|Eev|Er|Eb|Ra|Rb|Rc|Rd|Re|Va|Vb|Vc|Vd|Vx|Vy)(.*)' } sub Identifier { @@ -76,10 +78,10 @@ my $self = shift; my $string = shift || return 0; my $valid = $self->_valid; - my @res = $string =~ / ([a-zERV]+[0-9]+)/g; + my @res = $string =~ / ([a-zA-Z]+[0-9]+)/g; for my $token (grep { defined $_ } @res) { - my ($param, $image) = $token =~ /([a-zERV]+)([0-9]+)/; + my ($param, $image) = $token =~ /([a-zA-Z]+)([0-9]+)/; next unless defined $image; $self->{$image}->{$param} = 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |