f0e18c1 | Joost van Griethuysen | 05 December 2018, 12:15:07 UTC | v2.1.2 Release | 05 December 2018, 12:15:07 UTC |
8061e7f | Joost van Griethuysen | 19 November 2018, 09:58:04 UTC | TYPO: Correct version number in README | 19 November 2018, 09:58:04 UTC |
f03145b | Andrey Fedorov | 17 November 2018, 03:14:36 UTC | BUG: uncomment algorithm details initialization This apparently was committed by accident earlier ... | 17 November 2018, 03:14:36 UTC |
2e60df1 | Joost van Griethuysen | 16 November 2018, 15:50:08 UTC | v2.1.1 Release | 16 November 2018, 15:50:08 UTC |
d8db675 | Joost van Griethuysen | 16 November 2018, 15:31:36 UTC | 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 | Andrey Fedorov | 13 November 2018, 16:16:51 UTC | 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 | Joost van Griethuysen | 12 November 2018, 10:32:27 UTC | 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 | Joost van Griethuysen | 12 November 2018, 10:16:06 UTC | 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 | Andrey Fedorov | 26 October 2018, 22:34:36 UTC | STYLE: fix flake8 error | 26 October 2018, 22:34:36 UTC |
3742735 | Andrey Fedorov | 26 October 2018, 22:22:12 UTC | 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 | Joost van Griethuysen | 22 October 2018, 12:26:08 UTC | Merge pull request #441 from JoostJM/thread-safe_logging Thread safe logging | 22 October 2018, 12:26:08 UTC |
d1a55eb | Joost van Griethuysen | 22 October 2018, 08:11:03 UTC | 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 | Andrey Fedorov | 19 October 2018, 21:30:56 UTC | 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 | Andrey Fedorov | 19 October 2018, 20:38:30 UTC | 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 | Andrey Fedorov | 19 October 2018, 20:36:45 UTC | 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 | Andrey Fedorov | 19 October 2018, 20:34:39 UTC | 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 | Andrey Fedorov | 19 October 2018, 01:44:25 UTC | 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 | Joost van Griethuysen | 11 October 2018, 06:05:06 UTC | 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 | Andrey Fedorov | 10 October 2018, 15:28:12 UTC | 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 | Joost van Griethuysen | 09 October 2018, 13:18:33 UTC | 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 | Andrey Fedorov | 09 October 2018, 20:00:21 UTC | 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 | Andrey Fedorov | 09 October 2018, 19:39:06 UTC | ENH: include pyradiomics identification and version | 19 October 2018, 20:52:56 UTC |
4038d98 | Andrey Fedorov | 08 October 2018, 17:55:36 UTC | STYLE: fix flake8 issues | 19 October 2018, 20:52:56 UTC |
3e2febf | Andrey Fedorov | 08 October 2018, 17:41:19 UTC | ENH: cleanup and reorganization Mapping of features to ISBI is added temporarily, pending resolution of #435 | 19 October 2018, 20:52:56 UTC |
f3b235e | Andrey Fedorov | 05 October 2018, 21:20:33 UTC | 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 | Joost van Griethuysen | 19 October 2018, 09:59:40 UTC | Merge pull request #410 from JoostJM/expand-feature-tests Expand feature tests | 19 October 2018, 09:59:40 UTC |
9f4eb63 | Joost van Griethuysen | 18 October 2018, 13:01:33 UTC | STYL: Fix flake8 errors | 18 October 2018, 13:01:33 UTC |
34667d0 | Joost van Griethuysen | 18 October 2018, 12:56:41 UTC | 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 | Joost van Griethuysen | 18 October 2018, 11:45:56 UTC | 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 | Joost van Griethuysen | 18 October 2018, 08:57:04 UTC | ENH: Do not catch KeyboardInterrupt and SystemExit errors | 18 October 2018, 08:57:04 UTC |
9d992fe | Joost van Griethuysen | 15 October 2018, 08:58:14 UTC | 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 | Joost van Griethuysen | 05 October 2018, 14:26:26 UTC | 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 | Joost van Griethuysen | 05 October 2018, 09:08:20 UTC | Merge pull request #433 from JoostJM/add-input-validation ENH: Implement input validation for PyRadiomics script | 05 October 2018, 09:08:20 UTC |
b9d5f26 | Joost van Griethuysen | 05 October 2018, 08:54:50 UTC | 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 | Joost van Griethuysen | 21 September 2018, 12:08:45 UTC | 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 | Joost van Griethuysen | 21 September 2018, 11:52:37 UTC | 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 | Joost van Griethuysen | 15 August 2018, 09:16:52 UTC | 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 | Joost van Griethuysen | 15 August 2018, 08:14:35 UTC | ENH: Update test package to new name nose-parameterized is deprecated. | 05 October 2018, 08:30:00 UTC |
84c01ff | Joost van Griethuysen | 15 August 2018, 08:14:08 UTC | 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 | Joost van Griethuysen | 03 October 2018, 14:47:16 UTC | Merge pull request #431 from JoostJM/force-cast-mask ENH: Implement force-cast while loading mask | 03 October 2018, 14:47:16 UTC |
e815a1a | Joost van Griethuysen | 02 October 2018, 13:53:19 UTC | 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 | Joost van Griethuysen | 02 October 2018, 15:47:06 UTC | 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 | Joost van Griethuysen | 01 October 2018, 11:19:38 UTC | 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 | Joost van Griethuysen | 02 October 2018, 15:10:36 UTC | 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 | Joost van Griethuysen | 28 September 2018, 14:28:18 UTC | v2.1.0 Release | 28 September 2018, 14:28:18 UTC |
14809a5 | Joost van Griethuysen | 28 September 2018, 11:22:11 UTC | Merge pull request #427 from JoostJM/mesh-volume Mesh volume and diameters | 28 September 2018, 11:22:11 UTC |
263e8b3 | Joost van Griethuysen | 27 September 2018, 12:59:35 UTC | 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 | Joost van Griethuysen | 21 September 2018, 08:02:39 UTC | TEST: Update baseline | 28 September 2018, 10:52:02 UTC |
7fd96f2 | Joost van Griethuysen | 21 September 2018, 08:02:24 UTC | 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 | Joost van Griethuysen | 18 September 2018, 15:47:15 UTC | 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 | Joost van Griethuysen | 28 September 2018, 08:34:11 UTC | 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 | Joost van Griethuysen | 28 September 2018, 08:44:10 UTC | 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 | Joost van Griethuysen | 27 September 2018, 13:05:47 UTC | 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 | Joost van Griethuysen | 25 September 2018, 10:06:01 UTC | 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 | Joost van Griethuysen | 24 September 2018, 09:39:17 UTC | 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 | Joost van Griethuysen | 21 September 2018, 12:59:30 UTC | Typo: Remove duplicate key in example "shape" feature class was listed twice. | 21 September 2018, 12:59:30 UTC |
a59861e | Joost van Griethuysen | 21 September 2018, 12:46:23 UTC | 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 | Joost van Griethuysen | 21 September 2018, 12:28:07 UTC | 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 | Joost van Griethuysen | 21 September 2018, 12:24:33 UTC | 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 | Joost van Griethuysen | 21 September 2018, 10:53:36 UTC | Merge pull request #411 from JoostJM/add-maximal-correlation-coefficient ADD: Add GLCM Maximal Correlation Coefficient | 21 September 2018, 10:53:36 UTC |
4f73269 | Joost van Griethuysen | 20 September 2018, 12:06:21 UTC | 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 | Joost van Griethuysen | 14 September 2018, 12:53:25 UTC | 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 | Joost van Griethuysen | 17 September 2018, 12:27:04 UTC | 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 | Joost van Griethuysen | 17 September 2018, 11:55:45 UTC | 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 | Joost van Griethuysen | 17 September 2018, 11:07:29 UTC | 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 | Joost van Griethuysen | 12 September 2018, 15:53:16 UTC | BUG: Fix some small bugs in the baseline generation script | 14 September 2018, 12:43:29 UTC |
0a5a7d7 | Joost van Griethuysen | 23 August 2018, 15:34:41 UTC | 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 | Joost van Griethuysen | 22 August 2018, 14:29:26 UTC | 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 | Joost van Griethuysen | 12 September 2018, 09:33:55 UTC | BUG: Fix error in general info generation (image elements) Min and max were reversed. | 12 September 2018, 09:33:55 UTC |
e4eaf85 | Joost van Griethuysen | 10 September 2018, 12:00:25 UTC | Merge pull request #420 from JoostJM/update-resegmentation Extend resegmenting functionality | 10 September 2018, 12:00:25 UTC |
c44fa15 | Joost van Griethuysen | 28 August 2018, 15:03:08 UTC | 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 | Joost van Griethuysen | 28 August 2018, 12:45:05 UTC | 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 | Joost van Griethuysen | 10 September 2018, 11:17:48 UTC | Merge pull request #422 from JoostJM/publish-conda Publish conda | 10 September 2018, 11:17:48 UTC |
875e7b4 | Joost van Griethuysen | 07 September 2018, 15:55:02 UTC | ENH: Only deploy from main repository | 10 September 2018, 09:40:16 UTC |
fec600a | Joost van Griethuysen | 07 September 2018, 14:31:17 UTC | ENH: Enable upload to conda | 07 September 2018, 15:19:29 UTC |
be7464e | Joost van Griethuysen | 07 September 2018, 13:16:36 UTC | ENH: Move conda configuration to separate bat/sh file | 07 September 2018, 14:03:56 UTC |
623b836 | Joost van Griethuysen | 07 September 2018, 13:33:11 UTC | 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 | Joost van Griethuysen | 06 September 2018, 11:35:19 UTC | Test: Test packaging in Appveyor and Travis | 07 September 2018, 11:51:02 UTC |
d64ebab | Joost van Griethuysen | 05 September 2018, 13:39:48 UTC | 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 | Joost van Griethuysen | 29 August 2018, 09:20:33 UTC | 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 | Joost van Griethuysen | 29 August 2018, 08:20:28 UTC | v2.0.1 Release Update changelist and documentation. | 29 August 2018, 08:20:28 UTC |
f3ee994 | Joost van Griethuysen | 28 August 2018, 11:56:26 UTC | Merge pull request #416 from JoostJM/add-center-of-mass Add center of mass (General Info) | 28 August 2018, 11:56:26 UTC |
217a840 | Joost van Griethuysen | 28 August 2018, 09:53:22 UTC | 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 | Joost van Griethuysen | 27 August 2018, 14:23:38 UTC | Merge pull request #419 from JoostJM/bug-memory-leaks Fix memory leak in C extensions | 27 August 2018, 14:23:38 UTC |
ce20248 | Joost van Griethuysen | 27 August 2018, 13:25:14 UTC | 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 | Joost van Griethuysen | 22 August 2018, 08:03:36 UTC | Merge pull request #407 from JoostJM/simplify-glcm-features ENH: Simplify computation of various GLCM features | 22 August 2018, 08:03:36 UTC |
91405b0 | Joost van Griethuysen | 28 November 2017, 10:26:37 UTC | 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 | Joost van Griethuysen | 14 August 2018, 08:44:50 UTC | 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 | Joost van Griethuysen | 13 August 2018, 11:31:27 UTC | 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 | Joost van Griethuysen | 13 August 2018, 10:06:37 UTC | 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 | Joost van Griethuysen | 13 August 2018, 08:15:29 UTC | ENH: Update warning message for checking ROI. | 13 August 2018, 08:15:29 UTC |
247bd6a | Joost van Griethuysen | 08 August 2018, 07:00:16 UTC | 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 | Joost van Griethuysen | 08 August 2018, 06:15:02 UTC | 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 | Joost van Griethuysen | 08 August 2018, 06:00:05 UTC | REF: Add reference for the GLDM texture feature class | 08 August 2018, 06:00:05 UTC |
6b828e6 | Joost van Griethuysen | 07 August 2018, 15:58:16 UTC | 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 | Andrey Fedorov | 07 August 2018, 15:27:50 UTC | Merge branch 'master' into fix-wavelet-name-bug | 07 August 2018, 15:27:50 UTC |
e47afb1 | Andrey Fedorov | 07 August 2018, 15:24:57 UTC | 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 | Joost van Griethuysen | 07 August 2018, 13:45:02 UTC | BUG: Fix an error in generating the approximation name for wavelet. | 07 August 2018, 13:52:31 UTC |
e49133c | Andrey Fedorov | 02 August 2018, 13:49:29 UTC | 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 | Andrey Fedorov | 23 July 2018, 18:29:14 UTC | 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 |