OpenDroneMap-ODM/convert_vlsift_to_lowesift.pl

112 wiersze
2.2 KiB
Perl

#!/usr/local/bin/perl
$filename_base = $ARGV[0];
$write_binary = 1;
$filename_src = $filename_base.".key.sift";
$filename_dest_bin = $filename_base.".key.bin";
$filename_dest_key = $filename_base.".key";
$filename_image = $filename_base.".pgm";
open (DEST_BIN, ">$filename_dest_bin");
open (DEST_KEY, ">$filename_dest_key");
open (SRC, "$filename_src");
$linecount = 0;
$linecount += tr/\n/\n/ while sysread(SRC, $_, 2 ** 16);
printf ("%d", $linecount);
if($write_binary){
seek(SRC, 0, 0);
print DEST_BIN pack("L", $linecount);
while ($record = <SRC>) {
@parts = split(/ /, $record);
if(@parts[3] > 3.141){
@parts[3] -= 6.282;
}
@parts[3] *= -1;
@tmp = @parts[0];
@parts[0] = @parts[1];
@parts[1] = @tmp;
for ($count = 4; $count < 132; $count += 8) {
@tmp = @parts[$count+7];
@parts[$count+7] = @parts[$count+1];
@parts[$count+1] = @tmp;
@tmp = @parts[$count+6];
@parts[$count+6] = @parts[$count+2];
@parts[$count+2] = @tmp;
@tmp = @parts[$count+3];
@parts[$count+3] = @parts[$count+5];
@parts[$count+5] = @tmp;
}
print DEST_BIN pack("f4 C128", @parts);
}
}
seek(SRC, 0, 0);
print DEST_KEY $linecount, " 128\n";
while ($record = <SRC>) {
@parts = split(/ /, $record);
$counter = 0;
if(@parts[3] > 3.141){
@parts[3] -= 6.282;
}
@parts[3] *= -1;
printf (DEST_KEY "%.3f %.3f %.3f %.3f", @parts[1], @parts[0], @parts[2], @parts[3]);
shift(@parts);
shift(@parts);
shift(@parts);
shift(@parts);
for ($count = 0; $count < 128; $count += 8) {
@tmp = @parts[$count+7];
@parts[$count+7] = @parts[$count+1];
@parts[$count+1] = @tmp;
@tmp = @parts[$count+6];
@parts[$count+6] = @parts[$count+2];
@parts[$count+2] = @tmp;
@tmp = @parts[$count+3];
@parts[$count+3] = @parts[$count+5];
@parts[$count+5] = @tmp;
}
foreach (@parts) {
if((($counter) % 20) == 0) {
print DEST_KEY "\n ";
} else {
if($counter != 0){
print DEST_KEY " ";
}
}
print DEST_KEY $_;
$counter++;
}
}
close(DEST_BIN);
close(DEST_KEY);
close(SRC);