# Log of Changes

- Version 1.3.2 (28 March 2006)
  - Now multiplying by 2 in _compute2by1ErrorVector, to make the code consistent with the equations in the derivation.
    -- Thanks to Hiroshi Hattori (and someone else who also pointed this out a few years ago, whose name was lost)
  - Changed `\rm` to `rm` in the Makefile
    -- Thanks to Nicolas Saunier
  - Now initializing sum1_squared and sum2_squared in _computeIntensityDifferenceLightingInsensitive and _computeGradientSumLightingInsensitive
- Version 1.3.1 (21 November 2005)
  - fixed memory leak in the affine consistency check (one line in _am_trackFeatureAffine and several in KLTTrackFeatures)
    -- Thanks to Miguel Arredondo
  - added optional normalization for gain and bias of image intensities in the window, making the tracker lighting insensitive
    -- Thanks to Zhichao Chen
- Version 1.3 (17 August 2005)
  - combined code for Unix/Linux, Visual C++ 6.0, and Visual Studio.Net 2003. This involved a lot of floating point conversions and replacing expf with exp, fsqrt with sqrt, etc.
  - fixed memory leak in KLTFreeFeatureTable (line 493 of klt.c)
    -- Thanks to Stefan Wachter
  - fixed initialization of affine parameters in KLTFreeFeatureTable (line 177 of klt.c)
    -- Thanks to Sinisa Segvic
- Version 1.2.1 -- Visual Studio 2003 port (5 August 2005)
  - ported to Visual Studio 2003
    -- Thanks to Jérôme Martin
- Version 1.2.1 (30 June 2005)
  - Big fixed in affine code, by Kevin Koeser (University of Kiel), via Thorsten Thormaehlen
- Version 1.2 (16 June 2004)
  - Affine warping code implemented
    -- Thanks to Thorsten Thormaehlen
- Version 1.1.5 -- Visual C++ port (2 Mar 2004)
  - ported to Visual C++ 6.0
- Version 1.1.5 (7 Oct 1998)
  - In trackFeatures.c, renamed _sumFloatWindow to _sumAbsFloatWindow (I thought this had been done before in version 1.1.1). Two bugs in the function were fixed:
    1. Now, the absolute value is taken of the individual pixels before summing them.
    2. The 'for' loop over 'width' now works correctly.
    Note: As a result of this bug fix, the default value of tc->max_residue was changed to 10.
    -- Thanks to Pedro Felzenszwalb
- Version 1.1.4 (18 Sep 1998)
  - To make code work for Win32 systems, forced fopen() to use binary rather than text file. (In Unix, default is to open as binary, whereas in Win32, default is to open as text).
    -- Thanks to Johan, Fredje Helderweirt, and LiYunhao
  - In convolve.c: Simplified formula for maximum of Gaussian and Gaussian derivative.
  - In selectFeatures.c, changed the errors to warnings, when checking window size.
  - Changed indentation for improved readability.
  - Minor changes to eliminate compiler warnings:
    - In selectGoodFeatures.c: Changed _quicksort to return void, and wrapped _comparePoints() with #ifdef KLT_USE_QSORT.
    - In trackFeatures.c: Changed _computeIntensityDifference and _computeGradientSum to return void; removed search_range_max, nlevels, and ixx, which were not being used.
    - In pnmio.c: Type conversion made explicit in malloc().
    - In selectFeatures.c: moved _quicksort() to top of file to obviate need for prototype.
    - In writeFeatures.c: _readHeader() now returns a structureType, instead of an int (A structureType is an int, but some compilers are really picky).
