Implement focus statistic in d3::scene::view_filter_focus().
[Ale.git] / Changelog
blobca659e86ffab4013f4bb79919fd67211018f06ff
1 0.8.3
3 o       Add option --3dpx to specify 3D regions to exclude during final
4         rendering, using a single depth for each pixel in each frame of
5         rendered output.  (Evaluates at the depth used in depth-rendering.)
7 o       Add option --pc to specify which pairwise comparisons should be
8         performed.
10 o       Add --et option to specify encounter thresholds.
12 o       Clean up d3::scene to remove triangle-mesh code.
14 o       Add an option --def-nn to allow definition of pixels in output images
15         to take values from neighboring pixels within a certain radius, in
16         cases where they would not otherwise be defined.
18 o       Modify representation of 3D subspaces so that refined subspaces
19         are roughly cubical, and to allow refinements at multiple
20         resolutions.
22 o       Fix bugs in 3D color and occupancy updating caused by bounding
23         box miscalculation.
25 o       Add option --pa to set the number of point candidates accepted
26         for each pair of cameras (pairwise ambiguity).  The default
27         of 3 preserves existing default behavior.
29 o       Add option --oui for determining occupancy update iterations.
30         The new default is 10, halving the previous default of 20.
32 o       Add option --tcem for scoring point candidates by third-camera
33         views.  The default of 0 preserves existing default behavior.
35 0.8.2
37 o       Add magical file 'dump:' for listing color values numerically
38         to stderr.
40 o       Transition from a subdivisible triangle model to a subdivisible 
41         space model, using a rudimentary implementation of Hans Moravec's 
42         notion of occupancy.
44 o       Add support for view and depth output from arbitrary cameras.
46 o       Add clipping plane options for 3D modeling.
48 o       Fix various bugs in control-point alignment reported by Gregory
49         Maxwell.
51 0.8.1
53 o       Modify --q1 to use median-value incremental rendering.
55 o       Add support for median-value incremental and Irani-Peleg rendering.
56         Using a statistic other than the mean was suggested by Scott Scriven
57         as a means of eliminating non-uniform artifacts.  Using the median
58         seems to improve performance on Scott Scriven's example sequences, as
59         well as on the scaled output of fine:sinc*lanc for sparse inputs.
61 o       Move ale-psf-calibrate to a new scripts directory.
63 o       Add support for using control points in 2D and 3D alignment, as well
64         as in 3D model construction.  New options include '--gs points',
65         '--cpf-load=', '--cpp-upper=', '--cpp-lower=', '--va-upper=', and
66         '--st'.
68 o       Fix enumerator compile bugs noted by Gregory Maxwell to cause 
69         compilation failure under GCC 3.4.
71 o       Add average magnitude comments to transformation data file output.
73 o       Add a color adjustment option --exp-mult=.
75 o       For 3D scene reconstruction, use a new unified surface model in place
76         of the depth-based multi-model approach used in 0.8.0.  The new model
77         is adjusted on the basis of edge, angle, and color measures.
79 0.8.0
81 o       Add a flag --exp-meta-only which causes tonal registration to be
82         performed only on the basis of exposure metadata (e.g., data encoded
83         as EPPM extended attributes).  This approach was suggested by Gregory
84         Maxwell.
86 o       Set image offsets in d2/render/combine.h.  This allows Irani-Peleg
87         rendering to work with --crop when the default rendering chain
88         includes more than one rendering invariant.
90 o       Perform Irani-Peleg updating separately by channel instead of
91         using vector operations.  This allows divide-by-zero and other
92         conditions to be localized to particular channels.
94 o       Modify the Irani-Peleg renderer to use estimate-based certainty.  This
95         seems to improve noise characteristics significantly.
97 o       Write the results of tonal registration as a comment in the 
98         transformation data file.
100 o       Add support for PPM with extended attributes (EPPM).  Attributes
101         handled specially include black level, shutter speed, aperture, and
102         ISO (or gain).
104 o       Add experimental cost calculation routines to d3/scene.h.
106 o       Modify euclidean alignment so that perturb-upper and perturb-lower
107         apply to rotational arclength.
109 o       Fix an index variable bug in d2::image_bayer_ale_real::trigger().
111 o       Modify d2::exposure one-sided certainty so that the 'one-sided'
112         condition only applies to bright (>50%) areas.  Applying it to dark
113         areas has no clear benefit, and an experiment by Gregory Maxwell
114         demonstrates that doing so can exacerbate noise.
116 o       Modify d2::align to use unscaled input images when the scale factor
117         is larger than 1.0, or when a scaled_filter interpolant is being used.
119 o       Modify d2::image::scale() to allow scale factors in the interval 
120         (0, 1), and modify the command-line interface and help text to reflect
121         this change.  --scale= now accepts all finite positive values.
123 o       Add user interface options --ui=stream and --ui=tty.  The latter
124         includes more detailed status output when terminal width information
125         can be obtained (esp. when IOCTL=1 is set at compile time), and is the
126         new default.
128 o       Move certain user interface elements to the source subdirectory ui/.
130 o       Modify d2::render::ipc::_ip_frame_correct() so that exposure
131         re-estimation uses a ratio of weighted sums instead of a weighted
132         average of ratios.
134 o       Modify d2::align::set_exposure_ratio() so that alignment 
135         weights and certainty values are taken into consideration.  
137 o       Add a --cw option to weight alignment error by certainty values,
138         as suggested by Gregory Maxwell.  This allows the contributions of
139         pixels at maxval to be diminished, which can increase alignment
140         success in certain cases.
142 o       Replace functions d2::incremental::{increase,decrease}_extents()
143         with new functions that take exclusion regions into account.  The new
144         functions should also fix a boundary-calculation bug reported by
145         Gregory Maxwell.
147 o       Modify d2/render/ipc.h to handle exclusion regions more effectively.
149 o       Add --crop argument, which excludes the spatial complement of a
150         specified area over a specified set of frames.  Gregory Maxwell notes
151         several advantages of internal over external crops, including
152         preserving knowledge of position in the uncropped frame, which among
153         other benefits allows natural handling of Bayer patterns.
155 o       Modify rx_parameters in d2/render.h to use the ale_pos data type
156         instead of int.  This should allow exclusion regions to be calculated
157         more accurately.
159 0.7.3
161 o       Add incremental 3D reconstruction output.
163 o       Remove the reference to a non-existent web page in
164         unsupported::fornow().
166 o       Allow device-specific bayer patterns to be overridden by the --bayer
167         option.
169 o       Add an option for explicitly setting the camera view angle.  Make the 
170         default view angle 43.7 degrees.
172 o       Implement optimizations that reduce the memory footprint when 3D
173         options are used.
175 o       Modify the 3D cost reduction algorithm.  The new algorithm seems to
176         offer better results than the old in cases tested thus far, and does
177         not require that spatial extension be enabled.
179 o       Add support for the Canon 300D with a 50mm f/1.4 lens (specifying view
180         angle), as well as experimental support for the 50mm f/1.4 lens at 1.4
181         (specifying a linear PSF).  Also add support for 50mm f/1.8 and 85mm
182         f/1.8 lenses, specifying view angles as specified in the chart at
183         http://www.acapixus.dk/photography/angle_of_view.htm
185 o       Don't output final data when --psf-match is specified.  Doing so
186         would be useless anyway, and apparently causes a segfault.
188 o       For cases where --psf-match is specified, modify the exposure settings
189         for the final input image (i.e., reference image) so that default
190         exposure is used, and modify the bayer pattern settings so that no
191         bayer pattern is used.  (The first of these modifications requires
192         changes in the way that the array of input exposures is stored.)
194 o       Optionally (when OPTIMIZATIONS == 1) use the output of the default
195         rendering chain directly as the Irani-Peleg initial approximation,
196         instead of copying it.
198 o       Add support for PSF convolution and scalar multiplication.
200 o       Move all PSF parsing logic to a new file: d2/render/psf/psf_parse.h
202 o       Modify help argument processing so that several help arguments can be
203         specified at a time.  Change the usage text to reflect this.
205 o       Fix concatenated help output; outputs from all help options are now
206         represented.  (3D help had been omitted in 0.7.2.)
208 o       Add a check to ensure that at most one --q* option is specified.
209         The issue of multiple --q* options being specified was raised on the
210         ALE mailing list by Viktors Rotanovs.  As there is currently no
211         support for this, generating an error message is appropriate.
213 0.7.2
215 o       Add cost-minimizing code to reconstruct 3D scenes from 2D inputs.
216         (This code is currently very experimental.)
218 o       Add rudimentary device support for raw, linear files from the Canon
219         EOS 300D (Digital Rebel) SLR.  CRW files may not be directly usable
220         under all configurations; in cases where they are not, Dave Coffin's
221         dcraw program, with arguments -d -4, will produce a raw, linear PPM
222         file.  See http://www.cybercom.net/~dcoffin/dcraw/
224 o       Add a new option --gs-mo to establish a minimum overlap area for
225         global searches.  This may allow more of Derrick Brashear's historical
226         USGS contour map image sets to align successfully.  (from
227         0.7.1-patch2)
229 o       Allow the scale factor to be explicitly set to one. (from
230         0.7.1-patch2)
232 o       Print version information to stdout instead of stderr. (from
233         0.7.1-patch2)
235 o       Add a rudimentary test suite. (from 0.7.1-patch2)
237 o       Add support for --perturb-{upper,lower}=x%, where the value x% is
238         specified as a percentage of the smallest image dimension.  Use of
239         percentages to specify bounds was suggested by Jeff Epler. (from 
240         0.7.1-patch1)
242 o       In render::is_excluded(), add the offset before checking exclusion
243         regions. (from 0.7.1-patch1)
245 o       Add code to shrink the accumulated image in d2/render/incremental.h,
246         so that superfluously large undefined areas are never present.  This
247         may improve operation of '--gs inner' in some cases. (from
248         0.7.1-patch1)
250 o       In d2::align::_align(), rescale default_initial_alignment in parallel
251         with the current transformation, so that it can be used again, if
252         necessary. (from 0.7.1-patch1)
254 o       Add experimental options --perturb-source and --perturb-output, which
255         allow some refinement of the manner in which perturbation occurs.
256         (from 0.7.1-patch1)
258 0.7.1
260 o       Fix --visp segfault when not using last: filters.
262 o       Add help mode --hA to display all help pages.
264 o       Add circular point-spread function option "circle=<diameter>".
266 o       Add support for the ov7620 sensor (raw, linear modes only).  (Updated
267         from 0.7.0-patch1 to specify a linear PSF.)
269 o       Add global search option --gs to fix an alignment problem reported by
270         Bert Douglas.  (Also included in 0.7.0-patch1.)
272 o       Change transformation::eu_{get,set,modify}() so that externally
273         visible values are interpreted in the context of transformations
274         between scaled images, while internal values represent transformations
275         between unscaled images.  (Bugfix for 0.7.0.  Also included in
276         0.7.0-patch1.)
278 o       d2/tfile.h: Ensure that eu[] parameters are properly scaled when read
279         and written.  (Bugfix for 0.7.0. Also included in 0.7.0-patch1.)
281 o       Fix order-of-operations bug in d2::image::scale_by_half().  (Bugfix
282         for 0.7.0 and earlier versions.  Also included in 0.7.0-patch1.)
284 o       Scale alignment weights for reduced level-of-detail in d2::align().
285         (Also included in 0.7.0-patch1.)
287 o       For reduced level-of-detail alignment reference images, filter
288         using alignment weights.  (Also included in 0.7.0-patch1.)
290 o       Add speed optimizations for filtering in the Euclidean case, but
291         leave these disabled, since they are not safe.  (Also included
292         in 0.7.0-patch1.)
294 0.7.0
296 o       Add support for algorithmic alignment weights.  This requires 
297         POSIX fork() and execlp(), so add a Makefile variable for POSIX.
299 o       Add support for frequency-based alignment weights.  Angelo Pesce
300         had initially suggested the related (or more general) idea of
301         edge-based alignment.  Frequencies were chosen because of their
302         conceptual simplicity.  This option requires that FFTW be linked.
304 o       Add support for specifying per-pixel and per-channel alignment weights
305         by providing an additional weight-map image, as suggested by Bert
306         Douglas.
308 o       Remove support for USM.
310 o       Add multiple default settings: q0, q1, q2, qn, qr.
312 o       Partition help into sections, and add a section for transformation
313         data file help.
315 o       Add a device type for the XVP610 camera in 640x480 mode.
317 o       Modify the divisor in d2/render/ipc.h to ensure convergence when
318         using multiple varieties.
320 o       Add experimental handling for Bayer patterns.
322 o       Add experimental video stabilization options.
324 o       Add options to control output range.  By default, use the range of the
325         original frame.
327 o       For incremental rendering, add general filtering options.  Drizzling
328         options are no longer supported as such, but the help output offers
329         examples of how to emulate old drizzling/merging techniques (roughly).
331 o       Add options --fail-default and --fail-optimal to select the desired
332         failure mode.  --fail-default uses the default alignment in the case
333         of failure.
334         
335 o       Add option --ex, to support exclusion volumes.  Region exclusion was
336         first suggested to the author by Dewayne VanHoozer as a means of
337         solving the 'closed eye problem' in group photography.
339 o       Add a barrel distortion adjustment multiplier and rate options.
341 o       In d2/transformation.h, add parameters for barrel distortion correction.
342         In d2/tfile.h, add new barrel distortion command 'B'.  The approach
343         taken is based on that of Helmut Dersch's PanoTools.  (i.e., a
344         polynomial in radial distance is used.)
346 o       Increment the latest supported transformation file syntax to version
347         3.  This version supports transformation of the original frame, as
348         well as other new features described above.
350 o       Move d2/gpt.h to d2/transformation.h.
352 o       In d2::align, add support for original frame transformations.
354 o       In d2::align::diff() and d2::align::set_exposure_ratio(), treat cases
355         with and without extension identically.
357 o       Report unrecognized transformation file commands as errors instead of
358         warnings.
360 o       In the transformation data file handler, report incompatible
361         transformation types as an error instead of as a warning.
363 0.6.0
365 o       Add a generalized, but rudimentary, implementation of Steve Mann's
366         notion of 'certainty'.  For more details, see
367         http://wearcam.org/comparametrics.pdf
369 o       Make stdin filter height and width independent of each other.
371 o       In the Irani-Peleg renderer, skip frames that fail to reach the match
372         threshold.
374 o       Convert some operations on pixels and points into vector syntax 
375         through C++ operator overloading.
377 o       Add command-line options to select plain or raw PNM/PPM formats.  Remove
378         makefile variable PLAIN.
380 o       Add command-line options to select 8/16 bits per channel.  Remove
381         makefile variable BITS.
383 o       Revise the device configuration xvp610_320x240 to use a new
384         filter, reflecting driver updates (see the relevant web page
385         http://auricle.dyndns.org/xvp610/ ) and support for non-linear
386         colorspace point-spread functions.
388 o       In the Irani-Peleg renderer, use a discrete Fourier transform to
389         ensure that each (point-spread function, backprojection kernel) pair
390         satisfies condition (9) from theorem 4.1 in the source paper.
392 o       Add a point-spread function rasterizer.  
394 o       Extend the --replace option to support drizzling.
396 o       Add support for exposure registration (i.e., matching of exposure
397         between different frames).
399 o       Change -Os to -O2 in the Makefile, since -Os no longer achieves speedup
400         in the most critical codepaths.
402 o       Add command-line support for summation of point-spread functions.
404 o       Add a polymorphic point-spread function type psf and convert all
405         external interfaces of ipc.h and usm.h (formerly hf-enhance.h) to use
406         this type.  
408 o       Fix memory leak in d2/render/combine.h:get_image().  (This fix is also
409         included in a patch for 0.5.1.)
411 o       Modify the USM renderer to write output when incremental output is
412         enabled.
414 o       In the USM renderer, now only defined pixel values contribute to the
415         mask.  Also, undefined values are no longer masked.
417 o       Update e-mail address information.
419 o       Modify the Irani-Peleg calibration script into a general point-spread
420         function calibration script, using a new built-in point-spread function
421         evaluation module to rate candidates.
423 o       Irani-Peleg and USM (High-frequency enhancement) renderers now
424         use the same point-spread function configurations.  New options --ips,
425         --usm, --lpsf, --nlpsf, and --device subsume and extend the
426         functionality provided by options --ip, --ipc, and --hf-enhance.
428 o       Add support for convolutions in non-linear colorspace.  This feature
429         is enabled and configured by the command-line option --nlpsf.  (See
430         also the item above.)
432 o       Linearize channel values within internal data structures so that most 
433         ALE operations are performed on linear data.  Steve Mann discusses the
434         use of linear representations in image processing, e.g. in his paper
435         http://wearcam.org/comparametrics.pdf .  We assume a simple power-law
436         response by default.
438 o       Modify the image class to use a floating-point data type for 
439         storing pixels.
441 o       Modify the README to remove information covered in the User Manual.
443 o       Revise identifiers and comments in d2/render/ipc.h to better reflect
444         the terminology used in the source paper by Irani and Peleg.
446 o       Consoldiate code for computing the position and dimensions of a pixel in a
447         new coordinate system, and use this new abstraction to reduce the code
448         size of d2/render/ipc.h and d2/render/drizzle.h (Irani-Peleg and
449         drizzling code, respectively).
451 o       Change several instances of 'double', 'float', and 'my_real' to
452         specialized floating-point types 'ale_real', 'ale_pos', 'ale_sreal',
453         and 'ale_accum'.
455 o       Fix offset calculation in d2/render/ipc.h.  This is necessary for
456         Irani-Peleg rendering of image mosaics extending upwards or to the
457         left of the original frame.  (This fix is also included in a patch for
458         0.5.1.)
460 o       Move classes treating snapshots as two-dimensional data to directory
461         'd2' and create an associated C++ namespace.  We can't use '2d' to
462         label the namespace, because the C++ grammar won't allow it.
464 0.5.1
466 o       Several of the changes below are based on a suggestion by Bert
467         Douglas regarding support for 16-bit-per-channel color.  See the README
468         for more information about relevant compilation options.
470 o       Add information to the README regarding new compilation options.
472 o       Modify the makefile to accept a variable BITS, and differentiate between
473         values BITS=8 and BITS=16.  The latter option causes the macro BITS_16
474         to be defined during compilation.
475         
476 o       Modify image_rw.h to handle 16-bit data when BITS_16 is defined.  Also,
477         differentiate between 8-bit and 16-bit ImageMagick builds by checking
478         MaxRGB.
480 o       In ppm.h, add carriage returns to the set of recognized whitespace
481         characters.
483 o       Modify ppm.h to read 16-bit binary PPM files (added to the PPM format
484         spec in April 2000).  
486 o       Modify ppm.h to read plain (ASCII) as well as raw (binary) PPM files.  
488 o       Add a Makefile option for writing plain (ASCII) PPM files instead of
489         raw (binary).  This option causes the macro PPM_PLAIN to be defined
490         during compilation.
491         
492 o       Modify ppm.h to write plain (ASCII) PPM files when PPM_PLAIN is defined.
494 o       Modify ppm.h to output 16-bit PPM files when BITS_16 is defined.
496 o       Modify ppm.h to scale input intensity values based on the internal
497         representation depth (8 or 16 bits per channel).
499 o       Add a file 'channel.h' to describe the color channel data type and
500         valid range, both being dependent on whether BITS_16 is defined.  Use
501         these generic values, where appropriate, throughout the ALE codebase.
503 0.5.0
505 o       Remove certain cloning operations from align.h, but since cursory tests
506         indicate that scaling with --scale is much more expensive than cloning,
507         allow cloning to occur when scaling occurs.
509 o       Add more comment documentation to header files.
511 o       Emit a more informative error message when the PPM file handler
512         encounters a file that is not a well-formed PPM binary file.
514 o       Move rendering implementations to subdirectory 'render/'.
516 o       Modify semantics of alignment following by applying to file-loaded
517         initial transformations a delta transformation D = AB^-1, where B is
518         the previous frame's (unmodified) initial transformation, A is the
519         previous frame's final transformation, and ^-1 is the inverse operator.
520         Using --follow with --trans-load can now improve alignment success when
521         working with panoramic image mosaics.
523 o       We're not using simulated annealing, so remove comments that claim
524         otherwise.
526 o       Remove certain unsafe assumptions from ipc/* (now render/ipc/*); this
527         change includes a modification to ipc.h (now render/ipc.h).  Limits of
528         the rectangle used as an argument to the <type>::response() function
529         are now explicitly given rather than implied.
531 o       Change documentation for --replace.
533 0.4.8
535 o       Modify Irani-Peleg renderer to produce incremental output.
537 o       Modify Monte Carlo alignment so that the same set of accumulated image
538         pixels is examined when comparing two transformations.
540 o       Add an option for additional upper-bound constraint of rotational
541         perturbation.  Jeff Epler had noted that the
542         perturb-upper/perturb-lower options alone may not be suited to working
543         with sets of higher-resolution images.  
545 o       Resolve a bug introduced in version 0.1.1 which had limited rotational
546         perturbation to 2 degrees.
548 o       Add an option to adjust the maximum level of detail used.  The default
549         maximum is 2/perturb, which matches the default for previous versions
550         of ALE.
552 o       Modify names of temporary files used in the calibration script.
554 0.4.7
556 o       Add a replacement option suggested by Jeff Treece.  This option can
557         be used to facilitate video stabilization.
559 o       Irani-Peleg: add support for configurable modules, including 
560         a module that reads its configuration data from standard input
561         and a module calibrated for an IBM (Xirlink) XVP610 in 320x240
562         mode.  A rudimentary script for calibrating devices with unknown
563         projection functions has been included as ipc/ale-calibrate.
565 o       Irani-Peleg: don't truncate correction values in backprojection.
567 o       Irani-Peleg: don't multiply the weight function by a scale correction
568         factor in backprojection.
570 o       Rename render::operator()() to render::sync().  Update subclasses
571         accordingly.
573 0.4.6
575 o       Allow --ip and --hf-enhance to be used together.  [Modify
576         ip::operator() and hf_filter::operator() so that multiple
577         post-processing filters can be used.]
579 o       Initialize the drizzled image to be uniformly black.  This fixes
580         a bug introduced in 0.4.2.
582 o       Allocate the correct size image for drizzling.  This fixes a bug
583         introduced in 0.4.5.
585 0.4.5
587 o       Ensure correct transformation scaling and difference calculation after
588         alignment is complete, even if alignment terminates with a reduced
589         level of detail (i.e. perturb-lower > 2).
591 o       Separate the scale() function into two cases: scale() is reserved for
592         scale factors greater than or equal to one, as in user-specified
593         scaling; and scale_by_half() is used for the scale factor 0.5, needed
594         to provide multiple levels of detail in alignment.  Modify the
595         scale_by_half() case to reflect source pixel values more fairly.  (This
596         change affects alignment behavior at reduced levels of detail.)
598 o       Reduce whitespace in usage() message.
600 o       Modify align::diff() to use correctly scaled image offset values.
601         (Bugfix for alignment with --extend.)
603 o       Modify align.h so that the image definition array is correctly scaled
604         for all levels of detail.  (Bugfix for alignment with --extend.)
606 o       Modify image.h to correctly handle image offset values.  (Bugfix
607         for --extend operation.)
609 o       Remove call to stat() in image_rw.h.  This improves OS independence,
610         and apparently also allows URL-specification of images when compiled
611         with ImageMagick support.
613 o       Modify image file handler interface so that input files are not scaled.
614         Perform scaling, when necessary, outside of the file handler.  Since
615         unscaled data is needed by the drizzling and Irani-Peleg code, this
616         fixes bugs in those modules.  
618 0.4.4
620 o       Modify the Monte Carlo pixel selection algorithm so that the expected
621         number of sampled pixels more closely matches the specified number in
622         typical cases.
624 o       Specify the binary mode flag to fopen() calls in the PPM file handler.
625         This change resolves a bug discovered by Benjamin Hill.
627 0.4.3
629 o       Add support for Monte Carlo alignment of images, in which only a
630         random subset of pixels is sampled.
632 o       Add an option to disable incremental image output.
634 0.4.2
636 o       Implement an image reconstruction option based on the work of Irani and
637         Peleg.
639 o       Clean up source; move rendering and alignment functions into separate
640         files.
642 o       Change valid drizzling diameter interval to (0,1].
644 o       Modify PPM file reader to correctly handle comments in PPM files; this
645         resolves a bug pointed out by Benjamin Hill.
647 o       Add missing typecast to resolve compile warning under GCC 3.2.
649 o       Make changes to gpt.h that may reduce the Euclidean alignment time.
651 o       Move ale.c to ale.cc to follow one of the many C++ naming conventions.
653 0.4.1
655 o       Change language to C++.
657 o       Code cleanup in ale.c, image.h, and gpt.h.
659 o       Separate into a number of subsections the option descriptions in the
660         README 
662 o       Add URL information to README
664 o       Add an experimental drizzling implementation.  Research on drizzling
665         by Richard Hook and Andrew Fruchter was brought to the attention of 
666         the author by Dan Kaminsky.
668 o       Add an option to use the previous frame's final transformation as the
669         default alignment.
671 o       Change pixel weight data type so that more than 255 images can
672         be merged.
674 o       Add support for increased spatial extents.  Research on increased
675         spatial extents by Steve Mann was brought to the attention of the
676         author by Dan Egnor.
678 o       Modify the transformation algorithm to use transformations from the
679         domain of the input image to the range of the target image.  This
680         change is reflected in transformation files.  Maintain support for
681         old transformation file versions, however.
683 o       Add version information to transformation files and update the version
684         from 0 to 2.
686 0.4.0p1
688 o       Merge a bugfix from Debian ALE package version 0.4.0-1.  Without this
689         fix, an assertion failure can occur when ImageMagick support is
690         enabled.  Original fix implemented by Nick Rusnov.  
692 0.4.0
694 o       Add support for general scaling parameters (i.e. all scale 
695         factors >= 1.0).  --scale2, --scale4, and --scale8 are now deprecated, 
696         and replaced with a more general --scale=x argument.
698 o       Support enhancement of high frequencies even when the scale factor is 
699         1.0.
701 o       Modify the high-frequency filter algorithm to support filtering near
702         the border of an image.
704 o       Modify the high-frequency filter function so that the response is now
705         (4/n)^2 times what it used to be, where n is the scale factor.  
707 0.3.2
709 o       Don't filter high frequencies if we're not enhancing them.  This 
710         improves efficiency, but should not affect output.
712 0.3.1
714 o       Output average match statistic.
716 o       Update informational output to transformation files to include original 
717         frame.
719 o       Add support for post-enhancement of high-frequency details.
721 0.3.0
723 o       Add support for loading and saving transformation data.
725 o       Add an option to set the upper bound on correction steps.
727 o       Modify Makefile to compile with size optimization, since this 
728         appears to improve speed characteristics in some cases.
730 o       Move transformation data structure and related functions to 
731         a separate header file.
733 0.2.0
735 o       Add support for general projective transformations, and change/add
736         options as follows:
738                 '--translation' used to be      '--no-rotate'
739                 '--euclidean'   used to be      '--rotate'
740                 '--projective'  is a new option
742 0.1.2
744 o       Add optional support for .jpg, .png, .tiff, and other file formats
745         through ImageMagick.  Inspired by a translation script idea suggested
746         by Nick Rusnov.
748 o       Don't segfault if a file can't be opened.
750 0.1.1
752 o       Use reduced levels of detail in coarser alignment steps to increase
753         speed.
755 o       Change perturbation step lower-bound check from less-than ('<') to 
756         less-than-or-equal-to ('<=').  Change default lower bound
757         to .125 from .1 (the behavior is the same, but the value
758         makes more sense).
760 o       Change perturbation initial value to 32 pixels from
761         16 pixels, since coarse alignment is now less expensive.
763 o       Modify scale function so that the borders aren't 
764         corrupted (too badly).
766 0.1.0
768 o       Add support for correction of rotation about the lens axis.
770 o       Add an optional match criterion for merging.
772 o       Add an option to adjust minimum step-size.
774 o       Add flags to specify which channels to use for alignment.  Use
775         a summation of all channels by default.
777 o       Add an option to modify the error metric exponent, and change
778         the default value from 1 to 2. 
780 o       Display information about how well a new image matches
781         the accumulated image.
783 o       Add a rule for ale.exe to the Makefile.  
785 0.0.0
786         Initial release.