Changes in version 4.22.0                        

BUG FIXES

    o   fixed compilation errors on Solaris

                       Changes in version 4.20.0                        

NEW FEATURES

    o   'abind()' method for combining Image arrays

    o   'floodFill()' has been vectorized over its arguments 'pt' and
	'col' allowing to specify multiple start points and different
	fill colors

SIGNIFICANT USER-VISIBLE CHANGES

    o   'display()' "browser" mode has been updated to use the
	htmlwidgets infrastructure

    o   'filter2()' does not require filter dimensions to be odd
	numbers when filter size equals image size

BUG FIXES

    o   fixed issues with 'normalize()'
	(https://github.com/aoles/EBImage/issues/25)

    o   various improvements to the 'clahe()' function

                       Changes in version 4.18.0                        

NEW FEATURES

    o   new arguments to 'display()' enabling control over layout and
	appearance of image grid in "raster" mode: 'nx' (number of
	frames in a row), 'drawGrid' (draw lines between frames),
	'spacing' (separation between frames) and 'margin' (outer
	margin around the image)

    o   new function 'clahe()' for improving local contrast in images
	by performing Contrast Limited Adaptive Histogram Equalization

    o   re-introduced 'output.origin' argument to 'rotate()'

SIGNIFICANT USER-VISIBLE CHANGES

    o   object masks returned by `bwlabel()`, `propagate()`, and
	`watershed()`, as well as the result of thresh() are now of
	storage mode integer rather than double

    o   binary kernels constructed by 'makeBrush()' have storage mode
	integer (previously double)

    o   'rmObjects()' and 'reenumerate()' now require input of storage
	mode integer

    o   'untile()' and morphology operations preserve data storage mode

    o   modified boundary behaviour of 'thresh()' to reduce artifacts
	at image borders and to match the output of a corresponding
	call to 'filter2()'

    o   added the ability for different boundary values for different
	frames in 'filter2()' linear mode
	(https://github.com/aoles/EBImage/pull/11)

    o   removed defunct '...GreyScale' family morphological functions

PERFORMANCE IMPROVEMENTS

    o   significantly improved performance of 'transpose()',
	'getFrame()' and 'getFrames()' by using C implementation

    o   numerous small improvements to execution time and memory
	consumption across the whole package, mostly by avoiding
	storage mode conversion and object duplication in C

BUG FIXES

    o   proper origin handling in 'resize()'

    o   import 'methods::slot' (fixes
	https://github.com/rstudio/blogdown/issues/17)

    o   fixed a bug in 'filter2()'
	(https://github.com/aoles/EBImage/issues/8)

    o   proper check of filter size in 'thresh()' and rectified
	behavior when filter dimensions are equal to image dimensions

    o   correct computation of 'selfComplementaryTopHat()'

    o   address PROTECT errors reported by Tomas Kalibera's 'maacheck'
	tool
	(https://stat.ethz.ch/pipermail/bioc-devel/2017-April/010771.html)

    o   fixed class retention in 'colorLabels()', 'colormap()',
	'rgbImage()', 'stackObjects()', 'tile() and untile()'

                       Changes in version 4.16.0                        

SIGNIFICANT USER-VISIBLE CHANGES

    o   made defunct deprecated '...GreyScale' family morphological
	functions; use common functions 'dilate', 'erode', 'opening',
	'closing', 'whiteTopHat', 'blackTopHat' and
	'selfComplementaryTopHat' for filtering both binary and
	grayscale images

    o   removed defunct 'getNumberOfFrames' function

PERFORMANCE IMPROVEMENTS

    o   'readImage': use 'vapply' instead of 'abind' to reduce memory
	footprint

                       Changes in version 4.14.0                        

NEW FEATURES

    o   'boundary' argument to 'filter2()' for specifying behaviour at
	image boundaries

    o   the 'hist' method now returns a (list of) "histogram""
	object(s) (http://stackoverflow.com/q/33831331/2792099 and
	http://stackoverflow.com/a/35838861/2792099)

    o   'colormap()' function for mapping a greyscale image to color
	using a color palette

PERFORMANCE IMPROVEMENTS

    o   'as.raster.Image': increased performance by not transposing the
	image twice and improved support for Color images with less
	than 3 channels

BUG FIXES

    o   fixed the 'log' method for Image objects
	(https://support.bioconductor.org/p/74236/)

    o   'affine': fixed handling of images containing an alpha channel
	(https://support.bioconductor.org/p/74876/)

    o   retain NA's in morphological operations: 'dilate', 'erode',
	'opening', 'closing', 'whiteTopHat', 'blackTopHat',
	'selfComplementaryTopHat'
	(https://support.bioconductor.org/p/77295/)

    o   fix to potential unsafe code in C function 'affine()' (thanks
	Tomas Kalibera)

    o   medianFilter.c: use proper rounding rather than truncation
	during float to int coercion

                       Changes in version 4.12.0                        

NEW FEATURES

    o   'antialias' argument to the function 'affine' allowing to
	switch off bilinear filtering around image borders

SIGNIFICANT USER-VISIBLE CHANGES

    o   deprecated '...GreyScale' morphological functions; use common
	functions 'dilate', 'erode', 'opening', 'closing',
	'whiteTopHat', 'blackTopHat' and 'selfComplementaryTopHat' for
	filtering both binary and grayscale images

    o   'resize' doesn't perform bilinear filtering at image borders
	anymore in order to prevent the blending of image edges with
	the background when the image is upscaled; to switch on
	bilinear sampling at image borders use the function argument
	'antialias = TRUE'

    o   'floodFill' and 'fillHull' preserve storage mode

PERFORMANCE IMPROVEMENTS

    o   all morphological operations use the efficient Urbach-Wilkinson
	algorithm (up to 3x faster compared to the previous
	implementation)

    o   'rotate': perform lossless 90/180/270 degree rotations by
	disabling bilinear filtering

BUG FIXES

    o   reimplemented the Urbach-Wilkinson algorithm used to perform
	grayscale morphological transformations

    o   improved pixel-level accuracy of spatial linear
	transformations: 'affine', 'resize', 'rotate' and 'translate'

    o   'display(..., method = "raster")': displaying of single-channel
	color images

    o   'drawCircle': corrected x-y offset

    o   'equalize': in case of a single-valued histogram issue a
	warning and return its argument

    o   'hist': accept images with 'colorMode = Color' containing less
	than three color channels

    o   'image': corrected handling of image frames

    o   'medianFilter': filter size check

    o   'normalize': normalization of a flat image when the argument
	'separate' is set to 'FALSE'

    o   'reenumerate': corrected handling of images without background

    o   'stackObjects': corrected handling of blank images without any
	objects

    o   'tile': reset dimnames

                       Changes in version 4.10.1                        

SIGNIFICANT USER-VISIBLE CHANGES

    o   'rgbImage' and 'combine' use dimnames if present

    o   'makeBrush(..., shape = "line")': the line is drawn
	symmetrically around the center of the kernel, and the argument
	'size' sets the maximum x-y dimension of kernel rather than the
	line length

BUG FIXES

    o   'drawCircle' and 'stackObjects': corrected handling of color
	channels

    o   'ocontour': doubled the size of the temporary buffer to
	accommodate longer contours and fixed indexing issue

                       Changes in version 4.10.0                        

NEW FEATURES

    o   'paintObjects' allows control over behavior at image edges

    o   'getFrames' function returning a list of Image objects

    o   default 'display' method can be set by
	options("EBImage.display")

    o   'short' argument to the Image 'print' method

    o   'equalize' function performing histogram equalization

SIGNIFICANT USER-VISIBLE CHANGES

    o   'translate' moves the image in the opposite direction as before

    o   'rotate' returns an image centered in a recalculated bounding
	box

    o   'as.Image' coerces subclasses to Image objects

    o   'getFrame' returns individual channels of a Color image as
	Grayscale frames

    o   'display' method defaults to 'raster' unless used interactively

    o   'combine' allows to combine images of the same color mode only

PERFORMANCE IMPROVEMENTS

    o   'filter2': calculate FFT using methods from the 'fftwtools'
	package

    o   'as.nativeRaster': now implemented in C

    o   'medianFilter': double to integer conversion moved to C code

    o   'hist': fixed binning issues and improved performance

BUG FIXES

    o   'medianFilter': fixed multi-channel image handling; preserve
	original object class

    o   'as.nativeRaster': allow for an arbitrary number of color
	channels

    o   'display': set missing color channels to blank

                        Changes in version 4.8.3                        

BUG FIXES

    o   'paintObjects': the body of an object with ID=1 was not
	highlighted when option thick was set

                        Changes in version 4.8.2                        

BUG FIXES

    o   Clip images in 'as.nativeRaster'

                        Changes in version 4.8.1                        

SIGNIFICANT USER-VISIBLE CHANGES

    o   New sample PNG images

                        Changes in version 4.8.0                        

NEW FEATURES

    o   'otsu' thresholding method (contributed by Philip A. Marais,
	University of Pretoria, South Africa)

    o   Support for dimnames in Image objects

    o   'bg.col' argument to 'affine' transformations

    o   'reenumerate' argument to 'rmObjects'

    o   'names' argument to 'readImage'

    o   'as.array' method for Image objects

    o   'as.nativeRaster' function

SIGNIFICANT USER-VISIBLE CHANGES

    o   Performance improvements to 'Image', 'selectChannel', 'combine
	' and 'reenumerate'

    o   Use a more efficient 'nativeRaster' representation in
	'displayRaster'

    o   Cleaner output of the 'show-Image' method; print true object
	class name and dimorder (if set)

    o   'readImage' sets Image dimnames to corresponding file names

    o   'filter2' and 'affine' return object of the same class as input

    o   Renamed 'getNumberOfFrames' to 'numberOfFrames'

BUG FIXES

    o   Handling of dimensions of character arrays

    o   Drawing of grid lines in 'displayRaster'

    o   Passing of '...' arguments in 'readImage'

                        Changes in version 4.6.0                        

NEW FEATURES

    o   'toRGB' function for convenient grayscale to RGB conversion

    o   'luminance' mode in 'channel' for luminance-preserving RGB to
	grayscale conversion

SIGNIFICANT USER-VISIBLE CHANGES

    o   Performance improvements to: 'Image', 'is.Image', 'readImage',
	'writeImage', 'show', 'normalize', 'getFrame', 'selectChannel',
	'rgbImage', 'colorLabels', 'flip'/'flop'

    o   Reduced memory footprint of 'readImage'

    o   When called on an 'Image' object, 'as.Image' returns its
	argument rather than the Grayscale-coerced copy

    o   'displayRaster' sets 'par$usr' coordinates to image pixel
	coordinates easing up plot annotation

BUG FIXES

    o   'getFrame', 'getNumberOfFrames' and 'colorLabels' support
	multi-dimensional images

    o   Proper handling of multi-dimensional character arrays by the
	'Image' constructor

    o   Fixed 'getFrame' and 'combine' in case of single-channel Color
	Images

    o   Fixed color mode check in 'validImageObject'

    o   Proper 'fg.col' and 'bg.col' color handling in 'tile'

    o   Updates to documentation

                        Changes in version 4.4.0                        

NEW FEATURES

    o   New 'colorLabels' function for color-coding labels of object
	masks by a random permutation (Bernd Fisher)

    o   Additional 'inputRange' argument to 'normalize' allowing for
	presetting a limited input intensity range

    o   Additional 'thick' argument to 'paintObjects' controlling the
	thickness of boundary contours

SIGNIFICANT USER-VISIBLE CHANGES

    o   'normalize' and 'combine' use the generics from BiocGenerics

    o   Removed the 'along' argument from 'combine'

    o   Re-introduced calculation of 's.radius.sd' (standard deviation
	of the mean radius) in cell features

BUG FIXES

    o   XY dimensions equal 1 were dropped by 'getFrame'

                        Changes in version 4.2.0                        

NEW FEATURES

    o   'localCurvature' function for computing local curvature along a
	line (J. Barry)

SIGNIFICANT USER-VISIBLE CHANGES

    o   The range of pixel coordinates displayed in the JavaScript
	viewer is now (1,1):(w,h) rather than (0,0):(w-1,h-1) and
	matches the indices of the corresponding Image array

BUG FIXES

    o   'erode'/'dilate': fixed a bug introduced in the previous
	version (4.0.0)

    o   'resize': new image width was calculated incorrectly when only
	height was provided (reported by B. Fischer)

    o   'medianFilter': incorrect [0:1] <-> integer range conversion
	(thanks to K. Johnson)

                        Changes in version 4.0.0                        

NEW FEATURES

    o   'transpose' function for transposing an image by swapping its
	spatial dimensions

    o   Grayscale functions for computing the self-complementary
	top-hat (I. Kats)

    o   Median filter based on Perreault's constant time median filter
	(J. Barry)

SIGNIFICANT USER-VISIBLE CHANGES

    o   Removed all dependencies towards GTK+ and ImageMagick

    o   Replaced the former GTK+ based 'display' function by a new one
	displaying images using either a JavaScript image viewer, or
	R's built-in raster graphics

    o   'readImage' and 'writeImage' now rely on 'jpeg', 'png' and
	'tiff' packages and do not depend on ImageMagick any more

    o   Added support for images containing an alpha channel; both
	grayscale and color images with an alpha channel are stored as
	an Image with 'colormode = Color'

    o   Re-factored the functions, not using ImageMagick any longer:
	'translate', 'affine', 'rotate', 'resize'

    o   Deprecated: 'blur', 'equalize', 'drawtext', 'drawfont',
	'getFeatures', 'hullFeatures', 'zernikeMoments', 'edgeProfile',
	'edgeFeatures', 'haralickFeatures', 'haralickMatrix',
	'moments', 'smoments', 'rmoments', 'cmoments', 'animate',

    o   Improved 'getFrame': better performance by reassigning array
	dimension only when needed

    o   Modified 'as.raster'

    o   'inst/images/lena.gif' is now 'inst/images/lena.png'

    o   Overhauled the testing procedure in 'tests/test.R'

    o   Added 'NEWS.Rd'

BUG FIXES

    o   'erode'/'dilate': incorrect range of loop indices caused memory
	reads from outside the kernel vector