From c081cf9d208e73928ed5b71535143787d77a126b Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 5 Nov 2010 04:10:31 +0100 Subject: [PATCH] new run perl script; cleaned install scroot --- ccd_defs.pl | 273 ++++++++++++++++++++++ convert_vlsift_to_lowesift.pl | 45 ++++ install.sh | 48 +++- run.pl | 414 ++++++++++++++++++++++++++++++++++ 4 files changed, 776 insertions(+), 4 deletions(-) create mode 100644 ccd_defs.pl create mode 100755 convert_vlsift_to_lowesift.pl create mode 100644 run.pl diff --git a/ccd_defs.pl b/ccd_defs.pl new file mode 100644 index 00000000..5443808b --- /dev/null +++ b/ccd_defs.pl @@ -0,0 +1,273 @@ +#!/usr/bin/perl + +%ccdWidths = ( + "Asahi Optical Co.,Ltd. PENTAX Optio330RS" => 7.176, # 1/1.8" + "Canon Canon DIGITAL IXUS 400" => 7.176, # 1/1.8" + "Canon Canon DIGITAL IXUS 40" => 5.76, # 1/2.5" + "Canon Canon DIGITAL IXUS 430" => 7.176, # 1/1.8" + "Canon Canon DIGITAL IXUS 500" => 7.176, # 1/1.8" + "Canon Canon DIGITAL IXUS 50" => 5.76, # 1/2.5" + "Canon Canon DIGITAL IXUS 55" => 5.76, # 1/2.5" + "Canon Canon DIGITAL IXUS 60" => 5.76, # 1/2.5" + "Canon Canon DIGITAL IXUS 65" => 5.76, # 1/2.5" + "Canon Canon DIGITAL IXUS 700" => 7.176, # 1/1.8" + "Canon Canon DIGITAL IXUS 750" => 7.176, # 1/1.8" + "Canon Canon DIGITAL IXUS 800 IS" => 5.76, # 1/2.5" + "Canon Canon DIGITAL IXUS II" => 5.27, # 1/2.7" + "Canon Canon EOS 10D" => 22.7, + "Canon Canon EOS-1D Mark II" => 28.7, + "Canon Canon EOS-1Ds Mark II" => 35.95, + "Canon Canon EOS 20D" => 22.5, + "Canon Canon EOS 20D" => 22.5, + "Canon Canon EOS 300D DIGITAL" => 22.66, + "Canon Canon EOS 30D" => 22.5, + "Canon Canon EOS 350D DIGITAL" => 22.2, + "Canon Canon EOS 400D DIGITAL" => 22.2, + "Canon Canon EOS 40D" => 22.2, + "Canon Canon EOS 5D" => 35.8, + "Canon Canon EOS DIGITAL REBEL" => 22.66, + "Canon Canon EOS DIGITAL REBEL XT" => 22.2, + "Canon Canon EOS DIGITAL REBEL XTi" => 22.2, + "Canon Canon EOS Kiss Digital" => 22.66, + "Canon Canon IXY DIGITAL 600" => 7.176, # 1/1.8" + "Canon Canon PowerShot A10" => 5.23, # 1/1.8" + "Canon Canon PowerShot A20" => 7.176, # 1/1.8" + "Canon Canon PowerShot A400" => 4.54, # 1/3.2" + "Canon Canon PowerShot A40" => 5.27, # 1/2.7" + "Canon Canon PowerShot A510" => 5.76, # 1/2.5" + "Canon Canon PowerShot A520" => 5.76, # 1/2.5" + "Canon Canon PowerShot A530" => 5.76, # 1/2.5" + "Canon Canon PowerShot A60" => 5.27, # 1/2.7" + "Canon Canon PowerShot A620" => 7.176, # 1/1.8" + "Canon Canon PowerShot A630" => 7.176, # 1/1.8" + "Canon Canon PowerShot A640" => 7.176, # 1/1.8" + "Canon Canon PowerShot A700" => 5.76, # 1/2.5" + "Canon Canon PowerShot A70" => 5.27, # 1/2.7" + "Canon Canon PowerShot A710 IS" => 5.76, # 1/2.5" + "Canon Canon PowerShot A75" => 5.27, # 1/2.7" + "Canon Canon PowerShot A80" => 7.176, # 1/1.8" + "Canon Canon PowerShot A85" => 5.27, # 1/2.7" + "Canon Canon PowerShot A95" => 7.176, # 1/1.8" + "Canon Canon PowerShot G1" => 7.176, # 1/1.8" + "Canon Canon PowerShot G2" => 7.176, # 1/1.8" + "Canon Canon PowerShot G3" => 7.176, # 1/1.8" + "Canon Canon PowerShot G5" => 7.176, # 1/1.8" + "Canon Canon PowerShot G6" => 7.176, # 1/1.8" + "Canon Canon PowerShot G7" => 7.176, # 1/1.8" + "Canon Canon PowerShot G9" => 7.600, # 1/1.7" + "Canon Canon PowerShot Pro1" => 8.8, # 2/3" + "Canon Canon PowerShot S110" => 5.27, # 1/2.7" + "Canon Canon PowerShot S1 IS" => 5.27, # 1/2.7" + "Canon Canon PowerShot S200" => 5.27, # 1/2.7" + "Canon Canon PowerShot S2 IS" => 5.76, # 1/2.5" + "Canon Canon PowerShot S30" => 7.176, # 1/1.8" + "Canon Canon PowerShot S3 IS" => 5.76, # 1/2.5" + "Canon Canon PowerShot S400" => 7.176, # 1/1.8" + "Canon Canon PowerShot S40" => 7.176, # 1/1.8" + "Canon Canon PowerShot S410" => 7.176, # 1/1.8" + "Canon Canon PowerShot S45" => 7.176, # 1/1.8" + "Canon Canon PowerShot S500" => 7.176, # 1/1.8" + "Canon Canon PowerShot S50" => 7.176, # 1/1.8" + "Canon Canon PowerShot S60" => 7.176, # 1/1.8" + "Canon Canon PowerShot S70" => 7.176, # 1/1.8" + "Canon Canon PowerShot S80" => 7.176, # 1/1.8" + "Canon Canon PowerShot SD1000" => 5.75, # 1/2.5" + "Canon Canon PowerShot SD100" => 5.27, # 1/2.7" + "Canon Canon PowerShot SD10" => 5.75, # 1/2.5" + "Canon Canon PowerShot SD110" => 5.27, # 1/2.7" + "Canon Canon PowerShot SD200" => 5.76, # 1/2.5" + "Canon Canon PowerShot SD300" => 5.76, # 1/2.5" + "Canon Canon PowerShot SD400" => 5.76, # 1/2.5" + "Canon Canon PowerShot SD450" => 5.76, # 1/2.5" + "Canon Canon PowerShot SD500" => 7.176, # 1/1.8" + "Canon Canon PowerShot SD550" => 7.176, # 1/1.8" + "Canon Canon PowerShot SD600" => 5.76, # 1/2.5" + "Canon Canon PowerShot SD630" => 5.76, # 1/2.5" + "Canon Canon PowerShot SD700 IS" => 5.76, # 1/2.5" + "Canon Canon PowerShot SD750" => 5.75, # 1/2.5" + "Canon Canon PowerShot SD800 IS" => 5.76, # 1/2.5" + "Canon EOS 300D DIGITAL" => 22.66, + "Canon EOS DIGITAL REBEL" => 22.66, + "Canon PowerShot A510" => 5.76, # 1/2.5" ??? + "Canon PowerShot S30" => 7.176, # 1/1.8" + "CASIO COMPUTER CO.,LTD. EX-S500" => 5.76, # 1/2.5" + "CASIO COMPUTER CO.,LTD. EX-Z1000" => 7.716, # 1/1.8" + "CASIO COMPUTER CO.,LTD EX-Z30" => 5.76, # 1/2.5 " + "CASIO COMPUTER CO.,LTD. EX-Z600" => 5.76, # 1/2.5" + "CASIO COMPUTER CO.,LTD. EX-Z60" => 7.176, # 1/1.8" + "CASIO COMPUTER CO.,LTD EX-Z750" => 7.176, # 1/1.8" + "CASIO COMPUTER CO.,LTD. EX-Z850" => 7.176, + "EASTMAN KODAK COMPANY KODAK CX7330 ZOOM DIGITAL CAMERA" => 5.27, # 1/2.7" + "EASTMAN KODAK COMPANY KODAK CX7530 ZOOM DIGITAL CAMERA" => 5.76, # 1/2.5" + "EASTMAN KODAK COMPANY KODAK DX3900 ZOOM DIGITAL CAMERA" => 7.176, # 1/1.8" + "EASTMAN KODAK COMPANY KODAK DX4900 ZOOM DIGITAL CAMERA" => 7.176, # 1/1.8" + "EASTMAN KODAK COMPANY KODAK DX6340 ZOOM DIGITAL CAMERA" => 5.27, # 1/2.7" + "EASTMAN KODAK COMPANY KODAK DX6490 ZOOM DIGITAL CAMERA" => 5.76, # 1/2.5" + "EASTMAN KODAK COMPANY KODAK DX7630 ZOOM DIGITAL CAMERA" => 7.176, # 1/1.8" + "EASTMAN KODAK COMPANY KODAK Z650 ZOOM DIGITAL CAMERA" => 5.76, # 1/2.5" + "EASTMAN KODAK COMPANY KODAK Z700 ZOOM DIGITAL CAMERA" => 5.76, # 1/2.5" + "EASTMAN KODAK COMPANY KODAK Z740 ZOOM DIGITAL CAMERA" => 5.76, # 1/2.5" + "EASTMAN KODAK COMPANY KODAK Z740 ZOOM DIGITAL CAMERA" => 5.76, # 1/2.5" ? + "FUJIFILM FinePix2600Zoom" => 5.27, # 1/2.7" + "FUJIFILM FinePix40i" => 7.600, # 1/1.7" + "FUJIFILM FinePix A310" => 5.27, # 1/2.7" + "FUJIFILM FinePix A330" => 5.27, # 1/2.7" + "FUJIFILM FinePix A600" => 7.600, # 1/1.7" + "FUJIFILM FinePix E500" => 5.76, # 1/2.5" + "FUJIFILM FinePix E510" => 5.76, # 1/2.5" + "FUJIFILM FinePix E550" => 7.600, # 1/1.7" + "FUJIFILM FinePix E900" => 7.78, # 1/1.6" + "FUJIFILM FinePix F10" => 7.600, # 1/1.7" + "FUJIFILM FinePix F30" => 7.600, # 1/1.7" + "FUJIFILM FinePix F450" => 5.76, # 1/2.5" + "FUJIFILM FinePix F601 ZOOM" => 7.600, # 1/1.7" + "FUJIFILM FinePix S3Pro" => 23.0, + "FUJIFILM FinePix S5000" => 5.27, # 1/2.7" + "FUJIFILM FinePix S5200" => 5.76, # 1/2.5" + "FUJIFILM FinePix S5500" => 5.27, # 1/2.7" + "FUJIFILM FinePix S6500fd" => 7.600, # 1/1.7" + "FUJIFILM FinePix S7000" => 7.600, # 1/1.7" + "FUJIFILM FinePix Z2" => 5.76, # 1/2.5" + "Hewlett-Packard hp 635 Digital Camera" => 4.54, # 1/3.2" + "Hewlett-Packard hp PhotoSmart 43x series" => 5.27, # 1/2.7" + "Hewlett-Packard HP PhotoSmart 618 (V1.1)" => 5.27, # 1/2.7" + "Hewlett-Packard HP PhotoSmart C945 (V01.61)" => 7.176, # 1/1.8" + "Hewlett-Packard HP PhotoSmart R707 (V01.00)" => 7.176, # 1/1.8" + "KONICA MILOLTA DYNAX 5D" => 23.5, + "Konica Minolta Camera, Inc. DiMAGE A2" => 8.80, # 2/3" + "KONICA MINOLTA CAMERA, Inc. DiMAGE G400" => 5.76, # 1/2.5" + "Konica Minolta Camera, Inc. DiMAGE Z2" => 5.76, # 1/2.5" + "KONICA MINOLTA DiMAGE A200" => 8.80, # 2/3" + "KONICA MINOLTA DiMAGE X1" => 7.176, # 1/1.8" + "KONICA MINOLTA DYNAX 5D" => 23.5, + "Minolta Co., Ltd. DiMAGE F100" => 7.176, # 1/2.7" + "Minolta Co., Ltd. DiMAGE Xi" => 5.27, # 1/2.7" + "Minolta Co., Ltd. DiMAGE Xt" => 5.27, # 1/2.7" + "Minolta Co., Ltd. DiMAGE Z1" => 5.27, # 1/2.7" + "NIKON COOLPIX L3" => 5.76, # 1/2.5" + "NIKON COOLPIX P2" => 7.176, # 1/1.8" + "NIKON COOLPIX S4" => 5.76, # 1/2.5" + "NIKON COOLPIX S7c" => 5.76, # 1/2.5" + "NIKON CORPORATION NIKON D100" => 23.7, + "NIKON CORPORATION NIKON D1" => 23.7, + "NIKON CORPORATION NIKON D1H" => 23.7, + "NIKON CORPORATION NIKON D200" => 23.6, + "NIKON CORPORATION NIKON D2H" => 23.3, + "NIKON CORPORATION NIKON D2X" => 23.7, + "NIKON CORPORATION NIKON D40" => 23.7, + "NIKON CORPORATION NIKON D50" => 23.7, + "NIKON CORPORATION NIKON D60" => 23.6, + "NIKON CORPORATION NIKON D70" => 23.7, + "NIKON CORPORATION NIKON D70s" => 23.7, + "NIKON CORPORATION NIKON D80" => 23.6, + "NIKON E2500" => 5.27, # 1/2.7" + "NIKON E2500" => 5.27, # 1/2.7" + "NIKON E3100" => 5.27, # 1/2.7" + "NIKON E3200" => 5.27, + "NIKON E3700" => 5.27, # 1/2.7" + "NIKON E4200" => 7.176, # 1/1.8" + "NIKON E4300" => 7.18, + "NIKON E4500" => 7.176, # 1/1.8" + "NIKON E4600" => 5.76, # 1/2.5" + "NIKON E5000" => 8.80, # 2/3" + "NIKON E5200" => 7.176, # 1/1.8" + "NIKON E5400" => 7.176, # 1/1.8" + "NIKON E5600" => 5.76, # 1/2.5" + "NIKON E5700" => 8.80, # 2/3" + "NIKON E5900" => 7.176, # 1/1.8" + "NIKON E7600" => 7.176, # 1/1.8" + "NIKON E775" => 5.27, # 1/2.7" + "NIKON E7900" => 7.176, # 1/1.8" + "NIKON E7900" => 7.176, # 1/1.8" + "NIKON E8800" => 8.80, # 2/3" + "NIKON E990" => 7.176, # 1/1.8" + "NIKON E995" => 7.176, # 1/1.8" + "NIKON S1" => 5.76, # 1/2.5" + "Nokia N80" => 5.27, # 1/2.7" + "Nokia N80" => 5.27, # 1/2.7" + "Nokia N93" => 4.536, # 1/3.1" + "Nokia N95" => 5.7, # 1/2.7" + "OLYMPUS CORPORATION C-5000Z" => 7.176, # 1/1.8" + "OLYMPUS CORPORATION C5060WZ" => 7.176, # 1/1.8" + "OLYMPUS CORPORATION C750UZ" => 5.27, # 1/2.7" + "OLYMPUS CORPORATION C765UZ" => 5.76, # 1//2.5" + "OLYMPUS CORPORATION C8080WZ" => 8.80, # 2/3" + "OLYMPUS CORPORATION X250,D560Z,C350Z" => 5.76, # 1/2.5" + "OLYMPUS CORPORATION X-3,C-60Z" => 7.176, # 1.8" + "OLYMPUS CORPORATION X400,D580Z,C460Z" => 5.27, # 1/2.7" + "OLYMPUS IMAGING CORP. E-500" => 17.3, # 4/3? + "OLYMPUS IMAGING CORP. FE115,X715" => 5.76, # 1/2.5" + "OLYMPUS IMAGING CORP. SP310" => 7.176, # 1/1.8" + "OLYMPUS IMAGING CORP. SP510UZ" => 5.75, # 1/2.5" + "OLYMPUS IMAGING CORP. SP550UZ" => 5.76, # 1/2.5" + "OLYMPUS IMAGING CORP. uD600,S600" => 5.75, # 1/2.5" + "OLYMPUS_IMAGING_CORP. X450,D535Z,C370Z" => 5.27, # 1/2.7" + "OLYMPUS IMAGING CORP. X550,D545Z,C480Z" => 5.76, # 1/2.5" + "OLYMPUS OPTICAL CO.,LTD C2040Z" => 6.40, # 1/2" + "OLYMPUS OPTICAL CO.,LTD C211Z" => 5.27, # 1/2.7" + "OLYMPUS OPTICAL CO.,LTD C2Z,D520Z,C220Z" => 4.54, # 1/3.2" + "OLYMPUS OPTICAL CO.,LTD C3000Z" => 7.176, # 1/1.8" + "OLYMPUS OPTICAL CO.,LTD C300Z,D550Z" => 5.4, + "OLYMPUS OPTICAL CO.,LTD C4100Z,C4000Z" => 7.176, # 1/1.8" + "OLYMPUS OPTICAL CO.,LTD C750UZ" => 5.27, # 1/2.7" + "OLYMPUS OPTICAL CO.,LTD X-2,C-50Z" => 7.176, # 1/1.8" + "OLYMPUS SP550UZ" => 5.76, # 1/2.5" + "OLYMPUS X100,D540Z,C310Z" => 5.27, # 1/2.7" + "Panasonic DMC-FX01" => 5.76, # 1/2.5" + "Panasonic DMC-FX07" => 5.75, # 1/2.5" + "Panasonic DMC-FX9" => 5.76, # 1/2.5" + "Panasonic DMC-FZ20" => 5.760, # 1/2.5" + "Panasonic DMC-FZ2" => 4.54, # 1/3.2" + "Panasonic DMC-FZ30" => 7.176, # 1/1.8" + "Panasonic DMC-FZ50" => 7.176, # 1/1.8" + "Panasonic DMC-FZ5" => 5.760, # 1/2.5" + "Panasonic DMC-FZ7" => 5.76, # 1/2.5" + "Panasonic DMC-LC1" => 8.80, # 2/3" + "Panasonic DMC-LC33" => 5.760, # 1/2.5" + "Panasonic DMC-LX1" => 8.50, # 1/6.5" + "Panasonic DMC-LZ2" => 5.76, # 1/2.5" + "Panasonic DMC-TZ1" => 5.75, # 1/2.5" + "Panasonic DMC-TZ3" => 5.68, # 1/2.35" + "PENTAX Corporation PENTAX *ist DL" => 23.5, + "PENTAX Corporation PENTAX *ist DS2" => 23.5, + "PENTAX Corporation PENTAX *ist DS" => 23.5, + "PENTAX Corporation PENTAX K100D" => 23.5, + "PENTAX Corporation PENTAX Optio 450" => 7.176, # 1/1.8" + "PENTAX Corporation PENTAX Optio 550" => 7.176, # 1/1.8" + "PENTAX Corporation PENTAX Optio E10" => 5.76, # 1/2.5" + "PENTAX Corporation PENTAX Optio S40" => 5.76, # 1/2.5" + "PENTAX Corporation PENTAX Optio S4" => 5.76, # 1/2.5" + "PENTAX Corporation PENTAX Optio S50" => 5.76, # 1/2.5" + "PENTAX Corporation PENTAX Optio S5i" => 5.76, # 1/2.5" + "PENTAX Corporation PENTAX Optio S5z" => 5.76, # 1/2.5" + "PENTAX Corporation PENTAX Optio SV" => 5.76, # 1/2.5" + "PENTAX Corporation PENTAX Optio WP" => 5.75, # 1/2.5" + "RICOH CaplioG3 modelM" => 5.27, # 1/2.7" + "RICOH Caplio GX" => 7.176, # 1/1.8" + "RICOH Caplio R30" => 5.75, # 1/2.5" + "Samsung Digimax 301" => 5.27, # 1/2.7" + "Samsung Techwin " => 5.76, # 1/2.5" + "SAMSUNG TECHWIN Pro 815" => 8.80, # 2/3" + "SONY DSC-F828" => 8.80, # 2/3" + "SONY DSC-N12" => 7.176, # 1/1.8" + "SONY DSC-P100" => 7.176, # 1/1.8" + "SONY DSC-P10" => 7.176, # 1/1.8" + "SONY DSC-P12" => 7.176, # 1/1.8" + "SONY DSC-P150" => 7.176, # 1/1.8" + "SONY DSC-P200" => 7.176, # 1/1.8"); + "SONY DSC-P52" => 5.27, # 1/2.7" + "SONY DSC-P72" => 5.27, # 1/2.7" + "SONY DSC-P73" => 5.27, + "SONY DSC-P8" => 5.27, # 1/2.7" + "SONY DSC-R1" => 21.5, + "SONY DSC-S40" => 5.27, # 1/2.7" + "SONY DSC-S600" => 5.760, # 1/2.5" + "SONY DSC-T9" => 7.18, + "SONY DSC-V1" => 7.176, # 1/1.8" + "SONY DSC-W1" => 7.176, # 1/1.8" + "SONY DSC-W30" => 5.760, # 1/2.5" + "SONY DSC-W50" => 5.75, # 1/2.5" + "SONY DSC-W5" => 7.176, # 1/1.8" + "SONY DSC-W7" => 7.176, # 1/1.8" + "SONY DSC-W80" => 5.75, # 1/2.5" +); \ No newline at end of file diff --git a/convert_vlsift_to_lowesift.pl b/convert_vlsift_to_lowesift.pl new file mode 100755 index 00000000..153e780e --- /dev/null +++ b/convert_vlsift_to_lowesift.pl @@ -0,0 +1,45 @@ +#!/usr/local/bin/perl + +$filename = $ARGV[0]; + +open (DEST, ">$filename.key"); +open (SRC, "$filename.key.tmp"); + +$resolution_line = `jhead $filename.jpg | grep "Resolution"`; +($res_x, $res_y) = $resolution_line =~ /: ([0-9]*) x ([0-9]*)/; + +$linecount = 0; +$linecount += tr/\n/\n/ while sysread(SRC, $_, 2 ** 16); + +seek(SRC, 0, 0); + +print DEST $linecount; +print DEST " 128\n"; + +printf ("found %d features in %s.jpg\n\n", $linecount, $filename); + +while ($record = ) { + @parts = split(/ /, $record); + + $counter = 0; + + $parts[0] = $res_x-$parts[0]; + + foreach (@parts) { + + if((($counter-4) % 20) == 0) { + print DEST "\n "; + } else { + if($counter != 0){ + print DEST " "; + } + } + + print DEST $_; + + $counter++; + } +} + +close(DEST); +close(SRC); \ No newline at end of file diff --git a/install.sh b/install.sh index 95ada587..097e3d0f 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/bin/bash -script_dir=$(dirname $0) -. $script_dir/defs.sh +set -o nounset +set -o errexit echo echo " created by Daniel Schwarz/daniel.schwarz@topoi.org" @@ -14,6 +14,47 @@ echo echo echo " - script started - `date`" +TOOLS_PATH=$PWD/$(dirname $0) + +IMAGE_DIR="." + +## paths for the tools +TOOLS_BIN_PATH=$TOOLS_PATH/bin +TOOLS_INC_PATH=$TOOLS_PATH/include +TOOLS_LIB_PATH=$TOOLS_PATH/lib +TOOLS_SRC_PATH=$TOOLS_PATH/src +TOOLS_LOG_PATH=$TOOLS_PATH/logs + +## loacal dest paths +LIB_PATH="/usr/local/lib" +INC_PATH="/usr/local/include" + +## source paths +BUNDLER_PATH="$TOOLS_SRC_PATH/bundler" +CMVS_PATH="$TOOLS_SRC_PATH/cmvs" +PMVS_PATH="$TOOLS_SRC_PATH/pmvs" +GRACLUS_PATH="$TOOLS_SRC_PATH/graclus" +CLAPACK_PATH="$TOOLS_SRC_PATH/clapack" +OPENCV_PATH="$TOOLS_SRC_PATH/openCv" +VLFEAT_PATH="$TOOLS_SRC_PATH/vlfeat" +SIFT_PATH="$TOOLS_SRC_PATH/sift" +PARALLEL_PATH="$TOOLS_SRC_PATH/parallel" +PSR_PATH="$TOOLS_SRC_PATH/PoissonRecon" + +## executables +EXTRACT_FOCAL=$TOOLS_BIN_PATH/extract_focal.pl +MATCHKEYS=$TOOLS_BIN_PATH/KeyMatchFull +BUNDLER=$TOOLS_BIN_PATH/bundler +BUNDLE2PVMS=$TOOLS_BIN_PATH/Bundle2PMVS +CMVS=$TOOLS_BIN_PATH/cmvs +PMVS=$TOOLS_BIN_PATH/pmvs2 +GENOPTION=$TOOLS_BIN_PATH/genOption +SIFT=$TOOLS_BIN_PATH/sift +VLSIFT=$TOOLS_BIN_PATH/vlsift +PARALLEL=$TOOLS_BIN_PATH/parallel +PSR=$TOOLS_BIN_PATH/PoissonRecon +VLSIFT_TO_LOWESIFT=$TOOLS_BIN_PATH/convert_vlsift_to_lowesift.pl + ARCH=`uname -m` CORES=`ls -d /sys/devices/system/cpu/cpu[[:digit:]]* | wc -w` @@ -21,8 +62,7 @@ CORES=`ls -d /sys/devices/system/cpu/cpu[[:digit:]]* | wc -w` LC_ALL=C ## removing old stuff -rm -irf `ls -1 | egrep -v '\.zip$|\.tgz$|\.bz2$|\.gz$|\.sh$|^bin$' | xargs` -rm -irf `find bin | egrep -v '\.pl$|^bin$' | xargs` +rm -irf `ls -1 | egrep -v '\.zip$|\.tgz$|\.bz2$|\.gz$|\.sh$|\.pl$' | xargs` #find . -maxdepth 0 \! -name \*.tgz \! -name \*.bz2 \! -name \*.gz \! -name \*.sh \! -name bin -delete #find bin \! -name \*.pl \! -name bin -delete diff --git a/run.pl b/run.pl new file mode 100644 index 00000000..7ef75d45 --- /dev/null +++ b/run.pl @@ -0,0 +1,414 @@ +#!/usr/bin/perl + +use File::Basename; +use File::Copy; +use Data::Dumper; +use Time::localtime; +use Switch; + +## the defs + +chomp($CURRENT_DIR = `pwd`); +chomp($BIN_PATH_REL = $CURRENT_DIR."/".`dirname $0`); +chomp($BIN_PATH = `readlink -f $BIN_PATH_REL`); +chomp($OS = `uname -o`); +chomp($CORES = `ls -d /sys/devices/system/cpu/cpu[[:digit:]]* | wc -w`); + +require "$BIN_PATH/ccd_defs.pl"; + +$BIN_PATH = $BIN_PATH."/bin"; + +my %objectStats = { + count => 0, + good => 0, + bad => 0, + minWidth => 0, + minHeight => 0, + maxWidth => 0, + maxHeight => 0 +}; + +my %jobOptions = { + resizeTo => 0, + srcDir => $CURRENT_DIR +}; + +my %args = {}; + +my @resizeSizes = (orig, 2800, 2400, 2000, 1600, 1200, 1000, 800, 600); + +$jobOptions{srcDir} = "$CURRENT_DIR"; + + +sub parseArgs { + + ## defaults + $args{"--start-with"} = "resize"; + $args{"--end-with"} = "poission"; + + for($i = 0; $i < $#ARGV; $i++) { + if($ARGV[$i] =~ /^--[^a-z\-]*/){ + if($ARGV[$i+1] =~ /^--[^a-z\-]*/){ + $args{"$ARGV[$i]"} = true; + } else { + if(($ARGV[$i] eq "--resize-to") && ($ARGV[$i+1] eq "orig" || $ARGV[$i+1] =~ /^[0-9]*$/)){ + $args{"--resize-to"} = $ARGV[$i+1]; + } + + if(($ARGV[$i] eq "--start-with") && ($ARGV[$i+1] eq "resize" || $ARGV[$i+1] eq "getKeypoints" || $ARGV[$i+1] eq "match" || $ARGV[$i+1] eq "bundler" || $ARGV[$i+1] eq "cmvs" || $ARGV[$i+1] eq "pmvs" || $ARGV[$i+1] eq "poission")){ + $args{"--start-with"} = $ARGV[$i+1]; + } + + if(($ARGV[$i] eq "--end-with") && ($ARGV[$i+1] eq "resize" || $ARGV[$i+1] eq "getKeypoints" || $ARGV[$i+1] eq "match" || $ARGV[$i+1] eq "bundler" || $ARGV[$i+1] eq "cmvs" || $ARGV[$i+1] eq "pmvs" || $ARGV[$i+1] eq "poission")){ + $args{"--end-with"} = $ARGV[$i+1]; + } + + if(($ARGV[$i] eq "--run-only") && ($ARGV[$i+1] eq "resize" || $ARGV[$i+1] eq "getKeypoints" || $ARGV[$i+1] eq "match" || $ARGV[$i+1] eq "bundler" || $ARGV[$i+1] eq "cmvs" || $ARGV[$i+1] eq "pmvs" || $ARGV[$i+1] eq "poission")){ + $args{"--start-with"} = $ARGV[$i+1]; + $args{"--end-with"} = $ARGV[$i+1]; + } + } + } + } + + print Dumper(\%args); +} + +sub prepareObjects { + ## get the source list + @source_files = `ls -1 | egrep "\.[jJ]{1}[pP]{1}[eE]{0,1}[gG]{1}"`; + + foreach $file (@source_files) { + chomp($file); + + chomp($file_make = `jhead $file | grep "Camera make"`); + chomp($file_model = `jhead $file | grep "Camera model"`); + chomp($file_focal = `jhead $file | grep "Focal length"`); + chomp($file_ccd = `jhead $file | grep "CCD width"`); + chomp($file_resolution = `jhead $file | grep "Resolution"`); + + my %fileObject = {}; + + chomp(($fileObject{src}) = $file); + chomp(($fileObject{base}) = $file); + $fileObject{base} =~ s/\.[^\.]*$//; + + chomp(($fileObject{make}) = $file_make =~ /: ([^\n\r]*)/); + chomp(($fileObject{model}) = $file_model =~ /: ([^\n\r]*)/); + + $fileObject{id} = $fileObject{make}." ".$fileObject{model}; + + ($fileObject{width}, $fileObject{height}) = $file_resolution =~ /: ([0-9]*) x ([0-9]*)/; + + ($fileObject{focal}) = $file_focal =~ /:[\ ]*([0-9\.]*)mm/; + ($fileObject{ccd}) = $file_ccd =~ /:[\ ]*([0-9\.]*)mm/; + + if(!$fileObject{ccd}){ + $fileObject{ccd} = $ccdWidths{$fileObject{id}}; + } + + if($fileObject{ccd} && $fileObject{focal} && $fileObject{width} && $fileObject{height}){ + if($fileObject{width} > $fileObject{height}){ + $fileObject{focalpx} = $fileObject{width} * ($fileObject{focal} / $fileObject{ccd}); + } else { + $fileObject{focalpx} = $fileObject{height} * ($fileObject{focal} / $fileObject{ccd}); + } + + $fileObject{isOk} = true; + $objectStats{good}++; + } else { + $fileObject{isOk} = false; + $objectStats{bad}++; + + print " no CCD width or focal length found for $fileObject{src} - ($fileObject{id})\n"; + } + + $objectStats{count}++; + + if($objectStats{minWidth} == 0) { $objectStats{minWidth} = $fileObject{width}; } + if($objectStats{minHeight} == 0) { $objectStats{minHeight} = $fileObject{height}; } + + $objectStats{minWidth} = $objectStats{minWidth} < $fileObject{width} ? $objectStats{minWidth} : $fileObject{width}; + $objectStats{minHeight} = $objectStats{minHeight} < $fileObject{height} ? $objectStats{minHeight} : $fileObject{height}; + $objectStats{maxWidth} = $objectStats{maxWidth} > $fileObject{width} ? $objectStats{maxWidth} : $fileObject{width}; + $objectStats{maxHeight} = $objectStats{maxHeight} > $fileObject{height} ? $objectStats{maxHeight} : $fileObject{height}; + + push(@objects, \%fileObject); + } + + print "\n found $objectStats{good} usable images"; + + if(!$args{"--resize-to"}){ + print "\n> please choose a max resolution to shrink the files to"; + print "\n current images width ".($objectStats{minWidth} == $objectStats{maxWidth} ? "$objectStats{maxWidth}px" : " $objectStats{minWidth}px - $objectStats{maxWidth}px"); + print "\n current images height ".($objectStats{minHeight} == $objectStats{maxHeight} ? "$objectStats{maxHeight}px" : "$objectStats{minHeight}px - $objectStats{maxHeight}px"); + print "\n"; + print "\n"; + print "\n [0] original resolution << default"; + print "\n [1] $resizeSizes[1] x $resizeSizes[1]px"; + print "\n [2] $resizeSizes[2] x $resizeSizes[2]px"; + print "\n [3] $resizeSizes[3] x $resizeSizes[3]px"; + print "\n [4] $resizeSizes[4] x $resizeSizes[4]px"; + print "\n [5] $resizeSizes[5] x $resizeSizes[5]px"; + print "\n [6] $resizeSizes[6] x $resizeSizes[6]px"; + print "\n [7] $resizeSizes[7] x $resizeSizes[7]px"; + print "\n [8] $resizeSizes[8] x $resizeSizes[8]px"; + print "\n"; + print "\n [0-9] > "; + + chomp($resizeInput = <>); + + if($resizeInput >= 0 && $resizeInput < 10){ + $jobOptions{resizeTo} = $resizeSizes[$resizeInput]; + } else { + $jobOptions{resizeTo} = $resizeSizes[4]; + } + } else { + $jobOptions{resizeTo} = $args{"--resize-to"}; + } + + if($args{"--verbose"}){ + print "\n using max image size of $jobOptions{resizeTo} x $jobOptions{resizeTo}"; + } + + $jobOptions{jobDir} = "$jobOptions{srcDir}/reconstruction-with-image-size-$jobOptions{resizeTo}"; + + $jobOptions{step_1_convert} = "$jobOptions{jobDir}/_convert.templist.txt"; + $jobOptions{step_1_sift} = "$jobOptions{jobDir}/_sift.templist.txt"; + $jobOptions{step_1_gzip} = "$jobOptions{jobDir}/_gzip.templist.txt"; + + $jobOptions{step_2_filelist} = "$jobOptions{jobDir}/_filelist.templist.txt"; + $jobOptions{step_2_matches} = "$jobOptions{jobDir}/matches.init.txt"; + + $jobOptions{step_3_filelist} = "$jobOptions{jobDir}/list.txt"; + $jobOptions{step_3_bundlerOptions} = "$jobOptions{jobDir}/options.txt"; + + mkdir($jobOptions{jobDir}); + + foreach $fileObject (@objects) { + if($fileObject->{isOk}){ + $fileObject->{step_0_resizedImage} = "$jobOptions{jobDir}/$fileObject->{base}.jpg"; + + $fileObject->{step_1_pgmFile} = "$jobOptions{jobDir}/$fileObject->{base}.pgm"; + $fileObject->{step_1_keyFile} = "$jobOptions{jobDir}/$fileObject->{base}.key"; + $fileObject->{step_1_gzFile} = "$jobOptions{jobDir}/$fileObject->{base}.key.gz"; + } + } + +# exit +} + +sub resize { + print "\n"; + print "\n - preparing images - "; + print "\n"; + + chdir($jobOptions{jobDir}); + + foreach $fileObject (@objects) { + if($fileObject->{isOk}){ + if($jobOptions{resizeTo} != "orig" && ($fileObject->{widht} > $jobOptions{resizeTo} || $fileObject->{height} > $jobOptions{resizeTo})){ + if($args{"--verbose"}){ + print "\n resising $fileObject->{src} \tto $fileObject->{step_0_resizedImage}"; + } + + system("convert -resize $jobOptions{resizeTo}x$jobOptions{resizeTo} -quality 100 \"$jobOptions{srcDir}/$fileObject->{src}\" \"$fileObject->{step_0_resizedImage}\""); + } else { + if($args{"--verbose"}) { + print "\n copying $fileObject->{src} \tto $fileObject->{step_0_resizedImage}"; + } + + copy("$CURRENT_DIR/$fileObject->{src}", "$fileObject->{step_0_resizedImage}"); + } + } + } + + if($args{"--end-with"} ne "resize"){ + getKeypoints(); + } +} + +sub getKeypoints { + print "\n"; + print "\n - finding keypoints - "; + print "\n"; + + chdir($jobOptions{jobDir}); + + $pgmJobs = ""; + $siftJobs = ""; + $gzJobs = ""; + + foreach $fileObject (@objects) { + if($fileObject->{isOk}){ + $pgmJobs .= "convert -format pgm \"$fileObject->{step_0_resizedImage}\" \"$fileObject->{step_1_pgmFile}\"\n"; + $siftJobs .= "$BIN_PATH/sift < \"$fileObject->{step_1_pgmFile}\" > \"$fileObject->{step_1_keyFile}\"\n"; + $gzJobs .= "gzip -f \"$fileObject->{step_1_keyFile}\"\n"; + } + } + + system("echo \"$pgmJobs\" > $jobOptions{step_1_convert}"); + system("echo \"$siftJobs\" > $jobOptions{step_1_sift} "); + system("echo \"$gzJobs\" > $jobOptions{step_1_gzip} "); + + system("\"$BIN_PATH/parallel\" -j+0 < \"$jobOptions{step_1_convert}\" "); + system("\"$BIN_PATH/parallel\" -j+0 < \"$jobOptions{step_1_sift}\" "); + system("\"$BIN_PATH/parallel\" -j+0 < \"$jobOptions{step_1_gzip}\" "); + + system("rm -f \"$jobOptions{jobDir}/\"*.pgm"); + + if($args{"--end-with"} ne "getKeypoints"){ + match(); + } +} + +sub match { + print "\n"; + print "\n - matching keypoints - "; + print "\n"; + + chdir($jobOptions{jobDir}); + + $filesList = ""; + + foreach $fileObject (@objects) { + if($fileObject->{isOk}){ + if($fileObject->{isOk}){ + $filesList .= "\"$fileObject->{step_1_keyFile}\"\n"; + } + } + } + + system("echo \"$filesList\" > $jobOptions{step_2_filelist} "); + system("\"$BIN_PATH/KeyMatchFull\" \"$jobOptions{step_2_filelist}\" \"$jobOptions{step_2_matches}\" "); + + if($args{"--end-with"} ne "match"){ + bundler(); + } +} + +sub bundler { + print "\n"; + print "\n - running bundler - "; + print "\n"; + + chdir($jobOptions{jobDir}); + + mkdir($jobOptions{jobDir}."/bundle"); + mkdir($jobOptions{jobDir}."/pmvs"); + mkdir($jobOptions{jobDir}."/pmvs/txt"); + mkdir($jobOptions{jobDir}."/pmvs/visualize"); + mkdir($jobOptions{jobDir}."/pmvs/models"); + + $filesList = ""; + + foreach $fileObject (@objects) { + if($fileObject->{isOk}){ + if($fileObject->{isOk}){ + $filesList .= sprintf("\./%s.jpg 0 %0.5f\n", $fileObject->{base}, $fileObject->{focalpx}); + } + } + } + + chomp($filesList); + + $bundlerOptions = "--match_table matches.init.txt\n"; + $bundlerOptions .= "--output bundle.out\n"; + $bundlerOptions .= "--output_all bundle_\n"; + $bundlerOptions .= "--output_dir bundle\n"; + $bundlerOptions .= "--variable_focal_length\n"; + $bundlerOptions .= "--use_focal_estimate\n"; + $bundlerOptions .= "--constrain_focal\n"; + $bundlerOptions .= "--constrain_focal_weight 0.0001\n"; + $bundlerOptions .= "--estimate_distortion\n"; + $bundlerOptions .= "--run_bundle"; + + system("echo \"$bundlerOptions\" > \"$jobOptions{step_3_bundlerOptions}\""); + system("echo \"$filesList\" > \"$jobOptions{step_3_filelist}\""); + + system("\"$BIN_PATH/bundler\" \"$jobOptions{step_3_filelist}\" --options_file \"$jobOptions{step_3_bundlerOptions}\" > bundle/out"); + + system("\"$BIN_PATH/Bundle2PMVS\" \"$jobOptions{step_3_filelist}\" bundle/bundle.out"); + + system("\"$BIN_PATH/RadialUndistort\" \"$jobOptions{step_3_filelist}\" bundle/bundle.out pmvs"); + + $i = 0; + + foreach $fileObject (@objects) { + if($fileObject->{isOk}){ + if($fileObject->{isOk}){ + if (-e "pmvs/$fileObject->{base}.rd.jpg"){ + $nr = sprintf("%08d", $i++); + + system("mv pmvs/$fileObject->{base}.rd.jpg pmvs/visualize/$nr.jpg"); + system("mv pmvs/$nr.txt pmvs/txt/$nr.txt"); + } + } + } + } + + system("\"$BIN_PATH/Bundle2Vis\" pmvs/bundle.rd.out pmvs/vis.dat"); + + if($args{"--end-with"} ne "bundler"){ + cmvs(); + } +} + +sub cmvs { + print "\n"; + print "\n - running cmvs - "; + print "\n"; + + chdir($jobOptions{jobDir}); + + system("\"$BIN_PATH/cmvs\" pmvs/ 100 4"); + system("\"$BIN_PATH/genOption\" pmvs/ "); + + if($args{"--end-with"} ne "cmvs"){ + pmvs(); + } +} + +sub pmvs { + print "\n"; + print "\n - running pmvs - "; + print "\n"; + + chdir($jobOptions{jobDir}); + + system("\"$BIN_PATH/pmvs2\" pmvs/ option-0000"); + + if($args{"--end-with"} ne "pmvs"){ + poission(); + } +} + +sub poission { + print "\n"; + print "\n - running poission reconstruction - "; + print "\n"; + + foreach $fileObject (@objects) { + if($fileObject->{isOk}){ + + } + } +} + +parseArgs(); +prepareObjects(); + +chdir($jobOptions{jobDir}); + +switch ($args{"--start-with"}) { + case "resize" { resize(); } + case "getKeypoints" { getKeypoints(); } + case "match" { match(); } + case "bundler" { bundler(); } + case "cmvs" { cmvs(); } + case "pmvs" { pmvs(); } +} + +print "\n"; +print "\n - done - "; +print "\n";