From: <bru...@us...> - 2008-07-30 17:56:07
|
Revision: 861 http://panotools.svn.sourceforge.net/panotools/?rev=861&view=rev Author: brunopostle Date: 2008-07-30 17:56:15 +0000 (Wed, 30 Jul 2008) Log Message: ----------- Bugfixes and fuzzy sorting (Felix Hagemann) Changes: - Fix wrong handling of variable and imagemetadata lines that leads to empty lines for images that have no v or #-hugin line - Fix wrrong variable line mapping - Add removal of duplicate control points that was present in the old ptosort, add option --clean to switch this off - Change search order strings to use comma as a separator to allow sorting by multi-character options such as exposure (Eev) - Add fuzzy sorting to image sort to allow for meaningful sorting of multirow panos, add modifier : and ~ to the search string to specify strict sort a fuzziness interval Modified Paths: -------------- trunk/Panotools-Script/bin/ptosort Modified: trunk/Panotools-Script/bin/ptosort =================================================================== --- trunk/Panotools-Script/bin/ptosort 2008-07-10 22:39:59 UTC (rev 860) +++ trunk/Panotools-Script/bin/ptosort 2008-07-30 17:56:15 UTC (rev 861) @@ -8,36 +8,69 @@ my $pto_in; my $pto_out; -my $image_sort = "n"; -my $point_sort = "nNy"; +my $image_sort = "n,"; +my $point_sort = "n,N,y"; +my $clean = "yes"; my $help; +my $image_sort_fuzzy; +$image_sort_fuzzy = { + y => 10.0, + p => 5.0, + r => 5.0, + Eev => 0.3 + }; + sub point_compare ( $$ ) { - foreach (split //,$point_sort) + foreach (split /,/,$point_sort) { - return $_[0]->{$_} <=> $_[1]->{$_} + return $_[0]->{$_} <=> $_[1]->{$_} if ($_[0]->{$_} != $_[1]->{$_}); } return 0; } sub image_compare ( $$ ) { - foreach (split //,$image_sort) + for my $skey (split /,/,$image_sort ) { - if ( /n/ ) + if ( $skey =~ /n/ ) { - return $_[0]->{$_} cmp $_[1]->{$_} - if ($_[0]->{$_} ne $_[1]->{$_}); + return $_[0]->{$skey} cmp $_[1]->{$skey} + if ($_[0]->{$skey} ne $_[1]->{$skey}); + next; } - return $_[0]->{$_} <=> $_[1]->{$_} - if ($_[0]->{$_} != $_[1]->{$_}); + elsif ( $skey =~ /^(.*):$/ ) + { + return $_[0]->{$1} <=> $_[1]->{$1} + if ($_[0]->{$1} != $_[1]->{$1}); + next; + } + elsif ( $skey =~ /^(.*)~([0-9.]+)$/ ) + { + $image_sort_fuzzy->{$1} = $2; + $skey = $1; + } + + if (exists $image_sort_fuzzy->{$skey}) + { + return -1 if $_[0]->{$skey} < $_[1]->{$skey} - $image_sort_fuzzy->{$skey} / 2.0; + return 1 if $_[0]->{$skey} > $_[1]->{$skey} + $image_sort_fuzzy->{$skey} / 2.0; + next; + } + else + { + return $_[0]->{$skey} <=> $_[1]->{$skey} + if ($_[0]->{$skey} != $_[1]->{$skey}); + next; + } } return 0; } GetOptions ('i|image=s' => \$image_sort, 'p|point=s' => \$point_sort, + 'c|clean=s' => \$clean, 'h|help' => \$help ); pod2usage (-verbose => 2) if $help; @@ -85,16 +118,24 @@ } } +# clear variable and imagemetadata in the new $sorted_pto +$sorted_pto->{imagemetadata} = []; +$sorted_pto->{variable} = new Panotools::Script::Line::Variable; + # reorder "image", "imagemetadata" and "variable" lines for my $index (0 .. scalar @{$pto->Image} - 1) { - next if $index == $mapping->{$index}; - @{$sorted_pto->{image}}[$mapping->{$index}] - = @{$pto->{image}}[$index]; - @{$sorted_pto->{imagemetadata}}[$mapping->{$index}] - = @{$pto->{imagemetadata}}[$index]; - $sorted_pto->Variable->{$index} - = $pto->Variable->{$mapping->{$index}}; + $sorted_pto->Image->[$mapping->{$index}] + = $pto->Image->[$index]; + if (defined $pto->ImageMetadata->[$index] ) + { + $sorted_pto->ImageMetadata->[$mapping->{$index}] + = $pto->ImageMetadata->[$index]; + } + if (exists $pto->Variable->{$index}) + { + $sorted_pto->Variable->{$mapping->{$index}} = $pto->Variable->{$index}; + } } # take care of hugins "anchor for position" image @@ -163,6 +204,12 @@ my $points = $sorted_pto->Control; @{$points} = sort point_compare @{$points}; +# remove duplicate control points +if ( $clean eq "yes" ) +{ + my $i = scalar (@{$sorted_pto->Duplicates}); + print STDERR "Duplicate control points removed: $i\n" if $i; +} $sorted_pto->Write($pto_out); @@ -181,6 +228,8 @@ Options: -p | --point order Provide a sorting order for control points -i | --image order Provide a sorting order for images + -c | --clean yes/no Switch removal of duplicate control points + on/off, default is on -h | --help Show the full manpage =cut @@ -194,14 +243,21 @@ The --point and --image command line options can be used to modify the sorting order. The order string should consist of a list letters -identifying the values to be taken for the comparison, e.g. for images -y means yaw or r means roll. +separated by commas identifying the values to be taken for the +comparison, e.g. for images y means yaw or r means roll. By default +sorting for yaw (y), pitch (p), roll (r) and exposure (Eev) is fuzzy, +i.e. values within an interval of 10 degress for yaw are considered to +be the same. This is especially useful when sorting multirow +panoramas. Appending a colon to the sort parameter forces strict +sorting without fuzziness, while appending a tilde and a numerical +value can be used to specify the fuzziness in terms of intervall +width. =head1 EXAMPLES =over 5 -=item ptosort --image n --point nNy in.pto out.pto +=item ptosort --image n --point n,N,y in.pto out.pto Sort the images by filename and the control points by left image number, right image number and y pixel coordinate. This is identical @@ -211,6 +267,15 @@ Sort images by yaw and control points using the default. +=item ptosort --image y,p,Eev in.pto out.pto + +Sort images in a multiraw panorama by position and exposure value. + +=item ptosort --image Eev:,y~5.5,p in.pto out.pto + +Sort strict without fuzziness by exposure value, with a fuzziness +interval of 5.5 degree by yaw and by pitch. + =back =head1 LICENSE This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2010-04-06 23:20:27
|
Revision: 1261 http://panotools.svn.sourceforge.net/panotools/?rev=1261&view=rev Author: brunopostle Date: 2010-04-06 23:20:21 +0000 (Tue, 06 Apr 2010) Log Message: ----------- ptosort: support k 'mask' entries Modified Paths: -------------- trunk/Panotools-Script/bin/ptosort Modified: trunk/Panotools-Script/bin/ptosort =================================================================== --- trunk/Panotools-Script/bin/ptosort 2010-04-05 17:08:29 UTC (rev 1260) +++ trunk/Panotools-Script/bin/ptosort 2010-04-06 23:20:21 UTC (rev 1261) @@ -193,6 +193,12 @@ $cp->{N} = $mapping->{$cp->{N}}; } +for my $index ( 0 .. scalar @{$sorted_pto->Mask} - 1 ) +{ + my $mask = $sorted_pto->Mask->[$index]; + $mask->{i} = $mapping->{$mask->{i}}; +} + # change controlmorph points for my $index ( 0 .. scalar @{$sorted_pto->ControlMorph} - 1 ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |