0.7.1

o	Fix --visp segfault when not using last: filters.

o	Add help mode --hA to display all help pages.

o	Add circular point-spread function option "circle=<diameter>".

o	Add support for the ov7620 sensor (raw, linear modes only).  (Updated
	from 0.7.0-patch1 to specify a linear PSF.)

o	Add global search option --gs to fix an alignment problem reported by
	Bert Douglas.  (Also included in 0.7.0-patch1.)

o	Change transformation::eu_{get,set,modify}() so that externally
	visible values are interpreted in the context of transformations
	between scaled images, while internal values represent transformations
	between unscaled images.  (Bugfix for 0.7.0.  Also included in
	0.7.0-patch1.)

o	d2/tfile.h: Ensure that eu[] parameters are properly scaled when read
	and written.  (Bugfix for 0.7.0. Also included in 0.7.0-patch1.)

o	Fix order-of-operations bug in d2::image::scale_by_half().  (Bugfix
	for 0.7.0 and earlier versions.  Also included in 0.7.0-patch1.)

o	Scale alignment weights for reduced level-of-detail in d2::align().
	(Also included in 0.7.0-patch1.)

o	For reduced level-of-detail alignment reference images, filter
	using alignment weights.  (Also included in 0.7.0-patch1.)

o	Add speed optimizations for filtering in the Euclidean case, but
	leave these disabled, since they are not safe.  (Also included
	in 0.7.0-patch1.)

0.7.0

o	Add support for algorithmic alignment weights.  This requires 
	POSIX fork() and execlp(), so add a Makefile variable for POSIX.

o	Add support for frequency-based alignment weights.  Angelo Pesce
	had initially suggested the related (or more general) idea of
	edge-based alignment.  Frequencies were chosen because of their
	conceptual simplicity.  This option requires that FFTW be linked.

o	Add support for specifying per-pixel and per-channel alignment weights
	by providing an additional weight-map image, as suggested by Bert
	Douglas.

o	Remove support for USM.

o	Add multiple default settings: q0, q1, q2, qn, qr.

o	Partition help into sections, and add a section for transformation
	data file help.

o	Add a device type for the XVP610 camera in 640x480 mode.

o	Modify the divisor in d2/render/ipc.h to ensure convergence when
	using multiple varieties.

o	Add experimental handling for Bayer patterns.

o	Add experimental video stabilization options.

o	Add options to control output range.  By default, use the range of the
	original frame.

o	For incremental rendering, add general filtering options.  Drizzling
	options are no longer supported as such, but the help output offers
	examples of how to emulate old drizzling/merging techniques (roughly).

o	Add options --fail-default and --fail-optimal to select the desired
	failure mode.  --fail-default uses the default alignment in the case
	of failure.
	
o	Add option --ex, to support exclusion volumes.  Region exclusion was
	first suggested to the author by Dewayne VanHoozer as a means of
	solving the 'closed eye problem' in group photography.

o	Add a barrel distortion adjustment multiplier and rate options.

o	In d2/transformation.h, add parameters for barrel distortion correction.
	In d2/tfile.h, add new barrel distortion command 'B'.  The approach
	taken is based on that of Helmut Dersch's PanoTools.  (i.e., a
	polynomial in radial distance is used.)

o	Increment the latest supported transformation file syntax to version
	3.  This version supports transformation of the original frame, as
	well as other new features described above.

o	Move d2/gpt.h to d2/transformation.h.

o	In d2::align, add support for original frame transformations.

o	In d2::align::diff() and d2::align::set_exposure_ratio(), treat cases
	with and without extension identically.

o	Report unrecognized transformation file commands as errors instead of
	warnings.

o	In the transformation data file handler, report incompatible
	transformation types as an error instead of as a warning.

0.6.0

o	Add a generalized, but rudimentary, implementation of Steve Mann's
	notion of 'certainty'.  For more details, see
	http://wearcam.org/comparametrics.pdf

o	Make stdin filter height and width independent of each other.

o	In the Irani-Peleg renderer, skip frames that fail to reach the match
	threshold.

o	Convert some operations on pixels and points into vector syntax 
	through C++ operator overloading.

o	Add command-line options to select plain or raw PNM/PPM formats.  Remove
	makefile variable PLAIN.

o	Add command-line options to select 8/16 bits per channel.  Remove
	makefile variable BITS.

