News‎ > ‎

Changelist 2.3

Changes to DIPimage

  • New functions:
    • dipdrawpolygon works the same way as diproi, but returns the coordinates of the selected region instead of a binary image. Additionally, the user can now, using the space bar, switch to a mode for moving the set points. This new function is useful, among other things, to create an input to snakeminimize.
    • findmaximafindminima and subpixlocation can be used to determine the location of local extrema with sub-pixel accuracy.
    • dpr and frc compute the differential phase residuals and Fourier ring correlation, respectively. Both are similarity measures between images.
    • New overloaded function dip_image/eig.
    • New overloaded function dip_image/hypot.
    • New overloaded functions dip_image/ismatrixdip_image/isrow and dip_image/iscolumn, to match new functions in MATLAB 7.11.
    • New overloaded functions dip_image/ind2sub and dip_image/sub2ind.
    • New overloaded function dip_image/circshift to shift an image by integer distances.
    • New overloaded function dip_image/diag.
    • New overloaded function dip_image/unique.
    • New function slice_in, to complement slice_ex (nee ex_slice) and slice_opslice_in inserts a slice into an image, in the same way that slice_exextracts a slice.
  • Changed functions:
    • stretch now supports color and tensor images.
    • diproi now uses dipdrawpolygon for the user interaction part.
    • New & Improved convolve: It now tries to decompose the kernel and compute the convolution in the spatial domain. Still uses the FT if the decomposition is not possible.
    • dip_image/inv now uses the 'LU' method by default.
    • dip_image/svd will now not waste lots of memory when only one output argument is given.
    • readtimeseries is now more efficient with multi-plane TIFF files.
    • fillholes now has a 2nd input argument to specify connectivity.
    • measure now has a default connectivity of Inf rather than 1. This matches the default in label.
    • cut now has an additional, optional parameter, origincropim has been moved to the aliases directory, use cut instead.
    • dip_image/find and dip_image/findcoord now accept two additional parameters, mirroring the built-in MATLAB function find: you can now choose to find only the first or last n pixels.
    • ex_slice is now called slice_ex, the old name is still available in the aliases directory.
    • The color map used for the labeled image display is much better now. This also changes the output of overlay for labeled images, since that uses the same color map as the display.
    • The function noise can now also generate pink and Brownian noise.
    • The readim interface to loci_tools.jar is much more efficient. It only works with the latest version (5.0, currently labeled "Trunk build" at
    • New version 1.2.15 of the Java-based 5D image viewer.
  • Bug fixes:
    • Indexing into dip_measurement objects with very large ID values now works without running out of memory.
    • dip_image/cat now preserves ending singleton dimensions.
    • cut and extend now properly keep the origin in the middle of the image.

Changes to DIPlib

(Some of these changes propagate to DIPimage)

  • New functions:
    • dip_Canny(), the famous Canny edge detector.
    • dip_SubpixelMaxima()dip_SubpixelMinima() and dip_SubpixelLocation(), functions to determine location of extrema with sub-pixel accuracy.
    • dip_ChainCodeGetRadius() obtains some object parameters from its chain code: maximum and minimum radius, mean radius, and variance of radius.dip_Measure() uses this function by specifying the dip_FeatureRadiusID() measurement feature.
    • dip_KuwaharaImproved() and dip_GeneralisedKuwaharaImproved() do the same as dip_Kuwahara() and dip_GeneralisedKuwahara(), but add a threshold parameter to avoid shifting the kernel in flat regions of the image. This avoids creating false edges in flat regions due to noise.
    • dip_RandomSeedWithClock(), to initialise a dip_Random variable using the system clock.
    • dip_GeneralConvolution() implements a convolution for non-separable kernels in the spatial domain. Complements dip_SeparableConvolution() and dip_ConvolveFT().
    • dip_MapView() and dip_MirrorView() do the same thing as dip_Map() and dip_Mirror(), but instead return a ROI on the original image, making no copy of the data.
    • dip_ImageDoEdge() (not documented).
  • Changed functions:
    • dip_SingularValueDecomposition() now can return only the singular values, saving lots of memory if you don't need the full decomposition.
    • Chain codes, represented in the dip_ChainCode object, now use less memory. Recompile any program that links with DIPlib and uses chain codes!
    • dip_Kuwahara() and dip_GeneralisedKuwahara() are now biased towards the middle of the filtering kernel, rather than the top left. This avoids shifts of regions in the output image in certain situations.
    • All filters that can use rectangular filtering windows now will accept even-sized windows (previously these would be rounded up to an odd size).
    • Mathematical morphology operations with a grey-value SE are now much faster.
  • Bug fixes:
    • Fixed memory leak in dip_SelectValue() and dip_NotZero().
    • Fixed a bug with the boundary condition in the 1D version of dip_BinaryPropagation().
    • dip_ImageChainCode() no longer starts the chain with a useless 0 code.
    • Fixed a bug in dip_HartleyTransform() that caused crashes or wrong output.

Changes to dipIO

(This change propagates to DIPimage)

  • Changed function:
    • dipio_ImageReadTIFF() now can read all image planes into a single 3D image (or 4D if there is color channels). Simply choose image plane -1.