Skip to content

Releases: AIM-Harvard/pyradiomics

v3.1.0

17 May 11:24
v3.1.0
Compare
Choose a tag to compare

Bug Fixes

  • Fix bug to allow a full-mask. (#660)
  • Fix label assignment in batch-processing example. (#756)
  • Fix bug in label_channel selection for voxel-based extraction. (54a3782)
  • Force label and label_channel datatype to int. (efb9756)

Testing / Continuous Integration

  • Remove Python < 3.7 support, update support to Python versions 3.7, 3.8 and 3.9. (#825)
  • Switch to pytest instead of nose and nose parameterized. (#825)
  • Move MacOS CI to CircleCI, remove TravisCI. (#825)

Documentation

  • Update community link. (038f8a8)
  • Update usage.rst to reflect new notebooks folder location. (#734)
  • Update ReadMe to reflect updated CI. (0c53d1d)
  • Refactor project description to rely mainly on pyproject.toml and setup.cfg. (c341b31)
  • Fix typos

Labs

  • Expose mask correction and geometry tolerance settings in pyradiomics-dcm CLI. (#724)

v3.0.1

11 Oct 10:26
v3.0.1
Compare
Choose a tag to compare

Bug Fixes

  • Fix bug causing IndexError when no gray levels are 'empty'. (#592)
  • Fail initialization of feature extractor when the passed parameter file path
    does not point to existing file. (#587)
  • Fix out-of-range check in GLSZM C calculation. (#635)
  • Fix bug in Travis CI testing (MacOS platform). (#643, #646)
  • Fix cmake URL and remove python2 support from DockerFiles. (#645)

Examples

  • Add example settings for forced-2D extraction in MR. (#613, #644)

Documentation

Internal API

  • Fail gracefully when grayvalues < 1 are encountered in the discretized image. (#602)
  • Add optional progress reporting for voxel-based extraction. (#636)

v3.0

11 Oct 10:31
v3.0
ae1e14c
Compare
Choose a tag to compare

Note!

In this release, the main interface class, RadiomicsFeaturesExtractor(), was renamed to RadiomicsFeatureExtractor() (no 's' between 'Feature' and 'Extractor'). This was done to avoid confusion between the module and class name. (#481 )

Bug Fixes

  • Fix broken Conda deployment (51c5849)
  • Fix error in IBSI mapping (labs/pyradiomics-dcm) (54d6689)
  • Fix resampling error when spacing is correct, but sizes are different (ac7458e)
  • Fix label channel selection (54a3782)
  • Use local scope of settings, preventing race conditions in parallel extraction (43578f7)
  • Fix resampling for 2D input (#545)

Internal API

  • Update C API to use large datatype for index pointers (#500, #501)
  • Update docker CLI to use python 3.6.9 and fix bugs to allow integration with pyradiomics-dcm lab (#527)
  • Add option to force path to UNIX style paths, even on windows (3c0708a)
  • Removed deprecated code (fedaa5e)

Testing

  • Remove testing and deployment for python 2.7 (a5a7e61)

Documentation

  • Refactor documentation (#536)
  • Fix various typos/wording
  • Clarify use of force2D, and add example settings file (#558)

v2.2.0

16 May 12:45
2.2.0
Compare
Choose a tag to compare

In this release, the main interface class, RadiomicsFeaturesExtractor, was renamed to RadiomicsFeatureExtractor (no 's' between 'Feature' and 'Extractor'). This was done to avoid confusion between the module and class name. (#481)

New Features

  • Add 2D shape features (#442)
  • Expose voxel-based feature extraction on the PyRadiomics command line interface. (#457)

Labs

  • Add notebook investigating reproducibility between PyRadiomics and USF tool (ITK-based; #458)

Bug Fixes

  • Flatten array when applying gray value discretization of the entire image (voxel-based, full kernel; f87abcf)
  • Fix incorrect removal of 'empty gray levels' in GLDM and GLRLM (voxel-based; 4b18ce2)
  • Fix incorrect instantiation of firstorder voxel-based extraction. (81e713a)
  • Force cast coefficients to float. Prevents overflow and type errors in feature calculation. (e9d60c7)

Tests

  • Removed support and continuous integration for Python 3.4 (not maintained since March 2019). Added support and CI for Python 3.7. (#486)

Internal API

  • Update C-extensions:

    • Rewrite C code to work with N-Dimensional input. (#463)
    • Add batch-calculation of kernels and vectorized feature calculation to improve voxel-based extraction duration. (#466)
  • Add support for segmentation objects (multi-layer labelmaps; #445)

  • Refactor the commandline interface (#481)

    • Extractor instantiated once (resulting in only 1 validation of the parameter file, outside of paralellization loop)
    • Simplify construction of the python generator of the cases that are to be extracted
    • Remove now unnecessary functions

Documentation

v2.1.2

05 Dec 13:34
2.1.2
Compare
Choose a tag to compare

Labs

  • Include algorithm details in dcm output. (f03145b)

v2.1.1

16 Nov 16:23
2.1.1
Compare
Choose a tag to compare

New Features

  • Implement validation of commandline input. (#433)
  • Implement thread-safe logging for python >= 3.2. (#441, d8db675)

Labs

  • Add script to support extraction of radiomics features directly from DICOM (segmentation should be defined as a DICOM Segmentation object), and saving the result directly as a DICOM Structured Reporting object conforming to TID 1500. The script utilizes external tools for conversion of DICOM image series into volumes (plastimatch and dcm2niix), conversion of DICOM Segmentation segments into volumes (dcmqi), and conversion of pyradiomics output features into DICOM SR (dcmqi). (#434)

Bug Fixes

  • Fix memory error in calculation of GLCM-MCC. (167888b)
  • Fix error in serialization for JSON output. (9d992fe)

Tests

  • Expand testing to include more parts of PyRadiomics. (#410)

Internal API

  • Force cast the mask to an integer datatype on load. (#431)

Dependencies

v2.1.0

16 Nov 16:21
Compare
Choose a tag to compare

Feature Calculation Changes

  • Switch Shape - Volume calculation to a mesh-based instead of a voxel-based one. This also affects all features derived from Volume. Original Volume calculation is retained as VoxelVolume. Also switch calculation of maximum diameter to mesh based. Only PCA-derived are not affected. (#427)

New Features

  • Add GLCM - Maximal Correlation Coefficient. (#411)

New Parameters

  • Update resegmentation function, add support for single (lower) threshold and new modes relative and sigma, customizable in parameter resegmentMode. (#420)
  • Add resegmentShape. Default False, if set to True, the resegmented mask (intensity mask) will also be used for shape calculation. Otherwise, the non-resegmented mask (morphological mask) is used for shape. (#428)

Bug fixes

  • Fix bug in dimension checking in checkMask. (623b836)
  • Fix some errors in the testUtils and baseline generation script. (c285c15)
  • Prevent division by 0 in NGTDM - Coarseness. Return 0 instead. (a59861e)
  • Remove duplicate key in settings file example. (828a7ac)
  • Prevent duplicate log entries in parallel batch extraction. (8cedd8f)
  • Build PyWavelets from source for AppVeyor (Windows) python 3.4 testing. Requires pre-installation of numpy and cython. (6223d35)

Tests

  • Integrate automatic distribution to conda upon release. (#422)

Documentation

  • Update README and Setup.py with additional classifiers, urls. Update section in README on Docker usage. (0fe737e)

Internal API

  • Use ValueError exceptions when feature extraction pipeline fails (exceptions of individual features). (#420)
  • Update generation and names of general info features (provenance information). (#420, #426)
  • Rewrite signatures of pre-processing functions to accept all customization arguments in 1 **kwargs dict. Necessary parameters are obtained using kwargs.get inside the function. Full settings are passed to the function. (#425)

v2.0.1

16 Nov 16:19
Compare
Choose a tag to compare

New Features

  • Add Center of Mass to general info output. (#416)

Bug fixes

  • Fix invocation of numpy.histogram when using a fixed bin count. (2a9fd79)
  • Fix assignment of x and y pixelspacing in shape (no changes in results). (#404)
  • Fix generation of approximation name (LLL or LL) in wavelet. (#405)
  • Add missing requirements for new filters in Docker CLI file. (#409)
  • Fix memory leak in C extensions. (#419)
  • Fix Label column parsing in batch processing. (217a840)

Documentation

  • Fix math rendering in GLCM. (c6a1f21)
  • Add reference to GLDM feature class. (9f9361a)
  • Correct typo in IMC1 and 2 formulas. (4ba909a)
  • Update warning message in ROI check. (1f16b9e)
  • Update usage section in documentation on command line usage. (fe0e2c3)

Internal API

  • Simplify calculation of various GLCM features (no changes in results). (#407)

v2.0.0

16 Nov 16:09
Compare
Choose a tag to compare

Feature Calculation Changes

  • Change calculation of filter coefficients to reflect absolute maximum (take into account negative values). (#319)
  • Mark duplicate features as 'deprecated' and document mathematical proof of the equality. (#321)
  • Fix error in calculation of NGTDM's Complexity and Contrast features. (#351)

New Features

  • Add preCrop, which crops the image onto the bounding box with an additional padding specified in padDistance. This is similar to cropping as performed during resampling and serves to decrease memory consumption and computation time. N.B. To ensure calculated values are not changed, a sufficient padding is required when using filters which include values outside of ROI (e.g. Wavelet, LoG). (#317)
  • Add skip-nans as a commandline argument. If specified, features that compute NaN are removed from the output. In batch mode, NaN is replaced by an empty string. (#318)
  • Add support to configure the feature extractor using a JSON structured string. (#334)
  • Add Gradient Magnitude Filter. (#356)
  • Add Local Binary Pattern Filter (2D/3D). (#357)
  • Add support for Gray Value discretization using a fixed bin count. (#386)

Bug fixes

  • Ensure PyKwalify has a log handler, which is needed when parameter file validation fails. (#309)
  • Fix bug in error handling in :py:func:~radiomics.imageoperations.checkMask (compatibility issue between python 2 and 3).
  • Fix bug in GLCM (incorrect use of self.maskArray). (#322)
  • Fix bug in error handling during geometry checks of image and mask. (0257217)
  • Fix broken continuous testing integration due to unavailability of pip script. (#333)
  • Fix incorrect path separator in example scripts. (c7c5d2e)
  • Fix bug in the calculation of Wavelet. (#346)
  • Fix machine-precision errors in Eigenvalue calculation (Shape). (#355)
  • Update validation rule for image filters (remove hardcoded filters by package-detected filters). (#364)
  • Add missing requirements for LBP filters in the dockerfile. (#389)
  • Fix deprecation error in feature extractor. (da1fc16)
  • Fix axis definition in wavelet. (4027a52)
  • Fix erroneous double return of wavelet approximation. (c8ceee2)

Tests

  • Improve testing badge layout. (#312)
  • Remove unused testing configuration files. (#313)
  • Add testing for wavelet output. (#387)
  • Integrate publication to PyPi into the Continuous Integration, revise the CI workflow to test python 2.7, 3.4, 3.5 and 3.6 for all 3 platforms (Windows, Mac and Linux). N.B. This makes PyRadiomics installable via pip. (#394)

Documentation

  • Update documentation of base.py. (#306)
  • Update notebooks to reflect most recent version of PyRadiomics. (ac66e6c)
  • Add documentation detailing rationale of enforcing a fixed bin width. (#320)
  • Update reference to official publication. (b395904)
  • Update installation instructions for docker. (#329)
  • Add version of NumPy, SimpleITK and PyWavelet to the additional information in the output. (#342)
  • Add documentation for the calculation of Laplacian of Gaussian. (#345)
  • Add refrences for the newly implemented filters. (4464d1c)
  • Fix an error in the firstorder-Uniformity documentation. (da7321d)

Examples

  • Add example for batchprocessing using a multithreaded approach. (#305)

Internal API

  • Update batch script for the commandline interface. Ensures all required input is available and relative filepaths are relative to the input file, not the current working directory. (#307)
  • Remove support for 32-bits python, as memory errors can arise when extracting from many or large images in 32-bits python. (#310)
  • Simplify Calculation of Wavelet Filter. Does not change output. (#323)
  • Refactor commandline interface to work with only 1 entry point (pyradiomics). Also add parallel-processing option for batch-processing (argument -j, which specifies number of CPU cores to use). (#347)
  • Reconfigure testing to allow the removal of testcases from the repository itself (still available as binary data attached to release 1.0.0) and store the baseline in a different format (allowing for easier change-tracking). (#353)
  • Add a check for number of bins generated (preventing construction of too large matrices in C) (#391)

v1.3.0

06 Oct 15:53
Compare
Choose a tag to compare

Feature Calculation Changes

  • Remove feature Sum Variance, as this is mathematically equal to Cluster Tendency. (#300)

New Features

  • Add a row by row customization of the extraction label in the batch processing command line script, as well as both batchprocessing examples. (#262)
  • Allow value 0 for a resampled pixel spacing (per dimension). Values of 0 are replaced by the spacing for that dimension as it is in the original (non-resampled) mask. This allows resampling over a subset of dimension (e.g. only in-plane resampling when out-of-plane spacing is set to 0). (#299)
  • Add optional resegmentation of mask based on customizable threshold. (#302)
  • Add Neighbouring Gray Tone Difference Matrix (NGTDM) (#296)
  • Add Add Gray Level Dependence Matrix (GLDM) (#295)
  • Add a docker file that exposes the PyRadiomics commandline tools. (#297, #301)

Bug fixes

  • In GLCM, the matrix is made symmetrical by adding the transposed matrix. However, numpy.transpose returns a view and not a copy of the array, causing erroneous results when adding it to the original array. use numpy.ndarray.copy to prevent this bug. N.B. This affects the feature values calculated by GLCM when symmetrical matrix is enabled (as is the default setting). (#261)
  • Use a python implementation to compute eigenvalues for shape.py instead of SimpleITK. The implementation in SimpleITK assumes segmented voxels to be consecutive on the x-axis lines. Furthermore, it also assumes that all voxels on a given line of x have the same values for y and z (which is not necessarily the case). (#264)
  • Removal of outliers was not applied to returned object in normalizeImage. (#277)
  • Fix python 3 incompatibility when using urllib. (#285)
  • Fix broken URL link in feature visualization notebooks.
  • Update docker manually install python2 support (since recently not supported by default in
    jupyter/datascience-notebook). (#287)
  • For GLRLM and GLSZM, force2D keyword is passed manually, but was incorrectly named and therefore ignored. Fix name to enable forced 2D extraction for GLRLM and GLSZM. (26b9ef3)

Tests

  • Update the C Matrices test, so that the C and python calculated matrices will have the same dimensions when compared (In the previous implementation, the _calculateCoefficients function was applied to the C calculated matrix, but not in the python calculated matrix, for some texture matrices, this function can change the dimension of the matrix). This update ensures that _calculateCoefficients is applied to neither matrix. (#265)
  • Add a test to check validity of parameter files included in examples/exampleSettings. (#294)

Documentation

version 1.3.0 docs

  • Update reference. (#271)
  • Move section "Customizing the Extraction" to the top level, to make it more visible. (#271)
  • Change License to 3-clause BSD (#272)
  • Document the extend of compliance between PyRadiomics and the IBSI feature definitions (#289)
  • Fix typos in documentation.
  • Expand documentation on customizing the extraction. (#291)
  • Include contributing guidelines in sphinx-generated documentation and add a section on sharing parameter files. (#294)
  • Insert missing line to enable all features in documentation on using the feature classes directly. (5ce9f48)

Examples

  • Add example settings for CT, MR (3 scenarios). (#273)

Internal API

  • Remove unnecessary rows and columns from texture matrices prior to feature calculation. This does not affect the value of the calculated features, as the i and j vectors are updated accordingly, but it does reduce both computation time and memory requirements. This is especially the case when calculating GLSZM on large segmentations, where there may be many 'empty' zone sizes (i.e. no zones of that size are present in the ROI). This reduces the size of the matrix, which therefore reduces the memory needed and the number of calculations performed in the vectorized operations. (#265)
  • Remove circular import statement in __init__.py (circular with radiomics.base). (#270)
  • Revise initialization of the feature class. (#274)
  • Rename parts of the customization variables and functions to better reflect their definition (#291)

License

  • Switch to 3-clause BSD license. (#272)