c0555c6 | Joost van Griethuysen | 13 June 2018, 15:40:08 UTC | Merge pull request #387 from JoostJM/add_wavelet_tests TEST: Add wavelet test | 13 June 2018, 15:40:08 UTC |
4803cb7 | Joost van Griethuysen | 13 June 2018, 08:16:39 UTC | BUG: Fix missing packages in Dockerfile To enable local binary pattern 2D and 3D, scipy, scikit-image and trimesh are additionally required, but these are not mentioned in the requirements (to allow installing without these packages). To enable these filters in the CLI-docker, add pip install lines for these packages to the dockerfile. | 13 June 2018, 08:16:39 UTC |
da7321d | Joost van Griethuysen | 13 June 2018, 08:03:25 UTC | TYPO: Fix typo in formula of firstorder-Uniformity A higher uniformity indicates a more homogeneous distribution of gray values instead of a more heterogeneous one. | 13 June 2018, 08:03:25 UTC |
aef949f | Joost van Griethuysen | 11 January 2018, 22:33:47 UTC | TEST: Add wavelet test Add a test to check if precropping and different size input images still produce the same output for the wavelet filter. This test uses 2 new test cases that have been added to the 1.0.0 release of PyRadiomics and enabled for download by `getTestCase()`. Additionally ensures temporal consistency by using a baseline file that defines the 1D-array of voxels in the ROI for each wavelet level (This array can be obtained by slicing the image array with a boolean cast of the mask array). The baseline is generated using the large (64x64x64) image without pre cropping. The function to generate this baseline is added to `add_baseline.py`. Finally, apply some style changes to the other test files to make them more consistent with pyradiomics style. Supersedes #348. | 05 June 2018, 11:01:52 UTC |
7e5f75d | Joost van Griethuysen | 11 January 2018, 22:33:47 UTC | DOCS: Update release notes | 05 June 2018, 08:49:49 UTC |
4464d1c | Joost van Griethuysen | 11 January 2018, 22:33:47 UTC | REF: Add references to new filters Add refrences to 2D and 3D Local Binary Pattern and Gradient (Magnitude) filter. Add new filters and feature classes in the ReadMe documentation. Fix to short title underling in FAQ documentation | 05 June 2018, 08:11:00 UTC |
e6435e7 | Joost van Griethuysen | 04 June 2018, 14:39:59 UTC | Merge pull request #337 from JoostJM/add-voxel-based-calculation ADD: Add voxel-based extraction | 04 June 2018, 14:39:59 UTC |
233b486 | JoostJM | 11 January 2018, 22:33:47 UTC | BUG: Fix broken tests Due to some API changes, continuous testing was reporting some errors: - Fix a flake8 coding style error in `base.py` - Add a call to `_initCalculation` in `test_cmatrices.py` to ensure feature classes are correctly initialized prior to calculating texture matrices - Update call in `test_features.py` to `execute` (reflecting API change) | 04 June 2018, 13:16:55 UTC |
fafe8c5 | Joost van Griethuysen | 11 January 2018, 22:33:47 UTC | ADD: Add customizable initialization value for voxel based extraction Add optional customization of the initialization value for the output arrays when calculating features voxel based. By default this value is 0, but any float is allowed. Additionally, change the name of the variable holding the customization settings in the feature classes from `kwargs` to `settings`. This better reflects what the variable holds and is similar to the variable name in the featureextractor module. | 04 June 2018, 13:14:33 UTC |
671acf5 | Joost van Griethuysen | 11 January 2018, 20:48:20 UTC | Update examples to reflect new API Only abstract feature class API is changed, so only the examples that work with the feature classes directly need be updated. | 04 June 2018, 13:11:20 UTC |
9aa5305 | Joost van Griethuysen | 11 January 2018, 21:36:24 UTC | ADD: Add example to show new voxel based functionality Add example settings for voxel based extraction. Add helloVoxel example to extract a parameter map from a test case. | 04 June 2018, 13:11:20 UTC |
4f9ab6b | Joost van Griethuysen | 11 January 2018, 20:02:30 UTC | ADD: Add voxel-based extraction Add a voxel based extraction, which outputs a dictionary of SimpleITK images instead of float values. Each voxel in the returned image represent the respective feature value for that region. The local region can be defined as 'masked' or 'unmasked'. In unmasked mode, the region is defined as a cube with radius `kernelRadius` around the voxel: the kernel. If part of the kernel is outside of the image bounds, those parts are excluded. In masked mode, the kernel is defined similar to unmasked mode, with additional exclusion of voxels that are outside the masked area (ROI). This change also slightly changes the moment of several instantiation. In previous version, the the texture matrices in glcm, glrlm, etc. were calculated during initialization of the class. However, because for the voxel-based extraction they have to be calculated separately for each voxel, this functionality has been moved to the top of the `_calculateFeatures` (which runs when the features are acutally calculated). N.B. This changes the API to the abstract feature class. Features are now extracted by a call to `execute` instead of `calculateFeatures`. In addition to a name change, `execute` also directly returns the result (similar to usage of the feature extractor class). As before, calculated results remain available in the class under the `featureValues` attribute. Adds a new section to the parameter file to allow customization of voxel-based extraction specific settings. TODO: - Update examples to reflect API change - Add functionality in feature extractor module to make voxel based extraction available - Write new examples to reflect new functionality | 04 June 2018, 13:10:27 UTC |
1b0eb74 | Joost van Griethuysen | 31 May 2018, 13:55:03 UTC | Merge pull request #373 from JoostJM/remove-python-equivalents-for-c-functions Remove python equivalents for c functions | 31 May 2018, 13:55:03 UTC |
06bc744 | Joost van Griethuysen | 31 May 2018, 13:54:46 UTC | Merge pull request #375 from tommydino93/patch-1 -swt3 comments | 31 May 2018, 13:54:46 UTC |
81dd0c1 | tommydino93 | 18 April 2018, 12:16:03 UTC | Update imageoperations.py | 18 April 2018, 12:16:03 UTC |
48c2bcd | tommydino93 | 18 April 2018, 12:06:09 UTC | Update imageoperations.py | 18 April 2018, 12:06:09 UTC |
fb166ac | tommydino93 | 18 April 2018, 11:28:08 UTC | Update imageoperations.py | 18 April 2018, 11:28:08 UTC |
597750b | tommydino93 | 18 April 2018, 07:57:50 UTC | Update imageoperations.py | 18 April 2018, 07:57:50 UTC |
dd75c92 | tommydino93 | 17 April 2018, 15:04:43 UTC | -swt3 comments I have just added some comments to the method _swt3 which is called inside the method getWaveletImage | 17 April 2018, 15:04:43 UTC |
0c80bdb | Joost van Griethuysen | 11 April 2018, 14:17:02 UTC | STYL: Fix Flake8 errors | 11 April 2018, 14:20:27 UTC |
9899db3 | Joost van Griethuysen | 27 March 2018, 10:00:57 UTC | ENH: Remove Python equivalents for C extension functionality Remove Python Texture matrix calculation: - GLCM - GLRLM - GLSZM - GLDM - NGTDM Remove Python surface area calculation Remove Python `GenerateAngles()` Remove parameters associated with enabling/disabling C Extensions Update warning messages displayed when C extensions fail to load. Update examples. Update documentation. | 11 April 2018, 14:01:45 UTC |
80ca820 | Joost van Griethuysen | 27 March 2018, 08:37:07 UTC | ENH: Update Matrices test script Remove Python calculation from `test_cmatrices.py`. Instead, compare to baseline files (binary numpy array files). Additionally, rename the script to `test_matrices.py`. Update and move the script to add a new baseline to the tests folder, so that it can utilize the testUtils module during generation of a new baseline. The updates now include the generation of a baseline matrix file if the class contains the appropriate function (`_calculateCMatrix`). | 11 April 2018, 14:01:45 UTC |
974a734 | Joost van Griethuysen | 09 April 2018, 08:04:02 UTC | Merge pull request #369 from fedorov/fix-std-formula Fix std formula | 09 April 2018, 08:04:02 UTC |
ca645d6 | Andrey Fedorov | 05 April 2018, 18:55:04 UTC | STYLE: fix syntax in feature formula documentation | 05 April 2018, 18:55:04 UTC |
72e02d4 | Andrey Fedorov | 05 April 2018, 18:50:52 UTC | STYLE: fix feature documentation formula syntax | 05 April 2018, 18:51:18 UTC |
11f5b5d | Joost van Griethuysen | 04 April 2018, 14:42:45 UTC | Merge pull request #366 from JoostJM/update-c-functions Update c functions | 04 April 2018, 14:42:45 UTC |
c559171 | Joost van Griethuysen | 26 March 2018, 15:39:11 UTC | ENH: Update/Simplify C functions for shape Ensure consistency between C functions in shape and texture, move common functionality to separate function (various checks to ensure validity of input). Also remove use of Deprecated Numpy API functions and define the constant to enforce this. Surface Area Simplify function by removing interpolation (also removes the need for the edgeTable). This can be done as the point on the edge is always 0.5 (corner is always either 0 or 1 as it represents a binary mask). Apply a similar fix to the python calculation of surface area. Diameters Implement a simplified and customized function to generate angles, which are needed to find all border voxels. Additionally, skip checking unnecessary indices (as mask is padded with 0's). | 28 March 2018, 14:07:14 UTC |
382b4fd | Joost van Griethuysen | 26 March 2018, 15:36:09 UTC | ENH: Switch to C generated angles Add a function in C to generate angles and implement this directly in the C functions to calculate the texture matrices. As the angles are sometimes needed to determine weights to apply to the matrices, generated angles are also returned by the C function; i.e. a tuple as (matrix, angles). | 26 March 2018, 15:36:09 UTC |
7241bd0 | Joost van Griethuysen | 22 March 2018, 12:11:25 UTC | STYL: Refactor / simplify C extensions Ensure all C extensions use similar signatures where possible (e.g. work with pointers for sizes, use strides extracted from the numpy array descriptions). This includes a bug fix in GLSZM calculation, where the newly created output array was not initialized with 0's. Additionally, add extra tests for the angles array: ensure that the shape is (Na, 3) and move this testing functionality to a separate function (as the same function can then be reused by all C extensions for texture matrices. Finally, factor out use of deprecated Numpy C API functions and add define to disable deprecated API. | 26 March 2018, 15:35:00 UTC |
ea9a6ce | Joost van Griethuysen | 26 March 2018, 08:24:50 UTC | DOCS: Fix typo in NGTDM example | 26 March 2018, 08:24:50 UTC |
38c3fb6 | Joost van Griethuysen | 21 March 2018, 10:10:30 UTC | Merge pull request #364 from JoostJM/imagetype-bug Update the validation rule for image types | 21 March 2018, 10:10:30 UTC |
665e9bc | Joost van Griethuysen | 21 March 2018, 09:22:05 UTC | BUG: Update the validation rule for image types Before, available filters were hard coded in the `paramSchema.yaml`, requiring the developer to add any new filters explicitly. Change this to use a schema validation rule which checks against the result of `getImageTypes`, which dynamically enumerates the available filters. Additionally, by applying a regex matching rule that matches any key, the validation rule to test the custom settings is retained. | 21 March 2018, 09:22:05 UTC |
62b3cbd | Joost van Griethuysen | 14 March 2018, 15:45:10 UTC | Merge pull request #357 from JoostJM/add-lbp Add Local Binary Pattern Image Filter | 14 March 2018, 15:45:10 UTC |
9914251 | Joost van Griethuysen | 08 March 2018, 10:37:27 UTC | ADD: Add 3D implementation of Local Binary Pattern Uses spherical harmonics implemented in `scipy` and defines an icosphere (implemented in `trimesh`) to sample neighbours. Derived images are returned for each level, with an additional derived image for the kurtosis. To reduce computation time/cost, LBP is only calculated for voxels included in the segmentation. To implement this, the signature of a filter function is changed (in addition to the image, the mask is also passed to the function). Update the examples, feature extractor and documentation accordingly. | 14 March 2018, 14:59:34 UTC |
8777b55 | Joost van Griethuysen | 07 March 2018, 15:32:47 UTC | DOC: Update documentation style of feature classes | 14 March 2018, 14:58:11 UTC |
ec009e9 | Joost van Griethuysen | 07 March 2018, 14:46:22 UTC | ADD: Add and document a 2D implementation of Local Binary Pattern Requires `skimage` to function. `skimage` is not added to the requirements and only imported when the function is called. If the package is unavailable, a warning is logged and no image is yielded (does not crash the extraction, but no features for LBP are calculated) | 14 March 2018, 14:58:11 UTC |
947c48f | Joost van Griethuysen | 14 March 2018, 14:56:29 UTC | Merge pull request #356 from JoostJM/add-gradient-filter Add the Gradient Magnitude image filter. | 14 March 2018, 14:56:29 UTC |
d87f9f3 | Joost van Griethuysen | 08 March 2018, 12:25:54 UTC | DOC: Add Gradient filter to documentation | 13 March 2018, 09:10:07 UTC |
3e4bd2d | Joost van Griethuysen | 07 March 2018, 12:01:10 UTC | ADD: Add the Gradient Magnitude image filter. Returns an image with the gradient magnitude as voxel value. Adds parameter `gradientUseSpacing`, which controls whether or not to take image spacing into account when computing the gradient. | 13 March 2018, 09:10:07 UTC |
de34dce | Joost van Griethuysen | 13 March 2018, 09:08:43 UTC | Merge pull request #353 from JoostJM/update-testing Update testing | 13 March 2018, 09:08:43 UTC |
d7447de | Joost van Griethuysen | 08 March 2018, 13:27:52 UTC | ENH: Further update getTestCase() function No further changes to the interface are made. However, if `dataDirectory` is specified and no test cases can be found there, it subsequently downloads testcases into that directory. This allows users to get test cases easily, but store them locally (not in a temporary directory). If no directory is supplied, the temporary directory is used. Attempts to create the directory if they don't already exist. | 08 March 2018, 13:27:52 UTC |
61e82ca | Joost van Griethuysen | 07 March 2018, 15:44:11 UTC | STYL: Fix Flake8 errors | 08 March 2018, 12:27:24 UTC |
b447fa4 | Joost van Griethuysen | 07 March 2018, 15:36:39 UTC | BUG: Update test_cmatrices to new interface | 08 March 2018, 12:27:24 UTC |
617ddcc | Joost van Griethuysen | 06 March 2018, 16:53:15 UTC | ENH: Reconfigure tests Allows for multiple configurations using the same test cases (e.g. force2D extraction, weighting). Also redefines the structure of the baseline files, as this allows for better tracking of changes. | 08 March 2018, 12:27:24 UTC |
ca94c9e | Joost van Griethuysen | 06 March 2018, 14:40:40 UTC | ENH: Update the getTestCase() function Test data is now available als binary data attached to the v1.0 release. Update the `getTestCase()` function to retrieve images from this location (does not use the `data` directory anymore) and update the use of this function in the examples and testing scripts. If data is available locally, this can still be used by passing it to the `getTestCase()` function, but it is not used in the repository anymore (allows for removal of the test cases from the repository itself to speed up cloning/downloading. See also #60. | 08 March 2018, 12:27:24 UTC |
dffb440 | Joost van Griethuysen | 08 March 2018, 06:18:04 UTC | Merge pull request #347 from JoostJM/refactor-clis ENH: Refactor CLI scripts | 08 March 2018, 06:18:04 UTC |
010db6e | Joost van Griethuysen | 07 March 2018, 15:24:02 UTC | Merge pull request #351 from JoostJM/ngtdm-feature-fix BUG: Fix formula error in NGTDM's Complexity and Contrast | 07 March 2018, 15:24:02 UTC |
5358d21 | Joost van Griethuysen | 07 March 2018, 10:43:02 UTC | Merge pull request #355 from JoostJM/eigenvalue-bug BUG: Fix machine precision errors in eigen value calculation | 07 March 2018, 10:43:02 UTC |
655f269 | Joost van Griethuysen | 07 March 2018, 10:17:02 UTC | DOC: Update changelog | 07 March 2018, 10:17:02 UTC |
f75bfce | Joost van Griethuysen | 07 March 2018, 10:14:34 UTC | BUG: Fix machine precision errors in eigen value calculation If the segmentation in the dataset represents a 2D segmentation, the smallest of the 3 eigenvectors should be 0. But because a transform to physical coordinates (taking into account rotation and scaling), this can actually compute very small (~1e-16) negative numbers. This in turn causes an error in numpy.sqrt. This commit implements a 3-fold fix. 1) Because we do not need the eigen vectors, we can also calculate the eigenvalues using just the scaled coordinates, without rotation. In case of a 2D segmentation, this then results in correct calculation of 0 for the smallest eigen value. 2) After computation of eigen values. They are checked if they are negative, but > -1e-10. If that is the case, a warning is logged and they are rounded to 0. 3) Add additional checks to ensure the eigenvectors are not < 0 (effectively < -1e-10) in the feature functions. If that is the case, a warning is logged and nan is returned. | 07 March 2018, 10:14:34 UTC |
940ea94 | Joost van Griethuysen | 06 March 2018, 12:38:41 UTC | DOCS: Update release notes and baseline | 06 March 2018, 12:38:41 UTC |
4af8364 | Joost van Griethuysen | 19 February 2018, 12:09:12 UTC | BUG: Fix formula error in NGTDM's Complexity and Contrast Erroneously divided by the square of number of voxels, instead of just the number of voxels. Additionally, use the number of voxels with at least 1 neighbor, which is lesser equal to the total number of voxels in the ROI (exclude voxels without neigbors). Update documentation accordingly | 06 March 2018, 12:29:47 UTC |
1af2eff | Joost van Griethuysen | 06 March 2018, 12:29:00 UTC | DOCS: Update release notes | 06 March 2018, 12:29:00 UTC |
0f16cd2 | Joost van Griethuysen | 02 March 2018, 09:05:32 UTC | DOCS: Update documentation for new entry point style. Additionally, re-add the `pyradiomicsbatch` as a deprecated entry point to preserve legacy functionality. Also re-add the `--label` argument as a deprecated argument in the `pyradiomics` entry point. | 02 March 2018, 09:05:32 UTC |
dd7c445 | Joost van Griethuysen | 21 February 2018, 17:23:29 UTC | ENH: Refactor CLI scripts Combine the `pyradiomics` and `pyradiomicsbatch` entry point into 1 joint entry point `pyradiomics`. This new entry point operates in batch mode when input to `Image|Batch` has `.csv` extension. In batch mode, `Mask` argument is ignored. In single mode `Mask` inputs is required. Additionally, enables easy multi-threaded extraction by specifying `--jobs` / `-j` argument (with integer indicating number of parallel threads to use. Will only work in batch mode, as extraction is multi-threaded at the case level (1 thread per case). Removes argument `--label` / `-l`, specifying an override label to use is now achieved through specifying `-s "label:N"`, with N being the label value. Also includes a small update to initialization of the feature extractor: - In addition to a string pointing to a parameter file, feature extractor now also accepts a dictionary (top level specifies customization types 'setting', 'imageType' and 'featureClass') as 1st positional argument - Regardless of initialization with or without a customization file/dictionary, `kwargs` passed to the constructor are used to override settings. | 22 February 2018, 13:28:51 UTC |
2e6d2c1 | Joost van Griethuysen | 21 February 2018, 16:22:28 UTC | Merge pull request #346 from michaelschwier/resize_bug BUG: Fixed resizing for wavelet filtering (resizing was scrambling image) | 21 February 2018, 16:22:28 UTC |
67845cf | Michael Schwier | 21 February 2018, 15:54:03 UTC | ENH: changed pad mode from constant to wrap | 21 February 2018, 15:54:03 UTC |
bc9f0fd | Joost van Griethuysen | 21 February 2018, 15:47:31 UTC | Merge pull request #345 from JoostJM/add-filter-formulas DOCS: Add formula for LoG | 21 February 2018, 15:47:31 UTC |
00408d0 | Joost van Griethuysen | 20 February 2018, 10:00:00 UTC | DOCS: Add ITK reference to LoG-filter documentation Additionally, update the title overlines in installation.rst to match the title (style error). | 20 February 2018, 10:00:00 UTC |
7ff0548 | Michael Schwier | 16 February 2018, 20:05:49 UTC | BUG: Fixed resizing for wavelet filtering. Resizing does not scramble image anymore. (bugfix courtesy of Jan Moltz/Fraunhofer MEVIS) | 16 February 2018, 20:05:49 UTC |
8b39b51 | Joost van Griethuysen | 17 March 2017, 08:22:04 UTC | DOCS: Add formula for LoG Add documentation with formulas defining the LoG filter. | 15 February 2018, 10:00:00 UTC |
8c7dd45 | Joost van Griethuysen | 30 January 2018, 12:13:42 UTC | Merge pull request #342 from JoostJM/add-package-versions DOCS: Add version of packages used in feature calculation | 30 January 2018, 12:13:42 UTC |
c7c5d2e | Joost van Griethuysen | 30 January 2018, 11:11:15 UTC | BUG: Fix incorrect path in helloRadiomicsWithSettings.py Path in L79 was build using a hardcoded `\`, which only works on windows. Fix this error by implementing a call to `os.path.join`. | 30 January 2018, 11:11:15 UTC |
cb321f5 | Joost van Griethuysen | 24 January 2018, 15:07:06 UTC | DOCS: Add version of packages used in feature calculation Add versions of SimpleITK, Numpy and PyWavelet to the additional info output. PyRadiomics uses these 3 packages to process the images and calculate the features. | 24 January 2018, 15:07:06 UTC |
ed9e300 | Joost van Griethuysen | 15 January 2018, 13:10:48 UTC | BUG: Update paths in testCases.csv Update the paths in the testCases file to use `/` instead of `\`. This fixes loading the testcases using this file on Linux and Mac. | 15 January 2018, 13:12:02 UTC |
9420a45 | Joost van Griethuysen | 10 January 2018, 22:20:14 UTC | Merge pull request #334 from JoostJM/add-json-configuration Add json configuration | 10 January 2018, 22:20:14 UTC |
85a367b | Joost van Griethuysen | 10 January 2018, 17:44:14 UTC | DOCS: Update customization section Make the customization section more readable by using a different format for the settings names. Add a back reference in the parameter file section, pointing back to the customization section (provides the exhaustive list of possible settings etc.) | 10 January 2018, 17:44:14 UTC |
ed19f0b | Joost van Griethuysen | 10 January 2018, 17:37:44 UTC | ENH: Add support for JSON configuration string Add a function (`LoadJSONParams`) in the featureextractor, which accepts a JSON formatted string. This string will then be validated similar to a parameter file and if successful, used to customize the extraction. | 10 January 2018, 17:37:44 UTC |
e6886e2 | Andrey Fedorov | 09 January 2018, 03:41:24 UTC | Merge pull request #333 from fedorov/fix-travisci BUG: add pip link | 09 January 2018, 03:41:24 UTC |
5f244f2 | Andrey Fedorov | 09 January 2018, 02:12:15 UTC | BUG: add pip link As suggested by @jcfr in https://github.com/Radiomics/pyradiomics/pull/332#issuecomment-356097814 | 09 January 2018, 02:12:15 UTC |
5e1d7a6 | Andrey Fedorov | 09 January 2018, 02:10:38 UTC | Merge pull request #329 from fedorov/add-docker-instructions ENH: update installation instructions | 09 January 2018, 02:10:38 UTC |
e174424 | Andrey Fedorov | 03 January 2018, 17:26:33 UTC | ENH: add instructions on how to generate sphinx documentation | 03 January 2018, 17:26:33 UTC |
9c01e5f | Andrey Fedorov | 03 January 2018, 17:23:29 UTC | ENH: add docker setup instructions | 03 January 2018, 17:23:29 UTC |
a9bff5d | Andrey Fedorov | 28 December 2017, 22:17:09 UTC | ENH: update installation instructions Add instructions for 3D Slicer extension and Docker approaches. | 28 December 2017, 22:17:09 UTC |
fb7590c | Joost van Griethuysen | 20 December 2017, 10:53:27 UTC | DOCS: Make link to google groups forum more visible | 20 December 2017, 10:53:27 UTC |
2504f45 | Joost van Griethuysen | 15 November 2017, 13:07:55 UTC | STYL: Correct Flake8 errors | 15 November 2017, 13:07:55 UTC |
0257217 | Joost van Griethuysen | 15 November 2017, 10:51:13 UTC | BUG: Fix error handling for image/mask mismatch In `imageoperations.checkMask` and error is thrown if the image and mask do not align or contain tolerance errors. The error message is caught and parsed to provide users with a more insightful message providing potential solutions. However, this was done by evaluating the `message` attribute of the RunTimeError thrown by SimpleITK. This attribute is present in python 2, but not in python 3. Instead, use `args[0]` attribute, which contains the message, and is present in both python 2 and 3. | 15 November 2017, 10:51:13 UTC |
6ac3bb8 | Joost van Griethuysen | 02 November 2017, 09:24:07 UTC | Merge pull request #323 from JoostJM/wavelet-update Simplify Wavelet filter function | 02 November 2017, 09:24:07 UTC |
b395904 | Joost van Griethuysen | 01 November 2017, 15:46:09 UTC | REF: Update reference to official publication. | 01 November 2017, 15:46:09 UTC |
71ed68d | Joost van Griethuysen | 31 October 2017, 15:58:24 UTC | ENH: Simplify Wavelet filter function PyWavelets package supports applying wavelets sequentially along multiple axes, therefore there is no need for reslicing the (partially filtered) data using python functions. This reduces a lot of complexity in the code and also includes a higher performance of the filter. Additionally, allow for 2D application of wavelets when `force2D` is set to `True`, where no wavelet will be applied along the `force2Ddimension`. | 01 November 2017, 15:23:45 UTC |
8f283a5 | Joost van Griethuysen | 01 November 2017, 15:21:57 UTC | Merge pull request #319 from JoostJM/change-filter-coefficients Change calculation of filter correction coefficients | 01 November 2017, 15:21:57 UTC |
209019b | Joost van Griethuysen | 01 November 2017, 15:21:42 UTC | Merge pull request #320 from JoostJM/binwidth-explained Add explanation on enforcing a bin width | 01 November 2017, 15:21:42 UTC |
b5e6081 | Joost van Griethuysen | 30 October 2017, 09:10:50 UTC | Merge pull request #321 from JoostJM/duplicate_features Remove duplicate features | 30 October 2017, 09:10:50 UTC |
91f3820 | Joost van Griethuysen | 27 October 2017, 14:24:12 UTC | BUG: Fix incorrect reference in addClassToBaseline.py The addClassToBaseline disables all image types and then enables just the `Original` image type, but did this using the old names for the needed functions. Update the names to reflect changes made to `featureextractor.py` | 27 October 2017, 14:24:12 UTC |
18ffb41 | Joost van Griethuysen | 27 October 2017, 14:17:33 UTC | BUG: Prevent testing of deprecated features Unit testing determined test to run by checking all features that are contained in the feature class, but this also includes the deprecated features. Change test case generation to use the list of features for which there is the baseline (in current class and current test case). Additionally, check if these baseline features include tests for all non-deprecated features. Change the `getFeatureNames` function in `base.py` to generate a dictionary instead of a list: the key is the feature name, and the value is a boolean indicating if the feature is deprecated (`True`). | 27 October 2017, 14:17:33 UTC |
3f8feea | Joost van Griethuysen | 26 October 2017, 17:03:26 UTC | TEST: Remove deprecated features from baseline Remove deprecated features from baseline, these are not calculated anymore. Features that are not removed, but only marked as redundant / deprecated are still included in the unit tests (and baseline). | 26 October 2017, 17:03:26 UTC |
54232d3 | Joost van Griethuysen | 26 October 2017, 16:56:55 UTC | ENH: Add "deprecated" decorator Add "deprecated" decorator to mark (feature) functions as being deprecated. This will add an `_is_deprecated` attribute to the function object (value will be `True`). When a feature function has this attribute (and set to `True`), this feature will not be enabled by default (i.e. when no individual features for that class are specified, or when all classes are enabled, again, without specifying individual features). These features can still be enabled by specifying them as individual features. Some features are deprecated, but also return a deprecation warning. This is also included in the documentation. | 26 October 2017, 16:56:55 UTC |
52e55bf | Joost van Griethuysen | 26 October 2017, 15:51:08 UTC | STYL: Re-add duplicate features as deprecated features Re-add the feature calculation functions for the duplicate features, but instead of returning a result, raise a `DeprecationWarning` exception, which is handled in the base class. This will not add the deprecated feature to the returned results, but log a warning to notify the user of the duplicity. Additionally, for features with certain important assumptions, add warning messages to the log when these assumtions are not met: - Joint Average, if the GLCM is not symmetrical - Sum of Squares, if the GLCM is not symmetrical - Sum Average, if the GLCM IS symmetrical (as it is then equal to 2 * Joint Average) | 26 October 2017, 15:51:08 UTC |
a2208a9 | Joost van Griethuysen | 26 October 2017, 12:04:06 UTC | Merge pull request #322 from JoostJM/gldm-bug Fix incorrect usage of self.maskArray | 26 October 2017, 12:04:06 UTC |
b6a0c4a | Joost van Griethuysen | 24 October 2017, 08:55:49 UTC | Remove duplicate features In addition to the equality between the formulas for Sum Variance and Cluster Tendency (#300), the following features also have identical formulas: GLDM - Gray Level Non-Uniformity Normalized = First Order - Uniformity GLCM - Dissimilarity = GLCM - Difference average GLCM - Homogeneity1 = GLCM - ID (Exactly identical formula, only difference in name) GLCM - Homogeneity2 = GLCM - IDM (Exactly identical formula, only difference in name) Remove these features from the feature classes and update the documentation accordingly. Remove features from example parameter files where applicable. Add mathematical proof for these equalities to the documentation. Simplify formulas in documentation for GLSZM, GLRLM and GLDM (use a predifined variable Nz for the sum of the matrix). | 26 October 2017, 09:17:10 UTC |
0b8d1ed | Joost van Griethuysen | 24 October 2017, 09:40:45 UTC | BUG: Fix incorrect usage of self.maskArray In full-python calculation of the GLDM matrix, calculation would fail when label != 1. Update GLDM to also work with different mask values. Fix an additional bug in testUtils, where the Label value stored in the baseline was not passed to the checkMask function when loading a test case. | 26 October 2017, 09:16:56 UTC |
8a75ab8 | Joost van Griethuysen | 23 October 2017, 05:59:14 UTC | FAQ: Add explanation on enforcing a bin width Add a FAQ explaining why pyradiomics only allows the specification of a fixed bin width, and not a fixed bin count. | 26 October 2017, 09:16:40 UTC |
4700502 | Joost van Griethuysen | 26 October 2017, 09:14:52 UTC | STYL: Fix flake8 errors | 26 October 2017, 09:14:52 UTC |
36bd0b1 | Joost van Griethuysen | 26 October 2017, 08:29:19 UTC | STYL: Remove bare except statements Flake8 fails on bare except statement. Recode these statements as `except Exception`. | 26 October 2017, 08:29:19 UTC |
7535f8d | Joost van Griethuysen | 23 October 2017, 08:26:50 UTC | Merge pull request #318 from JoostJM/filter-out-nans Add --skip-nans command line argument | 23 October 2017, 08:26:50 UTC |
4a5b250 | Joost van Griethuysen | 16 October 2017, 11:53:22 UTC | ENH: Add --skip-nans command line argument Add a command line argument to skip printing out features that compute a NaN. Fixes #314 | 23 October 2017, 06:16:42 UTC |
172dafd | Joost van Griethuysen | 14 October 2017, 13:25:11 UTC | BUG: Change calculation of filter correction coefficients Update coefficients to use `max(|x|)`, instead of `max(x)` (use the absolute values). This prevents invalid calculation, as `max(x)` can be negative (impossible sqrt in square filter). Furthermore, this defines the range to be scaled to the larges difference from 0, instead of just the maximum value (which can yield very different ranges). | 23 October 2017, 05:59:27 UTC |
60c18e2 | Joost van Griethuysen | 19 October 2017, 15:07:49 UTC | Merge pull request #317 from JoostJM/add-precrop Add pre-cropping | 19 October 2017, 15:07:49 UTC |
939c0e5 | Joost van Griethuysen | 14 October 2017, 11:16:41 UTC | ENH: Add pre-cropping When resampling is enabled, image and mask are pre-cropped onto the bounding box (with additional padding). This speeds up the resampling process and the application of filters. Moreover, it can significantly reduce the memory footprint of the extraction, especially when the images are large, but contain only small ROIs. Add functionality to also pre-crop the image when no resampling is applied. This way, the advantages when applying filters on a pre-cropped image and mask are also available when extracting without resampling. Similar as pre-cropping when resampling, additional padding is available (parameter `padDistance`), which is ensure to not exceed the original image bounds. | 14 October 2017, 11:16:41 UTC |
ac66e6c | Joost van Griethuysen | 12 October 2017, 08:52:08 UTC | DOCS: Update Changelog and notebooks. Update Changelog to reflect recent changes made. Update notebooks to work with latest version of PyRadiomics. | 12 October 2017, 08:52:08 UTC |