https://github.com/Radiomics/pyradiomics

sort by:
Revision Author Date Message Commit Date
f0e18c1 v2.1.2 Release 05 December 2018, 12:15:07 UTC
8061e7f TYPO: Correct version number in README 19 November 2018, 09:58:04 UTC
f03145b BUG: uncomment algorithm details initialization This apparently was committed by accident earlier ... 17 November 2018, 03:14:36 UTC
2e60df1 v2.1.1 Release 16 November 2018, 15:50:08 UTC
d8db675 ENH: Limit thread-safe logging to python>=3.2 Thread safe logging is implemented using QueueHandler and QueueListener, which are only available in python versions >= 3.2. Therefore, only implement this for appropriate python versions. For lower versions (most notably, version 2.7), this will only affect the log files. Here, conflicts may arise due to racing conflicts, where multiple workers try to write to the log file at the same time. This may result in poorly or incorrectly formatted log entries. 16 November 2018, 15:31:36 UTC
93c5d6e ENH: change setting of TrackingIdentifier Use SegmentationType CodeMeaning and SegmentDescription. This help better identify segments in the situatins where the same finding is segmented by different tools/readers. 13 November 2018, 16:16:51 UTC
83b510c STYL: Fix flake8 errors Add ignores for 504 and 605 (new line after binary operator and invalid escape sequence, both were giving false positives) Fix Regex match pattern errors (missing `r` prefix to the pattern strings). 12 November 2018, 10:43:44 UTC
c828b99 BUG: Fix PyWavelets version to >=0.4.0, <=1.0.0 This ensure compatibility in the SlicerRadiomics extension (new version fails to compile). 12 November 2018, 10:16:06 UTC
41000f5 STYLE: fix flake8 error 26 October 2018, 22:34:36 UTC
3742735 ENH: propagate tracking identification from SEG, if available TrackingIdentifier and TrackingUniqueIdentifier are required. If not specified, TrackingUniqueIdentifier will be initialized automatically by dcmqi. If either one is available in SEG, propagate to link with the measurements. Related PR for dcmqi will make sure TrackingUniqueIdentifier is always created for SEG segments. It does not hurt, but will become useful if those segments are later used for measurements. See https://github.com/QIICR/dcmqi/pull/365. 26 October 2018, 22:22:12 UTC
ab1bcaa Merge pull request #441 from JoostJM/thread-safe_logging Thread safe logging 22 October 2018, 12:26:08 UTC
d1a55eb DOCS: Document the addition of voxel-based extraction The addition of this new feature was made in the 1.3.0 release, but not yet shown in the changelist. 22 October 2018, 08:11:03 UTC
0dc8bbb Merge pull request #437 from Radiomics/add-pyradiomics-dcm ENH: add labs script for using pyradiomics with DICOM At the moment, supported mode of operation is when segmentation is defined as DICOM Segmentation object. RTSS is not currently supported. 19 October 2018, 21:30:56 UTC
394d5b3 ENH: add XML file corresponding to DICOM CP-1764 The CP is using different (more precise) than in IBSI feature names for some of them. In the future, we could add tools to automatically extract feature nomenclature from the IBSI TeX file and from the DICOM standard, and automatically assemble the mapping table. Added here for the reference. File provided by David Clunie. 19 October 2018, 20:52:56 UTC
435b58d ENH: re-organize supporting files, update features dict Use updated names of the pyradiomics features, and map them to the IBSI concepts more precisely 19 October 2018, 20:52:56 UTC
30f86cf ENH: add IBSI concepts list provided by Alex Zwanenburg This corresponds to the v7 of the IBSI document, and was used as a basis for generating featureDict.tsv in resources. 19 October 2018, 20:52:56 UTC
0f9b370 ENH: use AlgorithmIdentification for parameters Depends on the functionality added to dcmqi in this commit: https://github.com/QIICR/dcmqi/commit/ef688c4d34616129025011dbc1fc74b15771561f 19 October 2018, 20:52:56 UTC
b9b1cd6 STYL: Update style to PyRadiomics style, minor changes Update style to follow PyRadiomics Style (2 space indent, logger child of 'radiomics' logger). Additionally, add some minor changes (e.g. use of choices in argument parser, mark methods as static where applicable) 19 October 2018, 20:52:56 UTC
b17f29c ENH: minor improvements * recognize wavelet features computed with forced 2d * do not require both plastimatch and dcm2niix installed 19 October 2018, 20:52:56 UTC
b25e21f STYL: Update import order, remove pathlib module Update import order to adhere to coding style (prevents flake8 errors) Additionally, remove usage of pathlib, as it is not available in python 2.7 (It is only part of the std lib since 3.4). 19 October 2018, 20:52:56 UTC
679a78f ENH: improved documentation * added README * added sample command line and parameter file that will be use in the @zhenweishi study 19 October 2018, 20:52:56 UTC
e02e625 ENH: include pyradiomics identification and version 19 October 2018, 20:52:56 UTC
4038d98 STYLE: fix flake8 issues 19 October 2018, 20:52:56 UTC
3e2febf ENH: cleanup and reorganization Mapping of features to ISBI is added temporarily, pending resolution of #435 19 October 2018, 20:52:56 UTC
f3b235e WIP: DICOM-ified pyradiomics script Initial commit, copy of the script from https://github.com/QIICR/dicom4miccai-handson/tree/master/scripts Re #434 19 October 2018, 20:52:56 UTC
6a7cb98 Merge pull request #410 from JoostJM/expand-feature-tests Expand feature tests 19 October 2018, 09:59:40 UTC
9f4eb63 STYL: Fix flake8 errors 18 October 2018, 13:01:33 UTC
34667d0 ENH: Allow for cancellation of batch process Capture KeyboardInterrupts and SystemExit errors separately to allow for cancellation of batch jobs. In case of parallel processing, slightly more needs to be done: - Use map_async to start the parallel processing in a non-blocking mode - Use a while loop to check if the process is done and only then get the results. This allows the main process to react to a keyboard interrupt. - When the main process is cancelled, terminate the pool to stop further processing of jobs. - When extracting in serial, propagate the cancellation errors, but just return None in case of parallel extraction. 18 October 2018, 12:56:41 UTC
62d6b76 ENH: Implement thread-safe logging When extracting features in parallel, conflicts may arise when writing to the log-file, corrupting the records. To prevent this from happening, use a QueueHandler in combination with a QueueListener to process log records for the log file. Log messages written to the console are not affected. Additionally, use dictConfig to configure the logging. Finally, do not catch the Keyboard and SystemExit errors. 18 October 2018, 11:45:56 UTC
ee2ff2d ENH: Do not catch KeyboardInterrupt and SystemExit errors 18 October 2018, 08:57:04 UTC
9d992fe BUG: Fix error in JSON serialization Currently, the standard JSON encoder does not serialize int16 and throws a type error. To prevent this, ensure that image and mask diagnostics return type float (for features, this is already the case). 15 October 2018, 08:58:14 UTC
167888b BUG: Fix memory error in MCC Due to the broadcasting of 4 arrays (with each of shape Ng x Ng x Ng x Na after broadcasting), too much memory is needed. Therefore, compute Q using a for loop instead of broadcasting and `numpy.sum`. This is a slightly slower computation method, but should take care of the memory issue. 05 October 2018, 14:26:26 UTC
d8074dc Merge pull request #433 from JoostJM/add-input-validation ENH: Implement input validation for PyRadiomics script 05 October 2018, 09:08:20 UTC
b9d5f26 TEST: Add new tests Testing for - normalization - resampling - matrix merging (GLCM, GLRLM) - Fixed bin Count (Only texture classes) - resegmentation (Not shape class) - flat region (Only texture classes) 05 October 2018, 09:04:32 UTC
765cbd3 ENH: Retain original ordering when re-writing baseline files Additionally allow for adding to/updating existing tests. 05 October 2018, 08:53:40 UTC
efaea42 ENH: Update testing to work with new definition of provenance information "general_info" features have been replaced by "diagnostics" features. Update the testing scripts and baseline to reflect this change. 05 October 2018, 08:31:41 UTC
e2284d3 ENH: Use feature extractor functionality when running tests Use the loadImage function of the feature extractor to load the images and apply pre-processing. Remove deprecated setting "enableCExtensions" from the baseline files. 05 October 2018, 08:30:00 UTC
5103356 ENH: Update test package to new name nose-parameterized is deprecated. 05 October 2018, 08:30:00 UTC
84c01ff ENH: Add script to create new tests This script takes a configuration file, a test name (must be unique) and the test case to use. It then generates the output and stores this in the baseline files. Update the test_features script to allow for tests that do not test all available features. (testing still fails if there are feature classes that are not tested). When a feature class is tested, all features must be enabled. 05 October 2018, 08:30:00 UTC
1d8c1d2 Merge pull request #431 from JoostJM/force-cast-mask ENH: Implement force-cast while loading mask 03 October 2018, 14:47:16 UTC
e815a1a ENH: Implement input validation for PyRadiomics script Checks if passed settings are valid and if all file locations for input Image and Mask exist. 03 October 2018, 12:12:37 UTC
f6accf5 TEST: Update mask hashes to reflect new hash due to force cast When force casting to sitk.UInt32, the mask hash is changed for the breast and lung test cases. Update the mask hash in the baseline and force cast the mask prior to hashing in the testUtils to retain consistency with the feature extractor output. 02 October 2018, 15:47:06 UTC
89a957d ENH: Implement force-cast while loading mask PyRadiomics requires the mask to be of an integer data type. Force type to UInt32 upon load from file (string input), or apply a Cast (SimpleITK.Image input). Remove now unnecessary cast in `imageoperations.cropToTumorMask` 02 October 2018, 15:35:51 UTC
6542181 BUG: Fix a bug in MCC function Improve the fix added in e15f169. In case of a flat region, GLCM has shape [1, 1, a], thereby resulting only in 1 eigenvalue (1). To prevent an indexing error, return arbitrary 1 in this case. In certain cases linalg.eigvals returns a complex number. Cast to float to ensure just the real part is returned. 02 October 2018, 15:10:36 UTC
e85f05c v2.1.0 Release 28 September 2018, 14:28:18 UTC
14809a5 Merge pull request #427 from JoostJM/mesh-volume Mesh volume and diameters 28 September 2018, 11:22:11 UTC
263e8b3 STYL: Update shape documentation and feature names To better reflect computation method, explicitly name the two volume features `MeshVolume` and `VoxelVolume`. Add documentation specifying the unless otherwise mentioned, features are based on the mesh approximation of the shape. Only exceptions to this are the `VoxelVolume` and PCA-derived features (`MajorAxisLength`, `MinorAxisLength`,`LeastAxisLength`, `Elongation` and `Flatness`. For these features, it is explicitly stated in the documentation that these do not make use of the mesh approximation, but the segmented voxel(center)s themselves. 28 September 2018, 10:52:02 UTC
1642170 TEST: Update baseline 28 September 2018, 10:52:02 UTC
7fd96f2 ENH: Calculate Maximum diameters based upon mesh Similar to the change in volume calculation, change the calculation for maximum diameters into one based on the triangle mesh generated by the marching cubes algorithm. This yields a higher consistency between volume, surface area and diameters, as they are now all based on the same volume (defined by the triangle mesh). Additionally, this is also computationally more efficient, as only one pass over all voxels is required, instead of 1 for surface area and volume, and another one for the calculation of the maximum diameters. 28 September 2018, 10:52:02 UTC
00e18bf ENH: Calculate Volume based on triangle mesh In concordance with the IBSI definition of volume, calculate it using the triangle mesh that is also generated for the calculation of surface area. This yields a better correspondence between the calculated volume and surface area, needed for calculation of several subsequent shape features (e.g. sphericity). Original formula for calculation is retained as 'new' feature "ApproximateVolume". 28 September 2018, 10:52:02 UTC
8451138 TEST: Add explicit install of numpy in install step In the case where PyWavelet needs to be compiled, numpy must be available. Even though it is specified in the requirements, it will not be available for compiling PyWavelets if not previously installed. Prevent failure of installation by explicitly checking if numpy is available and install it if not. 28 September 2018, 10:52:02 UTC
6223d35 BUG: fix building pywavelets from source Since release 1.0.0 of PyWavelets, python 3.4 is no longer officially supported. Therefore, no pre-built wheels are available on PyPi. To retain support for Python 3.4 on windows, it has to be build from source (pulled form PyPi). For this, both Cython and Numpy need to be pre-installed. For Linux and Mac, 3.4 wheels are available for the latest release. 28 September 2018, 10:51:40 UTC
4eb9264 Merge pull request #428 from JoostJM/resegmented-shape ENH: Allow to also use resegmented mask for shape calculation 27 September 2018, 13:05:47 UTC
b3282f5 ENH: Allow to also use resegmented mask for shape calculation Add new paramter `resegmentShape` to control this behaviour. This allows the user to also use the resegmented mask for shape calculation, e.g. in the usecase of PET, where a resegementation based on SUV may be performed (e.g. to obtain mean tumor volume). Addtionally, update documentation to reflect new resegmentation modes. 25 September 2018, 10:06:01 UTC
8cedd8f BUG: Update logging in PyRadiomics scripts - Fix bug where a more verbose log level for the file is ignored (logger level was not updated) - Prevent repeated configuration of logging, leading to multiple file handlers and duplicate messages in the log - Update format of the main thread to more closely match those in a parallel thread 24 September 2018, 09:39:17 UTC
828a7ac Typo: Remove duplicate key in example "shape" feature class was listed twice. 21 September 2018, 12:59:30 UTC
a59861e ENH: Prevent division by 0 in ngtdm Coarseness In case of a flat region, N_gp = 1, resulting a division by 0. Return 0 for Coarseness in this case. 21 September 2018, 12:46:23 UTC
e15f169 BUG: Fix a bug in MCC function In case of a flat region, GLCM has shape [1, 1, a], thereby resulting only in 1 eigenvalue (1). To prevent an indexing error, return arbitrary 1 in this case. In certain cases linalg.eigvals returns a complex number. Cast to float to ensure just the real part is returned. 21 September 2018, 12:28:07 UTC
592ab62 BUG: Fix error in settings parsing In the normalization function, 2 settings are used: "normalizeScale" and "removeOutliers". However, the parsing at the start of the function used incorrect names. Apply a fix to ensure correct parsing. 21 September 2018, 12:24:33 UTC
423c666 Merge pull request #411 from JoostJM/add-maximal-correlation-coefficient ADD: Add GLCM Maximal Correlation Coefficient 21 September 2018, 10:53:36 UTC
4f73269 Merge pull request #425 from JoostJM/enhance-function-customization ENH: Change signature of customizable functions to use `kwargs` 20 September 2018, 12:06:21 UTC
f84c17f ENH: Change signature of customizable functions to use `kwargs` All functions that can be customized in the settings, or call functions that can be customized, now use a signature using `kwargs`, which will contain all customization specified in the `setting` section. Necessary elements are obtained using `get()` at the start of the function. This enables easier addition of new features (only needed to update validation and the function itself, which saves updating the calls to the function throughout pyradiomics). Additionally, this also allows users to replaces functions in PyRadiomics with their own, so long as it follows the same signature (but now does allow for additional/different customization arguments). 20 September 2018, 11:54:53 UTC
ec3b415 Merge pull request #426 from JoostJM/Bug-general-info BUG: Fix error in generation of provenance info with misaligned mask 17 September 2018, 12:27:04 UTC
7af844f STYL: Update naming of provenance info features Features providing diagnostic/provenance info are now encoded as diagnostics_<Type>_<Feature>. Here <Type> is either "Versions", "Configuration", "Image-<specifier>" or "Mask-<specifier>". In the latter 2 cases, the specifier indicates where in the preprocessing pipeline the image or mask is: "original" (as from file), "interpolated" (after resampling, only available if enabled), "corrected" (only mask, if mask correction was needed) and "resegmented" (only mask, if resegmentation is enabled). Finally <Feature> indicates the element in that particular group, e.g. "Size" for the x, y and z dimensions of the image or mask. 17 September 2018, 11:55:45 UTC
40070bb BUG: Fix error in generation of provenance info with misaligned mask When image and mask do not share an identical geometric space, the general info elements for ROI mean, minimum and maximum are incorrect. In case where the mask size does not match the image size, this even produces an error. Therefore, do not include the image prior to the image and mask geometry are ensured to be the same (this is only the case for the original mask, as the next step is either resampling (forcing similar geometry) or checkMask (comparing/correcting geometry)). Additionally, add spacing and size elements of the mask for comparison. 17 September 2018, 11:07:29 UTC
c285c15 BUG: Fix some small bugs in the baseline generation script 14 September 2018, 12:43:29 UTC
0a5a7d7 DOCS: Expand explanation of IMC 1 and 2 Also document the equality of HXY1 and HXY2 (both equal to HX + HY), and their relationship with mutual information (I = HX + HY - HXY). Add the expected ranges of values. Fix typos in the rendering of the MCC formula. 12 September 2018, 13:24:18 UTC
f4e9392 ADD: Add GLCM Maximal Correlation Coefficient Add the 14th Haralick feature to the GLCM. Add baseline for this feature and update documentation accordingly. Additionally, simplify eigenValue calculation in shape.py (instead of numpy.linalg.eigval, call numpy.linalg.eigvals, which only returns eigenvalues and not the eigenvectors (not used)). 12 September 2018, 13:24:18 UTC
7d919cf BUG: Fix error in general info generation (image elements) Min and max were reversed. 12 September 2018, 09:33:55 UTC
e4eaf85 Merge pull request #420 from JoostJM/update-resegmentation Extend resegmenting functionality 10 September 2018, 12:00:25 UTC
c44fa15 ENH: Update provenance info, use error raising Update the general info class, which will now be updated at multiple points in the extraction pipeline. This enables reflecting the various changes introduced by the pre-processing. Instead of returning "None" when checks fail, raise a ValueError. This removes the need for checking for "None" and ensures that the extraction is cancelled, with a warning message shown to the user. 10 September 2018, 11:27:17 UTC
b3a1504 ENH: Extend resegmenting functionality In addition to the original mode (now default mode "absolute"), add new modes "relative" and "sigma", which allow for a dynamic threshold defined as either a threshold relative to the maximum value found in the ROI ("relative") or as a n * sigma difference from the mean ("sigma"). Additionally, it is now allowed to provide either 1 or 2 thresholds, where in case of 1 threshold it is interpreted as the lower threshold (i.e. retaining everything equal to or higher than that threshold). In case the function fails, a ValueError is raised. The checks to determine the validity of the resegmented mask is not determined in this function, but is applied in the pipeline defined by featureextractor. 10 September 2018, 11:26:12 UTC
a4d0f8a Merge pull request #422 from JoostJM/publish-conda Publish conda 10 September 2018, 11:17:48 UTC
875e7b4 ENH: Only deploy from main repository 10 September 2018, 09:40:16 UTC
fec600a ENH: Enable upload to conda 07 September 2018, 15:19:29 UTC
be7464e ENH: Move conda configuration to separate bat/sh file 07 September 2018, 14:03:56 UTC
623b836 BUG: Fix incorrect check for minimum ROI dimensions. By using `<=`, also ROIs that had the same number of dimensions as minimum dimensions were excluded. Additionally, set the default value for required minimum dimensions to 2 (2D ROIs). 07 September 2018, 13:33:11 UTC
c39ea9c Test: Test packaging in Appveyor and Travis 07 September 2018, 11:51:02 UTC
d64ebab ADD: Add conda packaging Add a recipe for building a conda package for PyRadiomics. Update config.yml for CircleCI to test a script for automated building and uploading to Anaconda. Currently just builds the distributions, but does not upload them. 06 September 2018, 09:55:04 UTC
0fe737e DOCS: Update Readme and setup.py script setup.py - Add additional project urls - Add classifier python 3.6 Readme - Update docker section (include CLI docker, point to dockerhub, instead of building docker) - Update usage section on use of CLIs - Add new (optional) requirements, which are needed for LBP filters 29 August 2018, 09:20:33 UTC
bbf8238 v2.0.1 Release Update changelist and documentation. 29 August 2018, 08:20:28 UTC
f3ee994 Merge pull request #416 from JoostJM/add-center-of-mass Add center of mass (General Info) 28 August 2018, 11:56:26 UTC
217a840 BUG: Fix incorrect parsing of Label in batch file When a column "Label" has been specified in the batch input file, the value should be used for the extraction label. However, this is required to be an integer, whereas it may be parsed as string. Therefore, add a check to convert to integer if it is a string (and therefore not None). When extracting in parallel, info messages of each thread are filtered out of the console output. However, info messages from the script, e.g. detailing how long the extraction of a single patient took, should not be filtered out. In the batch script, this filter had the wrong logger name passed to the filter (radiomics.batch instead of radiomics.script). 28 August 2018, 09:53:22 UTC
917fadf Merge pull request #419 from JoostJM/bug-memory-leaks Fix memory leak in C extensions 27 August 2018, 14:23:38 UTC
ce20248 BUG: Fix memory leak in C extensions Since C functionality is implemented for the calculation of the angles, texture matrix calculation returns a tuple of the matrix and the angles. However, this uses Py_BuildValue with specifier "O", which increases the reference count, and thereby introduces a memory leak. Fix this by replacing "O" by "N", which has the same effect for the returned values, but does not increase the reference count. Moreover, the angles array is only needed for GLCM and GLRLM matrices. Therefore, only return the angles array in these 2 functions and free the array in the other functions. 27 August 2018, 13:47:16 UTC
69ccb7d Merge pull request #407 from JoostJM/simplify-glcm-features ENH: Simplify computation of various GLCM features 22 August 2018, 08:03:36 UTC
91405b0 ENH: Add center of mass Add a general info feature that computes the center of mass of the current ROI. Center of mass is computed in both continuous index coordinates (`getCenterOfMaskIndexValue`) and real-world coordinates (`getCenterOfMassValue`). 15 August 2018, 09:48:08 UTC
5e475ba Merge pull request #409 from JoostJM/bugfix-docker-cli BUG: Fix missing requirements in docker CLI file 14 August 2018, 08:44:50 UTC
09af9b5 BUG: Fix missing requirements in docker CLI file For the additional filters, PyRadiomics requires scikit-image, which in turn requires matplotlib. To install this package, freetype and libpng are needed. Install these as well. 13 August 2018, 11:31:27 UTC
fe0e2c3 DOCS: Update usage section on commandline usage Show correct way to specify output file in batch processing. Fix help message in the commandline script showing the default format (is "txt", but help message said "csv"). 13 August 2018, 10:06:37 UTC
1f16b9e ENH: Update warning message for checking ROI. 13 August 2018, 08:15:29 UTC
247bd6a ENH: Simplify computation of various GLCM features Inverse Difference, Inverse Difference Moment, Inverse Difference Normalized, Inverse Difference Moment Normalized and Inverse Variance all use a |i=j| element, which is equal to the k_diff. This enables the use of p_x-y (`pxSuby`) and k_diff (`kValuesDiff`), which are precomputed in `_calculateCoefficients`. Note that for Inverse Variance, the first element (k = 0) is skipped, in accordance with the constraint of i not equal to j in the formula. As `pxSuby` contains fewer elements and dimensions than `P_glcm`, replacing `P_glcm` by `pxSuby` and `numpy.abs(i-j)` by `kValuesDiff` simplifies the function, and less computations are required. Update the feature formulas in the documentation accordingly. The final calculated result should be identical (within machine precision), therefore the baseline does not need to be updated. 08 August 2018, 07:00:16 UTC
4ba909a STYL: Correct typo in IMC1 and 2 features (GLCM) Name should be informational measure of correlation instead of informal. 08 August 2018, 06:15:02 UTC
9f9361a REF: Add reference for the GLDM texture feature class 08 August 2018, 06:00:05 UTC
6b828e6 Merge pull request #405 from JoostJM/fix-wavelet-name-bug BUG: Fix an error in generating the approximation name for wavelet. 07 August 2018, 15:58:16 UTC
c8284bc Merge branch 'master' into fix-wavelet-name-bug 07 August 2018, 15:27:50 UTC
e47afb1 Merge pull request #404 from fedorov/fix-spacing ENH: fix the assigment of x and y pixel spacing 07 August 2018, 15:24:57 UTC
691812c BUG: Fix an error in generating the approximation name for wavelet. 07 August 2018, 13:52:31 UTC
e49133c ENH: fix the assigment of x and y pixel spacing Note that this issue has no effect on the calculation, but might be confusing to the developers, and also might cause problems later in case those are reused in a feature where order matters. 02 August 2018, 13:49:29 UTC
2a9fd79 BUG: fix invocation of numpy.histogram As noted in #399, numpy.histogram returns a tuple, appears that the index was missed earlier. 23 July 2018, 18:29:14 UTC
back to top