o	Revise the device configuration xvp610_320x240 to use a new
	filter, reflecting driver updates (see the relevant web page
	http://auricle.dyndns.org/xvp610/ ) and support for non-linear
	colorspace point-spread functions.

o	In the Irani-Peleg renderer, use a discrete Fourier transform to
	ensure that each (point-spread function, backprojection kernel) pair
	satisfies condition (9) from theorem 4.1 in the source paper.

o	Add a point-spread function rasterizer.  

o	Extend the --replace option to support drizzling.

o	Add support for exposure registration (i.e., matching of exposure
	between different frames).

o	Change -Os to -O2 in the Makefile, since -Os no longer achieves speedup
	in the most critical codepaths.

o	Add command-line support for summation of point-spread functions.

o	Add a polymorphic point-spread function type psf and convert all
	external interfaces of ipc.h and usm.h (formerly hf-enhance.h) to use
	this type.  

o	Fix memory leak in d2/render/combine.h:get_image().  (This fix is also
	included in a patch for 0.5.1.)

o	Modify the USM renderer to write output when incremental output is
	enabled.

o	In the USM renderer, now only defined pixel values contribute to the
	mask.  Also, undefined values are no longer masked.

o	Update e-mail address information.

o	Modify the Irani-Peleg calibration script into a general point-spread
	function calibration script, using a new built-in point-spread function
	evaluation module to rate candidates.

o	Irani-Peleg and USM (High-frequency enhancement) renderers now
	use the same point-spread function configurations.  New options --ips,
	--usm, --lpsf, --nlpsf, and --device subsume and extend the
	functionality provided by options --ip, --ipc, and --hf-enhance.

o	Add support for convolutions in non-linear colorspace.  This feature
	is enabled and configured by the command-line option --nlpsf.  (See
	also the item above.)

o	Linearize channel values within internal data structures so that most 
	ALE operations are performed on linear data.  Steve Mann discusses the
	use of linear representations in image processing, e.g. in his paper
	http://wearcam.org/comparametrics.pdf .  We assume a simple power-law
	response by default.

o	Modify the image class to use a floating-point data type for 
	storing pixels.

o	Modify the README to remove information covered in the User Manual.

o	Revise identifiers and comments in d2/render/ipc.h to better reflect
	the terminology used in the source paper by Irani and Peleg.

o	Consoldiate code for computing the position and dimensions of a pixel in a
	new coordinate system, and use this new abstraction to reduce the code
	size of d2/render/ipc.h and d2/render/drizzle.h (Irani-Peleg and
	drizzling code, respectively).

o	Change several instances of 'double', 'float', and 'my_real' to
	specialized floating-point types 'ale_real', 'ale_pos', 'ale_sreal',
	and 'ale_accum'.

o	Fix offset calculation in d2/render/ipc.h.  This is necessary for
	Irani-Peleg rendering of image mosaics extending upwards or to the
	left of the original frame.  (This fix is also included in a patch for
	0.5.1.)

o	Move classes treating snapshots as two-dimensional data to directory
	'd2' and create an associated C++ namespace.  We can't use '2d' to
	label the namespace, because the C++ grammar won't allow it.

0.5.1

o	Several of the changes below are based on a suggestion by Bert
	Douglas regarding support for 16-bit-per-channel color.  See the README
	for more information about relevant compilation options.

o	Add information to the README regarding new compilation options.

o	Modify the makefile to accept a variable BITS, and differentiate between
	values BITS=8 and BITS=16.  The latter option causes the macro BITS_16
	to be defined during compilation.
	
o	Modify image_rw.h to handle 16-bit data when BITS_16 is defined.  Also,
	differentiate between 8-bit and 16-bit ImageMagick builds by checking
	MaxRGB.

o	In ppm.h, add carriage returns to the set of recognized whitespace
	characters.

o	Modify ppm.h to read 16-bit binary PPM files (added to the PPM format
	spec in April 2000).  

o	Modify ppm.h to read plain (ASCII) as well as raw (binary) PPM files.  

o	Add a Makefile option for writing plain (ASCII) PPM files instead of
	raw (binary).  This option causes the macro PPM_PLAIN to be defined
	during compilation.
	
o	Modify ppm.h to write plain (ASCII) PPM files when PPM_PLAIN is defined.

o	Modify ppm.h to output 16-bit PPM files when BITS_16 is defined.

o	Modify ppm.h to scale input intensity values based on the internal
	representation depth (8 or 16 bits per channel).

o	Add a file 'channel.h' to describe the color channel data type and
	valid range, both being dependent on whether BITS_16 is defined.  Use
	these generic values, where appropriate, throughout the ALE codebase.

0.5.0

o	Remove certain cloning operations from align.h, but since cursory tests
	indicate that scaling with --scale is much more expensive than cloning,
	allow cloning to occur when scaling occurs.

o	Add more comment documentation to header files.

o	Emit a more informative error message when the PPM file handler
	encounters a file that is not a well-formed PPM binary file.

o	Move rendering implementations to subdirectory 'render/'.

o	Modify semantics of alignment following by applying to file-loaded
	initial transformations a delta transformation D = AB^-1, where B is
	the previous frame's (unmodified) initial transformation, A is the
	previous frame's final transformation, and ^-1 is the inverse operator.
	Using --follow with --trans-load can now improve alignment success when
	working with panoramic image mosaics.

o	We're not using simulated annealing, so remove comments that claim
	otherwise.

o	Remove certain unsafe assumptions from ipc/* (now render/ipc/*); this
	change includes a modification to ipc.h (now render/ipc.h).  Limits of
	the rectangle used as an argument to the <type>::response() function
	are now explicitly given rather than implied.

o	Change documentation for --replace.

0.4.8

o	Modify Irani-Peleg renderer to produce incremental output.

o	Modify Monte Carlo alignment so that the same set of accumulated image
	pixels is examined when comparing two transformations.

o	Add an option for additional upper-bound constraint of rotational
	perturbation.  Jeff Epler had noted that the
	perturb-upper/perturb-lower options alone may not be suited to working
	with sets of higher-resolution images.  

o	Resolve a bug introduced in version 0.1.1 which had limited rotational
	perturbation to 2 degrees.

o	Add an option to adjust the maximum level of detail used.  The default
	maximum is 2/perturb, which matches the default for previous versions
	of ALE.

o	Modify names of temporary files used in the calibration script.

0.4.7

o	Add a replacement option suggested by Jeff Treece.  This option can
	be used to facilitate video stabilization.

o	Irani-Peleg: add support for configurable modules, including 
	a module that reads its configuration data from standard input
	and a module calibrated for an IBM (Xirlink) XVP610 in 320x240
	mode.  A rudimentary script for calibrating devices with unknown
	projection functions has been included as ipc/ale-calibrate.

o	Irani-Peleg: don't truncate correction values in backprojection.

o	Irani-Peleg: don't multiply the weight function by a scale correction
	factor in backprojection.

o	Rename render::operator()() to render::sync().  Update subclasses
	accordingly.

0.4.6

o	Allow --ip and --hf-enhance to be used together.  [Modify
	ip::operator() and hf_filter::operator() so that multiple
	post-processing filters can be used.]

o	Initialize the drizzled image to be uniformly black.  This fixes
	a bug introduced in 0.4.2.

o	Allocate the correct size image for drizzling.  This fixes a bug
	introduced in 0.4.5.

0.4.5

o	Ensure correct transformation scaling and difference calculation after
	alignment is complete, even if alignment terminates with a reduced
	level of detail (i.e. perturb-lower > 2).

o	Separate the scale() function into two cases: scale() is reserved for
	scale factors greater than or equal to one, as in user-specified
	scaling; and scale_by_half() is used for the scale factor 0.5, needed
	to provide multiple levels of detail in alignment.  Modify the
	scale_by_half() case to reflect source pixel values more fairly.  (This
	change affects alignment behavior at reduced levels of detail.)

o	Reduce whitespace in usage() message.

o	Modify align::diff() to use correctly scaled image offset values.
	(Bugfix for alignment with --extend.)

o	Modify align.h so that the image definition array is correctly scaled
	for all levels of detail.  (Bugfix for alignment with --extend.)

o	Modify image.h to correctly handle image offset values.  (Bugfix
	for --extend operation.)

o	Remove call to stat() in image_rw.h.  This improves OS independence,
	and apparently also allows URL-specification of images when compiled
	with ImageMagick support.

o	Modify image file handler interface so that input files are not scaled.
	Perform scaling, when necessary, outside of the file handler.  Since
	unscaled data is needed by the drizzling and Irani-Peleg code, this
	fixes bugs in those modules.  

0.4.4

o	Modify the Monte Carlo pixel selection algorithm so that the expected
	number of sampled pixels more closely matches the specified number in
	typical cases.

o	Specify the binary mode flag to fopen() calls in the PPM file handler.
	This change resolves a bug discovered by Benjamin Hill.

0.4.3

o	Add support for Monte Carlo alignment of images, in which only a
	random subset of pixels is sampled.

o	Add an option to disable incremental image output.

0.4.2

o	Implement an image reconstruction option based on the work of Irani and
	Peleg.

o	Clean up source; move rendering and alignment functions into separate
	files.

o	Change valid drizzling diameter interval to (0,1].

o	Modify PPM file reader to correctly handle comments in PPM files; this
	resolves a bug pointed out by Benjamin Hill.

o	Add missing typecast to resolve compile warning under GCC 3.2.

o	Make changes to gpt.h that may reduce the Euclidean alignment time.

o	Move ale.c to ale.cc to follow one of the many C++ naming conventions.

0.4.1

o	Change language to C++.

o	Code cleanup in ale.c, image.h, and gpt.h.

o	Separate into a number of subsections the option descriptions in the
	README 

o	Add URL information to README

o	Add an experimental drizzling implementation.  Research on drizzling
	by Richard Hook and Andrew Fruchter was brought to the attention of 
	the author by Dan Kaminsky.

o	Add an option to use the previous frame's final transformation as the
	default alignment.

o	Change pixel weight data type so that more than 255 images can
	be merged.

o	Add support for increased spatial extents.  Research on increased
	spatial extents by Steve Mann was brought to the attention of the
	author by Dan Egnor.

o	Modify the transformation algorithm to use transformations from the
	domain of the input image to the range of the target image.  This
	change is reflected in transformation files.  Maintain support for
	old transformation file versions, however.

o	Add version information to transformation files and update the version
	from 0 to 2.

0.4.0p1

o	Merge a bugfix from Debian ALE package version 0.4.0-1.  Without this
	fix, an assertion failure can occur when ImageMagick support is
	enabled.  Original fix implemented by Nick Rusnov.  

0.4.0

o	Add support for general scaling parameters (i.e. all scale 
	factors >= 1.0).  --scale2, --scale4, and --scale8 are now deprecated, 
	and replaced with a more general --scale=x argument.

o	Support enhancement of high frequencies even when the scale factor is 
	1.0.

o	Modify the high-frequency filter algorithm to support filtering near
	the border of an image.

o	Modify the high-frequency filter function so that the response is now
	(4/n)^2 times what it used to be, where n is the scale factor.  

0.3.2

o	Don't filter high frequencies if we're not enhancing them.  This 
	improves efficiency, but should not affect output.

0.3.1

o	Output average match statistic.

o	Update informational output to transformation files to include original 
	frame.

o	Add support for post-enhancement of high-frequency details.

0.3.0

o	Add support for loading and saving transformation data.

o	Add an option to set the upper bound on correction steps.

o	Modify Makefile to compile with size optimization, since this 
	appears to improve speed characteristics in some cases.

o	Move transformation data structure and related functions to 
	a separate header file.

0.2.0

o	Add support for general projective transformations, and change/add
	options as follows:

		'--translation'	used to be	'--no-rotate'
		'--euclidean'	used to be 	'--rotate'
		'--projective'	is a new option

0.1.2

o	Add optional support for .jpg, .png, .tiff, and other file formats
	through ImageMagick.  Inspired by a translation script idea suggested
	by Nick Rusnov.

o	Don't segfault if a file can't be opened.

0.1.1

o	Use reduced levels of detail in coarser alignment steps to increase
	speed.

o	Change perturbation step lower-bound check from less-than ('<') to 
	less-than-or-equal-to ('<=').  Change default lower bound
	to .125 from .1 (the behavior is the same, but the value
	makes more sense).

o	Change perturbation initial value to 32 pixels from
	16 pixels, since coarse alignment is now less expensive.

o	Modify scale function so that the borders aren't 
	corrupted (too badly).

0.1.0

o	Add support for correction of rotation about the lens axis.

o	Add an optional match criterion for merging.

o	Add an option to adjust minimum step-size.

o	Add flags to specify which channels to use for alignment.  Use
	a summation of all channels by default.

o	Add an option to modify the error metric exponent, and change
	the default value from 1 to 2. 

o	Display information about how well a new image matches
	the accumulated image.

o	Add a rule for ale.exe to the Makefile.  

0.0.0
	Initial release.