- Version 1.1.3 (3 Mar 1998)
  - Fixed bug in `KLTTrackFeatures()`. In the conditional just after the call to `_trackFeature()`, `KLT_OOB` is now properly handled.
  - Slightly improved bounds-checking by introducing an epsilon, and by giving back an extra pixel along the border that had been taken away unnecessarily.
  - If `tc->window_[width,height]` is unacceptable, a warning is now generated and the value is corrected. Previously an error was generated.
  - In Example 5, changed search range from 20 to 15. As a result, if the window size is changed to 5 the number of pyramid levels remains 2, which prevents the border from increasing dramatically.
  - In Makefile, change example dependencies from lib to libklt.a. Unfortunately, changing the library source code (such as `trackFeatures.c`) and then calling `make example1` does not work properly, but at least changing `example1.c` and then calling `make example1` does work. The latter case is probably more important, so we will have to live with the current tradeoff.
- Version 1.1.2 (24 Feb 1998)
  - Fixed major bug: Added an explicit check to ensure that feature does not drift out of bounds during tracking. This removes the problem of occasional crashes.
    -- Thanks to Rainer Stiefelhagen
  - Speeded up sorting by replacing qsort() with Manolis Lourakis' _quicksort() function.
    -- Thanks to Manolis Lourakis, Luis Rivera
  - Added KLTSetVerbosity() to klt.c (It should have already been there)
  - Changed ppmWriteFile() to ppmWriteFileRGB()
  - Fixed minor bug: assert() statement in line 314 of convolve.c
    -- Thanks to Rainer Stiefelhagen
  - In Makefile, change example dependencies from libklt.a to lib
- Version 1.1.1 (18 Dec 1997)
  - Fixed minor syntax bug: Changed 'if feof(fp)' to 'if (feof(fp))' in writeFeatures.c
    -- Thanks to Matt Last
  - Fixed major bug: When tracking features, 'max_residue' was not being computed correctly. Therefore, feature windows that changed a lot in intensity were not being detected. Specifically, in trackFeatures.c, I changed _sumFloatWindow to _sumAbsFloatWindow.
- Version 1.1
  - (16 Oct 1997)
    - Fixed bug in pgmReadFile(). It was not skipping over the last return character.
    - Example 1 was updated to include binary files.
    - Changed KLTWriteFeature...() and KLTReadFeature...() to allow binary files, as well as text files.
  - (15 Oct 1997)
    - Posted
    - Fixed obscure bug in KLTChangeTCPyramid() and improved readability of that function
    - Fixed incorrect assert() statement in _interpolate() function
- Version 1.1 (beta)
  - (21 Feb 1997)
    - Renamed as Version 1.1 (beta)
  - (15 Feb 1997)
    - Posted as Version 1.2
      (This was a mistake; it should have been named Version 1.1 (beta).)
    - Fixed obscure bug that sometimes caused infinite loop
      (bug was in _enforceMinimumDistance() function of selectGoodFeatures.c)
    - Amended KLTPrintTrackingContext() to print all the new fields that were added in Version 1.1
- Version 1.1 (alpha)
  - (21 Feb 1997)
    Renamed as Version 1.1 (alpha)
  - (10 Feb 1997)
    - Posted as Version 1.1
      (This was a mistake; it should have been named Version 1.1 (alpha).)
    - Features are lost when residue exceeded
    - KLTSelectGoodFeatures() only accepts features whose minimum eigenvalue is at least `tc->min_eigenvalue`
    - User allowed to output internal images
    - comments allowed in data files
    - Default for `tc->smooth_sigma_fact` changed from 0.5 to 0.1
    - Simplified _minEigenvalue() routine in selectGoodFeatures.c
- Version 1.0 (beta)
  - (10 Feb 1997)
    - Posted
    - Print statements are prefaced by "(KLT) "
- Version 1.0 (alpha)
  - (28 Jan 1997)
    - Removed '#include "pyramid.h"' from "klt.h"
    - Changed '_KLT_Pyramid' in "klt.h" to 'void *'
    - Forced coercion of 'void *' to '_KLT_Pyramid' in other files
  - (27 Jan 1997)
    Removed 'makedepend' from Makefile, along with dependencies below '# DO NOT DELETE'
  - (24 Jan 1997)
    Posted