There are a few open-source implementations of the SIFT algorithm, and one is part of the VLFeat toolkit. Unfortunately, VLFeat's SIFT tool generates differently formatted output from the Lowe version, even though it's the same sort of information. I spent far too long hunting for a conversion script, and found no standalone (or even Bundler-ready) one, so I did it with awk.
If you are using Bundler, you can just update the ToSift.sh script, replacing the line:
echo "mogrify -format pgm $IMAGE_DIR/$d; $SIFT < $pgm_file > $key_file; rm $pgm_file; gzip -f $key_file"
with
echo "wc -l $key_file.vlfeat | awk '{ print \$1 \" 128\" }' > $key_file"
echo "awk 'BEGIN { split(\"4 24 44 64 84 104 124 132\", offsets); } { i1 = 0; tmp = \$1; \$1 = \$2; \$2 = tmp; for (i=1; i<9; i++) { i2 = offsets[i]; out = \"\"; for (j=i1+1; j<=i2; j++) { if (j != i1+1) { out = out \" \" echo "rm $key_file.vlfeat"
Once that's done, the RunBundler.sh script can be run as usual.
If you'd rather just convert existing VLFeat-generated key files, you can use:
zcat vlfeat.key.gz | wc -l | awk '{ print $1 " 128" }' > lowe.key
zcat vlfeat.key.gz | awk 'BEGIN { split("4 24 44 64 84 104 124 132", offsets); } { i1 = 0; tmp = $1; $1 = $2; $2 = tmp; for (i=1; i<9; i++) { i2 = offsets[i]; out = ""; for (j=i1+1; j<=i2; j++) { if (j != i1+1) { out = out " " }; out = out $j }; i1 = i2; print out } }' >> lowe.key
gzip lowe.key
Hope this helps someone avoid the effort!
2 comments:
You should come visit Ólafur Haraldsson's Photogrammetry Forum and keep us informed of your progress getting these tools running on OSX. I know you'd find an interested audience and possibly some collaborators, if you'd like them.
http://pgrammetry.com/forum
Thanks for the post regarding this. However, the current version of bundler does not seem to use 'ToSift.sh', but uses another script file 'ToSiftList.sh'. I have tried the changes suggested by you in both files in various combinations, but in vain. Please can you suggest if I might be missing out something.
Thanks!
Post a Comment