From: <bru...@us...> - 2008-02-02 00:36:45
|
Revision: 804 http://panotools.svn.sourceforge.net/panotools/?rev=804&view=rev Author: brunopostle Date: 2008-02-01 16:36:49 -0800 (Fri, 01 Feb 2008) Log Message: ----------- unfinished wrapper to run autopano-sift on stereographic versions of fisheye images Added Paths: ----------- trunk/Panotools-Script/bin/match-n-shift Added: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift (rev 0) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-02 00:36:49 UTC (rev 804) @@ -0,0 +1,92 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Math::Trig; +use Panotools::Script; + +# Wrapper to run autopano-sift on stereographic versions of fisheye images +# +# Bruno Postle - February 2008 +# +# UNFINISHED +# +# Stuff done so far: Takes an .oto file generated by autopano-sift and rewrites +# the control point coordinates assuming that they are based on temporary +# stereographic versions of the input photos, the resulting .oto file should be +# applicable to the original fisheye photos. + +# TODO +# +# check that it actually works +# create the stereographic images via ImageMagick and nona +# replace autopano-complete.sh logic +# do the same for rectilinear photos +# requires --fov and --projection parameters which need to be supplied by hugin +# projection and FoV need to be set in .oto files + +my $path_pto = shift || die 'supply an input pto file'; +my $path_pto_out = shift || die 'supply an output pto file'; + +my $pto = new Panotools::Script; +$pto->Read ($path_pto); + +for my $point (@{$pto->Control}) +{ + my $n = $pto->Image->[$point->{n}]; + my $N = $pto->Image->[$point->{N}]; + + ($point->{x}, $point->{y}) = + sgraphic2fisheye ({ rad_fov => deg2rad ($n->{v}), + pix_x => $point->{x}, pix_y => $point->{y}, + pix_width => $n->{w}, pix_height => $n->{h}}); + + ($point->{X}, $point->{Y}) = + sgraphic2fisheye ({ rad_fov => deg2rad ($N->{v}), + pix_x => $point->{X}, pix_y => $point->{Y}, + pix_width => $N->{w}, pix_height => $N->{h}}); +} + +$pto->Write ($path_pto_out); + +sub sgraphic2fisheye +{ + my $args = shift; + + my $A = $args->{rad_fov} / 2; + my $B = a2b ($A); + + my $pix_w2 = $args->{pix_width} / 2; + my $pix_h2 = $args->{pix_height} / 2; + + my $pix_dx = $args->{pix_x} - $pix_w2; + my $pix_dy = $args->{pix_y} - $pix_h2; + my $pix_b1 = dist ($pix_dx, $pix_dy); + + my $b1 = ($pix_b1 / $pix_w2) * $B; + my $a1 = b2a ($b1); + my $pix_a1 = ($a1 / $A) * $pix_w2; + + return ($pix_w2, $pix_h2) if ($pix_b1 == 0); + my $b1_a1 = $pix_a1 / $pix_b1; + return (($pix_dx * $b1_a1) + $pix_w2, ($pix_dy * $b1_a1) + $pix_h2); +} + +sub a2b +{ + my $a = shift; + 2 * tan ($a / 2); +} + +sub b2a +{ + my $b = shift; + 2 * atan ($b / 2); +} + +sub dist +{ + my ($x, $y) = @_; + sqrt (($x * $x) + ($y * $y)); +} + Property changes on: trunk/Panotools-Script/bin/match-n-shift ___________________________________________________________________ Name: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-02 18:28:35
|
Revision: 806 http://panotools.svn.sourceforge.net/panotools/?rev=806&view=rev Author: brunopostle Date: 2008-02-02 10:28:40 -0800 (Sat, 02 Feb 2008) Log Message: ----------- update notes Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-02 18:28:13 UTC (rev 805) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-02 18:28:40 UTC (rev 806) @@ -15,10 +15,11 @@ # the control point coordinates assuming that they are based on temporary # stereographic versions of the input photos, the resulting .oto file should be # applicable to the original fisheye photos. +# Recommend using --noransac and --points 100 # TODO # -# check that it actually works +# deal with v=0 situation # create the stereographic images via ImageMagick and nona # replace autopano-complete.sh logic # do the same for rectilinear photos @@ -62,12 +63,12 @@ my $pix_dx = $args->{pix_x} - $pix_w2; my $pix_dy = $args->{pix_y} - $pix_h2; my $pix_b1 = dist ($pix_dx, $pix_dy); + return ($pix_w2, $pix_h2) if ($pix_b1 == 0); my $b1 = ($pix_b1 / $pix_w2) * $B; my $a1 = b2a ($b1); my $pix_a1 = ($a1 / $A) * $pix_w2; - return ($pix_w2, $pix_h2) if ($pix_b1 == 0); my $b1_a1 = $pix_a1 / $pix_b1; return (($pix_dx * $b1_a1) + $pix_w2, ($pix_dy * $b1_a1) + $pix_h2); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-06 17:24:24
|
Revision: 807 http://panotools.svn.sourceforge.net/panotools/?rev=807&view=rev Author: brunopostle Date: 2008-02-06 09:24:23 -0800 (Wed, 06 Feb 2008) Log Message: ----------- Ooops old code. untested rectilinear photo support Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-02 18:28:40 UTC (rev 806) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-06 17:24:23 UTC (rev 807) @@ -5,7 +5,7 @@ use Math::Trig; use Panotools::Script; -# Wrapper to run autopano-sift on stereographic versions of fisheye images +# Wrapper to run autopano-sift on stereographic versions of photos # # Bruno Postle - February 2008 # @@ -14,15 +14,15 @@ # Stuff done so far: Takes an .oto file generated by autopano-sift and rewrites # the control point coordinates assuming that they are based on temporary # stereographic versions of the input photos, the resulting .oto file should be -# applicable to the original fisheye photos. -# Recommend using --noransac and --points 100 +# applicable to the original photos. +# Recommend using --noransac for fisheyes and --points 100 # TODO # -# deal with v=0 situation # create the stereographic images via ImageMagick and nona # replace autopano-complete.sh logic -# do the same for rectilinear photos +# test rectilinear photos +# delete points that end up on boundary (may happen with rectilinear input) # requires --fov and --projection parameters which need to be supplied by hugin # projection and FoV need to be set in .oto files @@ -35,27 +35,37 @@ for my $point (@{$pto->Control}) { my $n = $pto->Image->[$point->{n}]; - my $N = $pto->Image->[$point->{N}]; + my $n_fov = $n->{v}; + $n_fov = $pto->Image->[$1]->{v} if ($n_fov =~ /^=([[:digit:]]+)/); + ($point->{x}, $point->{y}) = - sgraphic2fisheye ({ rad_fov => deg2rad ($n->{v}), + from_sgraphic ({ rad_fov => deg2rad ($n_fov), + projection => $n->{f}, pix_x => $point->{x}, pix_y => $point->{y}, pix_width => $n->{w}, pix_height => $n->{h}}); + my $N = $pto->Image->[$point->{N}]; + + my $N_fov = $N->{v}; + $N_fov = $pto->Image->[$1]->{v} if ($N_fov =~ /^=([[:digit:]]+)/); + ($point->{X}, $point->{Y}) = - sgraphic2fisheye ({ rad_fov => deg2rad ($N->{v}), + from_sgraphic ({ rad_fov => deg2rad ($N_fov), + projection => $N->{f}, pix_x => $point->{X}, pix_y => $point->{Y}, pix_width => $N->{w}, pix_height => $N->{h}}); } $pto->Write ($path_pto_out); -sub sgraphic2fisheye +sub from_sgraphic { my $args = shift; my $A = $args->{rad_fov} / 2; my $B = a2b ($A); + my $C = b2c ($B); my $pix_w2 = $args->{pix_width} / 2; my $pix_h2 = $args->{pix_height} / 2; @@ -67,10 +77,18 @@ my $b1 = ($pix_b1 / $pix_w2) * $B; my $a1 = b2a ($b1); + my $c1 = b2c ($b1); my $pix_a1 = ($a1 / $A) * $pix_w2; + my $pix_c1 = ($c1 / $C) * $pix_w2; my $b1_a1 = $pix_a1 / $pix_b1; - return (($pix_dx * $b1_a1) + $pix_w2, ($pix_dy * $b1_a1) + $pix_h2); + my $b1_c1 = $pix_c1 / $pix_b1; + return (($pix_dx * $b1_a1) + $pix_w2, ($pix_dy * $b1_a1) + $pix_h2) + if ($args->{projection} == 2 or $args->{projection} == 3); # fisheye + return (($pix_dx * $b1_c1) + $pix_w2, ($pix_dy * $b1_c1) + $pix_h2) + if ($args->{projection} == 0); # rectilinear + print "Projection ". $args->{projection} ." is not azimuthal!\n"; + return ($args->{pix_x}, $args->{pix_y}); } sub a2b @@ -85,9 +103,23 @@ 2 * atan ($b / 2); } +sub b2c +{ + my $b = shift; + tan (2 * atan ($b / 2)); +} + +sub c2b +{ + my $c = shift; + 2 * tan (atan ($c) / 2); +} + sub dist { my ($x, $y) = @_; sqrt (($x * $x) + ($y * $y)); } +exit 0; + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-07 23:57:13
|
Revision: 808 http://panotools.svn.sourceforge.net/panotools/?rev=808&view=rev Author: brunopostle Date: 2008-02-07 15:57:13 -0800 (Thu, 07 Feb 2008) Log Message: ----------- This is for use in hugin as an an autopano-sift-c wrapper, it does all the usual autopano stuff except it does it on temporary stereographic versions of the photos. This is all done behind the scenes so all you have to do is to specify the projection type of your photos and an approximate field of view. I'd recommend also using --finetune option as this is better done in stereographic space in principle. Only tested on fisheye images, rectilinear should work but has had no testing. Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-06 17:24:23 UTC (rev 807) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-07 23:57:13 UTC (rev 808) @@ -2,63 +2,166 @@ use strict; use warnings; +use File::Spec::Functions; +use Getopt::Long; +use Pod::Usage; +use Image::Size; use Math::Trig; use Panotools::Script; +use File::Temp qw/tempdir/; -# Wrapper to run autopano-sift on stereographic versions of photos -# -# Bruno Postle - February 2008 -# -# UNFINISHED -# -# Stuff done so far: Takes an .oto file generated by autopano-sift and rewrites -# the control point coordinates assuming that they are based on temporary -# stereographic versions of the input photos, the resulting .oto file should be -# applicable to the original photos. -# Recommend using --noransac for fisheyes and --points 100 +# TODO test rectilinear photos -# TODO -# -# create the stereographic images via ImageMagick and nona -# replace autopano-complete.sh logic -# test rectilinear photos -# delete points that end up on boundary (may happen with rectilinear input) -# requires --fov and --projection parameters which need to be supplied by hugin -# projection and FoV need to be set in .oto files +my $path_oto; +my $pix_max = 800; +my $points = 10; +my $noransac = 0; +my $refine = 0; +my $projection = 0; +my $deg_fov = 50; +my $clean = 0; +my $help = 0; -my $path_pto = shift || die 'supply an input pto file'; -my $path_pto_out = shift || die 'supply an output pto file'; +GetOptions ('o|output=s' => \$path_oto, + 's|size=i' => \$pix_max, + 'p|points=i' => \$points, + 'n|noransac' => \$noransac, + 'r|refine' => \$refine, + 'f|projection=i' => \$projection, + 'v|fov=f' => \$deg_fov, + 'c|clean' => \$clean, + 'h|help' => \$help); -my $pto = new Panotools::Script; -$pto->Read ($path_pto); +my @paths_input = @ARGV; -for my $point (@{$pto->Control}) +pod2usage (-verbose => 2) if $help; +pod2usage (2) unless (defined $path_oto and scalar @paths_input > 1); + +# disable ransac for wideangle shots +my $ransac = 1; $ransac = 0 if ($noransac or $deg_fov > 60); +# extra refine options +my @refine = (); @refine = ('--refine', '--keep-unrefinable', 0) if $refine; + +my @paths_key = (); +my @paths_output = (); + +my $tempdir = tempdir (CLEANUP => $clean); +print STDOUT "using $tempdir\n"; + +my $index = 0; + +for my $path_input (@paths_input) { - my $n = $pto->Image->[$point->{n}]; + # create a smaller version of the original photo + my $path_input_small = catfile ($tempdir, "small_$index.tif"); + system ('convert', '-depth', 8, '-geometry', $pix_max.'x'.$pix_max, + $path_input, $path_input_small); + # create small stereographic version + my ($pix_width, $pix_height) = imgsize ($path_input_small); + my $path_pto_temp = catfile ($tempdir, "$index.pto"); + + # don't use stereographic is projection isn't azimuthal + my $projection_panorama = 4; + $projection_panorama = 1 if $projection == 1; + $projection_panorama = 2 if $projection == 4; + + my $pto = new Panotools::Script; + $pto->Panorama->Set (v => $deg_fov, E => 0, f => $projection_panorama, u => 0, + w => $pix_width, h => $pix_height, n => '"TIFF"'); + $pto->Image->[0] = new Panotools::Script::Line::Image; + $pto->Image->[0]->Set (w => $pix_width, h => $pix_height, v => $deg_fov, + f => $projection, Eev => 0, r => 0, p => 0, y => 0, n => "\"$path_input_small\""); + $pto->Write ($path_pto_temp); + + my $path_output_small = catfile ($tempdir, "sgraph_$index.tif"); + + system ('nona', '-p', 'UINT8', '-o', $path_output_small, $path_pto_temp); + $index++; + push @paths_output, $path_output_small; + + # create XML keyfile for stereographic version + my $path_key = "$path_output_small.key"; + push @paths_key, $path_key; + next if (-e $path_key and not $clean); + system ('generatekeys', $path_output_small, $path_key, $pix_max + 1); +} + +# create a project file based on the keyfiles +system ('autopano', @refine, '--ransac', $ransac, + '--maxmatches', $points, $path_oto, @paths_key); + +# delete temporary keyfiles +for my $path_key (@paths_key) +{ + unlink $path_key if ($clean); +} + +# Read in the generated project file +my $oto = new Panotools::Script; +$oto->Read ($path_oto); + +# fix control points +for my $point (@{$oto->Control}) +{ + my $n = $oto->Image->[$point->{n}]; + + $n->{v} = $deg_fov; + $n->{f} = $projection; + my $n_fov = $n->{v}; - $n_fov = $pto->Image->[$1]->{v} if ($n_fov =~ /^=([[:digit:]]+)/); + $n_fov = $oto->Image->[$1]->{v} if ($n_fov =~ /^=([[:digit:]]+)/); + # first convert back from stereographic ($point->{x}, $point->{y}) = from_sgraphic ({ rad_fov => deg2rad ($n_fov), projection => $n->{f}, pix_x => $point->{x}, pix_y => $point->{y}, pix_width => $n->{w}, pix_height => $n->{h}}); - my $N = $pto->Image->[$point->{N}]; + # scale back to original image dimensions + my ($n_pix_width, $n_pix_height) = imgsize ($paths_input[$point->{n}]); + my $n_scale_w = $n_pix_width / $n->{w}; + my $n_scale_h = $n_pix_height / $n->{h}; + $point->{x} *= $n_scale_w; + $point->{y} *= $n_scale_h; + + my $N = $oto->Image->[$point->{N}]; + + $N->{v} = $deg_fov; + $N->{f} = $projection; + my $N_fov = $N->{v}; - $N_fov = $pto->Image->[$1]->{v} if ($N_fov =~ /^=([[:digit:]]+)/); + $N_fov = $oto->Image->[$1]->{v} if ($N_fov =~ /^=([[:digit:]]+)/); + # first convert back from stereographic ($point->{X}, $point->{Y}) = from_sgraphic ({ rad_fov => deg2rad ($N_fov), projection => $N->{f}, pix_x => $point->{X}, pix_y => $point->{Y}, pix_width => $N->{w}, pix_height => $N->{h}}); + + # scale back to original image dimensions + my ($N_pix_width, $N_pix_height) = imgsize ($paths_input[$point->{N}]); + my $N_scale_w = $N_pix_width / $N->{w}; + my $N_scale_h = $N_pix_height / $N->{h}; + $point->{X} *= $N_scale_w; + $point->{Y} *= $N_scale_h; } -$pto->Write ($path_pto_out); +# fix image lines +$index = 0; +for my $image (@{$oto->Image}) +{ + $image->{n} = '"'. $paths_input[$index] .'"'; + ($image->{w}, $image->{h}) = imgsize ($paths_input[$index]); + $index++; +} +$oto->Write ($path_oto); + +# voodoo sub from_sgraphic { my $args = shift; @@ -123,3 +226,55 @@ exit 0; +__END__ + +=head1 NAME + +match-n-shift - wrapper to run autopano-sift on stereographic versions of photos + +=head1 SYNOPSIS + +match-n-shift [options] --output project.pto image1 image2 [...] + + Options: + -o | --output name Filename of created panorama project + -s | --size number Downsize images until width and height is + smaller than number, default 800 + -p | --points number Number of generated control points between, + each pair, default: 10 + -n | --noransac No ransac detection, useful for fisheye images + -r | --refine Refine the found control points using the + original images, delete unrefinable. + -f | --projection Panotools style input projection number + -v | --fov Horizontal field of view in degrees + -c | --clean Do not reuse keypoints detected in earlier runs, + deletes old keypoint files. + -h | --help Outputs help documentation. + +=head1 DESCRIPTION + +B<match-n-shift> takes a list of image files and creates a hugin +compatible project file containing control points linking the images together. + +It does this by creating scaled stereographic versions of the original photos +and identifying control points, then takes the generated .oto file and rewrites +the control point coordinates assuming that they are based on stereographic +versions of the input photos, the resulting .oto file should be applicable to +the original photos. + +=head1 LICENSE + +This file is licensed under the same terms as autopano-sift-C itself + +=head1 SEE ALSO + +L<http://hugin.sourceforge.net/> +L<http://cs.tu-berlin.de/~nowozin/autopano-sift/> + +=head1 AUTHOR + +Bruno Postle - February 2008. + +=cut + +=begin perl This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-08 17:37:27
|
Revision: 810 http://panotools.svn.sourceforge.net/panotools/?rev=810&view=rev Author: brunopostle Date: 2008-02-08 09:37:32 -0800 (Fri, 08 Feb 2008) Log Message: ----------- Make generated .oto file usable as a normal .pto project Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-08 00:03:29 UTC (rev 809) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-08 17:37:32 UTC (rev 810) @@ -19,6 +19,7 @@ my $refine = 0; my $projection = 0; my $deg_fov = 50; +my $crop_s = undef; my $clean = 0; my $help = 0; @@ -29,6 +30,7 @@ 'r|refine' => \$refine, 'f|projection=i' => \$projection, 'v|fov=f' => \$deg_fov, + 'k|selection=s' => \$crop_s, 'c|clean' => \$clean, 'h|help' => \$help); @@ -54,8 +56,9 @@ { # create a smaller version of the original photo my $path_input_small = catfile ($tempdir, "small_$index.tif"); + # if no ImageMagick, then use full size image, slooooow system ('convert', '-depth', 8, '-geometry', $pix_max.'x'.$pix_max, - $path_input, $path_input_small); + $path_input, $path_input_small) && ($path_input_small = $path_input); # create small stereographic version my ($pix_width, $pix_height) = imgsize ($path_input_small); @@ -101,6 +104,13 @@ my $oto = new Panotools::Script; $oto->Read ($path_oto); +# fix image lines +$index = 0; +for my $image (@{$oto->Image}) +{ + $image->{f} = $projection; +} + # fix control points for my $point (@{$oto->Control}) { @@ -156,6 +166,10 @@ { $image->{n} = '"'. $paths_input[$index] .'"'; ($image->{w}, $image->{h}) = imgsize ($paths_input[$index]); + $image->{S} = $crop_s if defined $crop_s; + $image->{v} = '=0' if $index > 0; + $image->{d} = '=0' if $index > 0; + $image->{e} = '=0' if $index > 0; $index++; } @@ -247,8 +261,8 @@ original images, delete unrefinable. -f | --projection Panotools style input projection number -v | --fov Horizontal field of view in degrees - -c | --clean Do not reuse keypoints detected in earlier runs, - deletes old keypoint files. + -k | --selection Crop selection boundary, eg -459,2459,-57,2861 + -c | --clean Delete all temporary files afterwards. -h | --help Outputs help documentation. =head1 DESCRIPTION This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-09 22:06:47
|
Revision: 811 http://panotools.svn.sourceforge.net/panotools/?rev=811&view=rev Author: brunopostle Date: 2008-02-09 14:06:50 -0800 (Sat, 09 Feb 2008) Log Message: ----------- Amazing! the untested code for rectilinear input Just Worked. Wide field of view rectilinear photos benefit from a stereographic workspace just like fisheye photos. Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-08 17:37:32 UTC (rev 810) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-09 22:06:50 UTC (rev 811) @@ -10,8 +10,6 @@ use Panotools::Script; use File::Temp qw/tempdir/; -# TODO test rectilinear photos - my $path_oto; my $pix_max = 800; my $points = 10; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-10 00:23:32
|
Revision: 812 http://panotools.svn.sourceforge.net/panotools/?rev=812&view=rev Author: brunopostle Date: 2008-02-09 16:23:37 -0800 (Sat, 09 Feb 2008) Log Message: ----------- Document projection reference numbers Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-09 22:06:50 UTC (rev 811) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-10 00:23:37 UTC (rev 812) @@ -257,7 +257,9 @@ -n | --noransac No ransac detection, useful for fisheye images -r | --refine Refine the found control points using the original images, delete unrefinable. - -f | --projection Panotools style input projection number + -f | --projection Panotools style input projection number. Use + 0 for rectilinear, 2 for circular fisheye and + 3 for full-frame fisheye images. -v | --fov Horizontal field of view in degrees -k | --selection Crop selection boundary, eg -459,2459,-57,2861 -c | --clean Delete all temporary files afterwards. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-13 22:43:10
|
Revision: 816 http://panotools.svn.sourceforge.net/panotools/?rev=816&view=rev Author: brunopostle Date: 2008-02-13 14:43:14 -0800 (Wed, 13 Feb 2008) Log Message: ----------- group autopano-sift related code to make it easier to replace with all-in-one apsc Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-12 23:27:16 UTC (rev 815) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-13 22:43:14 UTC (rev 816) @@ -42,7 +42,6 @@ # extra refine options my @refine = (); @refine = ('--refine', '--keep-unrefinable', 0) if $refine; -my @paths_key = (); my @paths_output = (); my $tempdir = tempdir (CLEANUP => $clean); @@ -80,8 +79,13 @@ system ('nona', '-p', 'UINT8', '-o', $path_output_small, $path_pto_temp); $index++; push @paths_output, $path_output_small; +} - # create XML keyfile for stereographic version +my @paths_key = (); + +# create XML keyfiles for stereographic version +for my $path_output_small (@paths_output) +{ my $path_key = "$path_output_small.key"; push @paths_key, $path_key; next if (-e $path_key and not $clean); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-15 21:47:04
|
Revision: 818 http://panotools.svn.sourceforge.net/panotools/?rev=818&view=rev Author: brunopostle Date: 2008-02-15 13:47:04 -0800 (Fri, 15 Feb 2008) Log Message: ----------- Option to disable ImageMagick downsizing Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-14 22:48:45 UTC (rev 817) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-15 21:47:04 UTC (rev 818) @@ -14,6 +14,7 @@ my $pix_max = 800; my $points = 10; my $noransac = 0; +my $nomagick = 0; my $refine = 0; my $projection = 0; my $deg_fov = 50; @@ -25,6 +26,7 @@ 's|size=i' => \$pix_max, 'p|points=i' => \$points, 'n|noransac' => \$noransac, + 'm|nomagick' => \$nomagick, 'r|refine' => \$refine, 'f|projection=i' => \$projection, 'v|fov=f' => \$deg_fov, @@ -54,14 +56,21 @@ # create a smaller version of the original photo my $path_input_small = File::Spec->catfile ($tempdir, "small_$index.tif"); # if no ImageMagick, then use full size image, slooooow - system ('convert', '-depth', 8, '-geometry', $pix_max.'x'.$pix_max, - $path_input, $path_input_small) && ($path_input_small = $path_input); + if ($nomagick) + { + $path_input_small = File::Spec->rel2abs ($path_input); + } + else + { + system ('convert', '-depth', 8, '-geometry', $pix_max.'x'.$pix_max, + $path_input, $path_input_small); + } # create small stereographic version my ($pix_width, $pix_height) = imgsize ($path_input_small); my $path_pto_temp = File::Spec->catfile ($tempdir, "$index.pto"); - # don't use stereographic is projection isn't azimuthal + # don't use stereographic if projection isn't azimuthal my $projection_panorama = 4; $projection_panorama = 1 if $projection == 1; $projection_panorama = 2 if $projection == 4; @@ -259,6 +268,8 @@ -p | --points number Number of generated control points between, each pair, default: 10 -n | --noransac No ransac detection, useful for fisheye images + -m | --nomagick Don't downscale with 'convert' before remapping, + use if your system doesn't have ImageMagick. -r | --refine Refine the found control points using the original images, delete unrefinable. -f | --projection Panotools style input projection number. Use This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-17 18:18:50
|
Revision: 820 http://panotools.svn.sourceforge.net/panotools/?rev=820&view=rev Author: brunopostle Date: 2008-02-17 10:18:52 -0800 (Sun, 17 Feb 2008) Log Message: ----------- fixes for bugs reported by Philipp B. Koch Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-15 22:51:28 UTC (rev 819) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-17 18:18:52 UTC (rev 820) @@ -29,7 +29,7 @@ 'm|nomagick' => \$nomagick, 'r|refine' => \$refine, 'f|projection=i' => \$projection, - 'v|fov=f' => \$deg_fov, + 'v|fov=s' => \$deg_fov, 'k|selection=s' => \$crop_s, 'c|clean' => \$clean, 'h|help' => \$help); @@ -39,6 +39,8 @@ pod2usage (-verbose => 2) if $help; pod2usage (2) unless (defined $path_oto and scalar @paths_input > 1); +# decimal separator workaround +$deg_fov =~ s/,.*//; # disable ransac for wideangle shots my $ransac = 1; $ransac = 0 if ($noransac or $deg_fov > 60); # extra refine options @@ -64,6 +66,7 @@ { system ('convert', '-depth', 8, '-geometry', $pix_max.'x'.$pix_max, $path_input, $path_input_small); + print STDOUT "Created $path_input_small\n"; } # create small stereographic version @@ -86,6 +89,7 @@ my $path_output_small = File::Spec->catfile ($tempdir, "sgraph_$index.tif"); system ('nona', '-p', 'UINT8', '-o', $path_output_small, $path_pto_temp); + print STDOUT "Created $path_output_small\n"; $index++; push @paths_output, $path_output_small; } @@ -215,7 +219,7 @@ if ($args->{projection} == 2 or $args->{projection} == 3); # fisheye return (($pix_dx * $b1_c1) + $pix_w2, ($pix_dy * $b1_c1) + $pix_h2) if ($args->{projection} == 0); # rectilinear - print "Projection ". $args->{projection} ." is not azimuthal!\n"; + print STDOUT "Projection ". $args->{projection} ." is not azimuthal!\n"; return ($args->{pix_x}, $args->{pix_y}); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-19 00:22:19
|
Revision: 821 http://panotools.svn.sourceforge.net/panotools/?rev=821&view=rev Author: brunopostle Date: 2008-02-18 16:22:24 -0800 (Mon, 18 Feb 2008) Log Message: ----------- Replace convert/nona with single step PTmender remapping and downscaling. Remove --nomagick option since ImageMagick no longer used. Add --align option to run autooptimiser on result. Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-17 18:18:52 UTC (rev 820) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-19 00:22:24 UTC (rev 821) @@ -14,11 +14,11 @@ my $pix_max = 800; my $points = 10; my $noransac = 0; -my $nomagick = 0; my $refine = 0; my $projection = 0; my $deg_fov = 50; my $crop_s = undef; +my $align = 0; my $clean = 0; my $help = 0; @@ -26,11 +26,11 @@ 's|size=i' => \$pix_max, 'p|points=i' => \$points, 'n|noransac' => \$noransac, - 'm|nomagick' => \$nomagick, 'r|refine' => \$refine, 'f|projection=i' => \$projection, 'v|fov=s' => \$deg_fov, 'k|selection=s' => \$crop_s, + 'a|align' => \$align, 'c|clean' => \$clean, 'h|help' => \$help); @@ -55,23 +55,12 @@ for my $path_input (@paths_input) { - # create a smaller version of the original photo - my $path_input_small = File::Spec->catfile ($tempdir, "small_$index.tif"); - # if no ImageMagick, then use full size image, slooooow - if ($nomagick) - { - $path_input_small = File::Spec->rel2abs ($path_input); - } - else - { - system ('convert', '-depth', 8, '-geometry', $pix_max.'x'.$pix_max, - $path_input, $path_input_small); - print STDOUT "Created $path_input_small\n"; - } + $path_input = File::Spec->rel2abs ($path_input); # create small stereographic version - my ($pix_width, $pix_height) = imgsize ($path_input_small); - my $path_pto_temp = File::Spec->catfile ($tempdir, "$index.pto"); + my ($pix_width_input, $pix_height_input) = imgsize ($path_input); + my $pix_width_small = $pix_max; + my $pix_height_small = int ($pix_height_input * $pix_width_small / $pix_width_input); # don't use stereographic if projection isn't azimuthal my $projection_panorama = 4; @@ -80,15 +69,20 @@ my $pto = new Panotools::Script; $pto->Panorama->Set (v => $deg_fov, E => 0, f => $projection_panorama, u => 0, - w => $pix_width, h => $pix_height, n => '"TIFF"'); + w => $pix_width_small, h => $pix_height_small, n => '"TIFF"'); $pto->Image->[0] = new Panotools::Script::Line::Image; - $pto->Image->[0]->Set (w => $pix_width, h => $pix_height, v => $deg_fov, - f => $projection, Eev => 0, r => 0, p => 0, y => 0, n => "\"$path_input_small\""); + $pto->Image->[0]->Set (w => $pix_width_input, h => $pix_height_input, v => $deg_fov, + f => $projection, Eev => 0, r => 0, p => 0, y => 0, n => "\"$path_input\""); + # make script PTmender compatible + $pto->Mode->Set (i => 17); + delete $pto->Panorama->{E}; + delete $pto->Image->[0]->{Eev}; + my $path_pto_temp = File::Spec->catfile ($tempdir, "$index.pto"); $pto->Write ($path_pto_temp); my $path_output_small = File::Spec->catfile ($tempdir, "sgraph_$index.tif"); - system ('nona', '-p', 'UINT8', '-o', $path_output_small, $path_pto_temp); + system ('PTmender', '-o', $path_output_small, $path_pto_temp); print STDOUT "Created $path_output_small\n"; $index++; push @paths_output, $path_output_small; @@ -188,7 +182,16 @@ $index++; } -$oto->Write ($path_oto); +if ($align) +{ + my $tempfile = File::Spec->catfile ($tempdir, 'align.oto'); + $oto->Write ($tempfile); + system ('autooptimiser', '-a', '-l', '-s', '-o', $path_oto, $tempfile); +} +else +{ + $oto->Write ($path_oto); +} # voodoo sub from_sgraphic @@ -272,8 +275,6 @@ -p | --points number Number of generated control points between, each pair, default: 10 -n | --noransac No ransac detection, useful for fisheye images - -m | --nomagick Don't downscale with 'convert' before remapping, - use if your system doesn't have ImageMagick. -r | --refine Refine the found control points using the original images, delete unrefinable. -f | --projection Panotools style input projection number. Use @@ -281,6 +282,7 @@ 3 for full-frame fisheye images. -v | --fov Horizontal field of view in degrees -k | --selection Crop selection boundary, eg -459,2459,-57,2861 + -a | --align Attempt to align images. -c | --clean Delete all temporary files afterwards. -h | --help Outputs help documentation. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-19 23:52:50
|
Revision: 822 http://panotools.svn.sourceforge.net/panotools/?rev=822&view=rev Author: brunopostle Date: 2008-02-19 15:52:49 -0800 (Tue, 19 Feb 2008) Log Message: ----------- Workaround PTmender circular fisheye bug with no specified crop circle. Don't specify feather as this generates a PTmender warning. Specify TIFF_m instead of TIFF to avoid PTmender warning. Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-02-19 00:22:24 UTC (rev 821) +++ trunk/Panotools-Script/bin/match-n-shift 2008-02-19 23:52:49 UTC (rev 822) @@ -67,12 +67,16 @@ $projection_panorama = 1 if $projection == 1; $projection_panorama = 2 if $projection == 4; + # work around PTmender bug with unspecified crop boundary + my $projection_temp = $projection; + $projection_temp = 3 if ($projection == 2); + my $pto = new Panotools::Script; - $pto->Panorama->Set (v => $deg_fov, E => 0, f => $projection_panorama, u => 0, - w => $pix_width_small, h => $pix_height_small, n => '"TIFF"'); + $pto->Panorama->Set (v => $deg_fov, E => 0, f => $projection_panorama, + w => $pix_width_small, h => $pix_height_small, n => '"TIFF_m"'); $pto->Image->[0] = new Panotools::Script::Line::Image; $pto->Image->[0]->Set (w => $pix_width_input, h => $pix_height_input, v => $deg_fov, - f => $projection, Eev => 0, r => 0, p => 0, y => 0, n => "\"$path_input\""); + f => $projection_temp, Eev => 0, r => 0, p => 0, y => 0, n => "\"$path_input\""); # make script PTmender compatible $pto->Mode->Set (i => 17); delete $pto->Panorama->{E}; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-04-14 21:07:47
|
Revision: 838 http://panotools.svn.sourceforge.net/panotools/?rev=838&view=rev Author: brunopostle Date: 2008-04-14 14:07:45 -0700 (Mon, 14 Apr 2008) Log Message: ----------- --matchpoint option Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-04-14 20:22:55 UTC (rev 837) +++ trunk/Panotools-Script/bin/match-n-shift 2008-04-14 21:07:45 UTC (rev 838) @@ -14,6 +14,7 @@ my $pix_max = 800; my $points = 10; my $noransac = 0; +my $matchpoint = 0; my $refine = 0; my $projection = 0; my $deg_fov = 50; @@ -26,6 +27,7 @@ 's|size=i' => \$pix_max, 'p|points=i' => \$points, 'n|noransac' => \$noransac, + 'm|matchpoint' => \$matchpoint, 'r|refine' => \$refine, 'f|projection=i' => \$projection, 'v|fov=s' => \$deg_fov, @@ -100,7 +102,14 @@ my $path_key = "$path_output_small.key"; push @paths_key, $path_key; next if (-e $path_key and not $clean); - system ('generatekeys', $path_output_small, $path_key, $pix_max + 1); + if ($matchpoint) + { + system ('matchpoint', $path_output_small, $path_key); + } + else + { + system ('generatekeys', $path_output_small, $path_key, $pix_max + 1); + } } # create a project file based on the keyfiles @@ -279,6 +288,8 @@ -p | --points number Number of generated control points between, each pair, default: 10 -n | --noransac No ransac detection, useful for fisheye images + -m | --matchpoint Use matchpoint from the hugin project, default + is generatekeys from autopano-sift-C -r | --refine Refine the found control points using the original images, delete unrefinable. -f | --projection Panotools style input projection number. Use This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-06-08 21:49:45
|
Revision: 845 http://panotools.svn.sourceforge.net/panotools/?rev=845&view=rev Author: brunopostle Date: 2008-06-08 14:49:52 -0700 (Sun, 08 Jun 2008) Log Message: ----------- Link photometric parameters in final project file Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-06-03 22:50:49 UTC (rev 844) +++ trunk/Panotools-Script/bin/match-n-shift 2008-06-08 21:49:52 UTC (rev 845) @@ -189,9 +189,11 @@ $image->{n} = '"'. $paths_input[$index] .'"'; ($image->{w}, $image->{h}) = imgsize (File::Spec->rel2abs ($paths_input[$index])); $image->{S} = $crop_s if defined $crop_s; - $image->{v} = '=0' if $index > 0; - $image->{d} = '=0' if $index > 0; - $image->{e} = '=0' if $index > 0; + # link all lens parameters + $image->Set (v => '=0', d => '=0', e => '=0', + Ra => '=0', Rb => '=0', Rc => '=0', Rd => '=0', Re => '=0', + Va => '=0', Vb => '=0', Vc => '=0', Vd => '=0', Vx => '=0', Vy => '=0') + if ($index > 0); $index++; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-07-10 22:39:51
|
Revision: 860 http://panotools.svn.sourceforge.net/panotools/?rev=860&view=rev Author: brunopostle Date: 2008-07-10 15:39:59 -0700 (Thu, 10 Jul 2008) Log Message: ----------- use STDERR instead of STDOUT, nothing important Modified Paths: -------------- trunk/Panotools-Script/bin/match-n-shift Modified: trunk/Panotools-Script/bin/match-n-shift =================================================================== --- trunk/Panotools-Script/bin/match-n-shift 2008-07-10 22:34:52 UTC (rev 859) +++ trunk/Panotools-Script/bin/match-n-shift 2008-07-10 22:39:59 UTC (rev 860) @@ -51,7 +51,7 @@ my @paths_output = (); my $tempdir = tempdir (CLEANUP => $clean); -print STDOUT "using $tempdir\n"; +print STDERR "using $tempdir\n"; my $index = 0; @@ -89,7 +89,7 @@ my $path_output_small = File::Spec->catfile ($tempdir, "sgraph_$index.tif"); system ('PTmender', '-o', $path_output_small, $path_pto_temp); - print STDOUT "Created $path_output_small\n"; + print STDERR "Created $path_output_small\n"; $index++; push @paths_output, $path_output_small; } @@ -237,7 +237,7 @@ if ($args->{projection} == 2 or $args->{projection} == 3); # fisheye return (($pix_dx * $b1_c1) + $pix_w2, ($pix_dy * $b1_c1) + $pix_h2) if ($args->{projection} == 0); # rectilinear - print STDOUT "Projection ". $args->{projection} ." is not azimuthal!\n"; + print STDERR "Projection ". $args->{projection} ." is not azimuthal!\n"; return ($args->{pix_x}, $args->{pix_y}); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |