

SIFT Feature Detection implementation

Copyright (C) 2004-2005, Sebastian Nowozin (nowozin@cs.tu-berlin.de)



Introduction
============

The SIFT feature detection algorithm has been invented and published by David
Lowe at the University of British Columbia. A detailed account of the complete
algorithm is available at http://www.cs.ubc.ca/~lowe/papers/ijcv03-abs.html

  The algorithm provides the capability to identify key feature points within
arbitrary images. It further extracts highly distinct information for each
such point and allows to characterize the point invariant to a number of
modifications to the image. It is invariant to contrast/brightness changes, to
rotation, scaling and partially invariant to other kinds of transformations.
The algorithm can be flexibly used to create input data for image matching,
object identification and other computer vision related algorithms.

  The use of the SIFT algorithm for automatic panorama creation has been
developed by Matthew Brown and David Lowe in their paper "Recognising
Panoramas" available at http://www.cs.ubc.ca/~mbrown/papers/iccv2003.pdf and
examples of this application are available at
http://www.cs.ubc.ca/~mbrown/panorama/panorama.html

  This package provides an implementation of the SIFT algorithm and a set of
utilities to utilize the algorithm to match two or more images. As output, a
number of control points are created, which specify one and the same image
location in two images. The output is created as project file for the hugin
panorama stitching software, which is available at http://hugin.sf.net/


License
=======

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


WARNING:

	"The University of British Columbia has applied for a patent on the SIFT
	 algorithm in the United States.  Applications of this software may
	 require a license from the University of British Columbia."


The detailed license for this package is available in the "LICENSE" file,
please read and acknowledge it before using the software.  The SIFT algorithm
is patented in the United States and as such restricted in use within the
United States.  I believe it is safe to use the software for any purpose
outside of the US, but I will not take any guarantee for doing so.  Inside the
US, please consult the licensing office of the University of British Columbia.


Installation
============

Unix/Linux
----------

You need a .NET Framework implementation, under Unix/Linux I use Mono.

    - Mono (http://www.go-mono.com/) 1.0 or later
    - GTK# (http://gtk-sharp.sf.net/) 1.0 or later.

    (if you want to build it yourself)
    - GNU make, GNU bash.


Sorry about introducing this dependancy-bloat, but I hope in the future every
GNU/Linux system will have a .NET Framework installed.  Gentoo, Ubuntu and
Debian/unstable have the packages already available. For Debian you need
(mono, mono-jit, libgtk-cil).

NOTE: You do not need to recompile binaries from the source code, as binaries
      are already included in this release tarball.


You can choose between two installation methods, where the first is
recommended:

 a) Installation from the binaries:

	Copy all the files in the bin/ directory to a favorite place, for example
	/usr/local/bin/, /opt/autopano-sift/ or any place you like. Either this
	directory has to be within the PATH variable, or you have to modify the
    autopano-complete.sh script's AUTOPANO_PATH variable.

 b) Installation from the sources:

	After ensuring you have all the dependencies, run "make clean all" in the
    src/ directory, then install it the same ways as the binaries.


Windows
-------

Both the command line utilities, a native Windows GUI and a simple VBS wrapper
script for drag-and-drop functionality are available.  The Gtk# GUI might also
be usable as the Gtk# Windows port improves.  Please use the supplied Windows
installer, which also includes a VBS script you can use with autopano-sift.

For build instructions, see the BUILD_WINDOWS.txt file.


Usage
=====

CLI
---

For using this program you should have some basic experience with the hugin
stitching program, available at http://hugin.sourceforge.net/.

The most basic use is:

    ./autopano-complete.sh -o /tmp/hugin.pto image1.jpg image2.jpg

Then load the hugin.pto file into hugin and adjust the field-of-view.
Afterwards proceed as normal (optimizing and panorama creation).


GUI
---

The GUI is not developed right now, so its a bit outdated. It does work
though.)

You can also use the GUI by invoking:

    ./autopanog.exe


Development
===========

Further improved and fixed versions of this package may be available at
http://cs.tu-berlin.de/~nowozin/autopano-sift/

Please send me patches, fixes and comments for this implementation, I would be
glad to hear them. See the TODO file for cues what needs to be improved.


Donations
=========

If you find this program useful and it saves you time, please consider
donating a small amount of money to support its further development :-)
There is a donation link at http://cs.tu-berlin.de/~nowozin/autopano-sift/


Contact
=======

I can be reached through this email: nowozin@cs.tu-berlin.de



