Quantitative Image Analysis in C++, MATLAB and Python
Version 2.4 of DIPlib and DIPimage has been released.
Changes to DIPimage
[0,1]
.'BinaryDisplayColor'
changes the color used for foreground pixels when displaying a binary image.readrawim
reads in images from files in RAW format.ssim
computes a similarity measure between images.newcolorim
creates a new color image.dip_image
objects now do their computation through DIPlib. One consequence is that operations on large images with different data types are faster now. Another consequence is that singleton expansion is performed automatically (that is, you can do things like img/mean(img,[],[1,2])
; additionally, singleton dimensions are added to one image as needed to match the dimensionality of the other. Affected operators are +
, -
, *
, .*
, /
, ./
, &
, |
, xor()
, >
, >=
, ==
, ~=
, <=
and <
.dip_image
objects now also take tensor images as input (e.g. rot90
, real
). This is still not the case for toolbox functions (e.g. dilation
or mirror
).measure
has three new functions: ConvexArea
, ConvexPerimeter
and Convexity
. Feret
is implemented differently now, and produces 5 output values.correctshift
has two new input arguments: to define how the image boundary should be handled, and to remove the frequencies at Nyquist.extend
now optionally pads by copying/mirroring image data.dipshow
now scales down an image if it doesn’t fit on the screen; changing the slicing direction doesn’t change the “truesize” setting; and it is possible to display 0D images as a uniformly coloured square.dipinit
has been rewritten to provide a, hopefully, less confusing default for new users. Feel free to copy the function to your working directory and modifying it to your hearts content!convolve
now works properly with a horizontal 1D filter in a 2D image.frc
should now produce results consistent with the definition in the literature.dip_measurement
object (by Petr Matula).Changes to DIPlib
(Some of these changes propagate to DIPimage)
dip_Arith()
performs all the dyadic arithmetic and logic operations. dip_Add()
, dip_Sub()
, dip_Mul()
and dip_Div()
now are defined as macros that call dip_Arith()
, and dip_And()
, dip_Or()
and dip_Xor()
are functions that call dip_Arith()
. One difference is that these operations now add singleton dimensions to one input to match the dimensionality of the other input.dip_Arith_ComplexSeparated()
is similar to dip_Arith()
, but receives complex images as two separate images, one with the real component and one with the imaginary component. Unlike dip_Arith()
, it does not do any logic operations, and always produces two real-valued output images, one for the real component and one for the imaginary component.dip_ChainCodeConvexHull()
, dip_ConvexHullGetArea()
, dip_ConvexHullGetPerimeter()
, and dip_ConvexHullGetFeret()
provide a new way to do measurements on 2D objects. New measurement features related to these functions are: dip_FeatureConvexAreaID
, dip_FeatureConvexPerimeterID
and dip_FeatureConvexityID
.dip_IntegerArrayCompare
and similar functions for other numeric array types.dip_ImagesCheckDyadic()
checks and compares the two input images, and expands dimensions of size one in either image to match the other image (singleton expansion).dip_ScanFrameWork()
is parallelized now for all cases. Affected functions are: dip_Add*()
, dip_Sub*()
, dip_Mul*()
, dip_Div*()
, dip_And()
, dip_Or()
, dip_Xor()
, dip_Compare()
and dip_Select()
.dip_ImagesCheckDyadic()
).dip_Measure()
has a new measurement type: DIP_MSR_FUNCTION_CONVHULL_BASED
. The DIP_MSR_FUNCTION_COMPOSITE
measurement type is much more efficient now.dip_FeatureFeretID
measurement has changed. Now it is implemented through dip_ConvexHullGetFeret()
.ImagesCheck()
(and dependent functions) now checks all images for image type and data type. This seems to correspond better with the way that this function is commonly used.dip_ChangeDimensions()
now can also add singleton dimensions.dip_ScanFrameWork()
could produce incorrect results when image strides were different.dip_Resample()
produced wrong output image size in specific cases, due to numerical rounding in the computations.