723d868 | Joost van Griethuysen | 11 April 2019, 09:00:48 UTC | DOC: Fix math render errors. | 11 April 2019, 09:00:48 UTC |
690891d | Joost van Griethuysen | 11 April 2019, 08:50:39 UTC | DOC: Update documentation for getBinEdges() | 11 April 2019, 08:50:39 UTC |
3efae04 | Joost van Griethuysen | 27 March 2019, 09:25:41 UTC | LOG: Provide clearer error message when segmentation consists of 1 voxel | 27 March 2019, 09:25:41 UTC |
a7bed1d | Joost van Griethuysen | 22 March 2019, 09:57:16 UTC | ENH: Update calculation of RobustMeanAbsoluteDeviation Change the generation of the mask to prevent greater-than and lesser-than comparisons with NaN values. | 22 March 2019, 09:57:16 UTC |
decd8e1 | Joost van Griethuysen | 21 March 2019, 16:34:42 UTC | LOG: Fix indentation error when validating cases Final message was indented too much, causing it to log the final message after each individual case was validated. | 21 March 2019, 16:34:42 UTC |
6d385a1 | Joost van Griethuysen | 19 March 2019, 08:23:34 UTC | LOG: Update logging during mask loading - Fix a bug in the check for presence of the label - Raise error when resegmentation excludes all voxels in the ROI | 19 March 2019, 08:23:34 UTC |
8df1190 | Joost van Griethuysen | 14 March 2019, 16:15:08 UTC | BUG: Fix error in writing csv results When additional keys are found, csv writer issues an error. Prevent this by taking the set of all headers found in the cases and use that. | 14 March 2019, 16:15:08 UTC |
a5336fe | Joost van Griethuysen | 13 March 2019, 10:12:20 UTC | BUG: Fix range error for label channel | 13 March 2019, 10:12:20 UTC |
f4696b5 | Joost van Griethuysen | 13 March 2019, 09:36:57 UTC | DOCS: Add documentation on `voxelBatch` setting | 13 March 2019, 09:36:57 UTC |
077edb9 | Joost van Griethuysen | 13 March 2019, 09:21:04 UTC | BUG: Fix error in showing results in helloVoxel.py Because of changes made in #457 (more specifically, commit d90aa7f), diagnostic information is now also provided if voxel-based extraction is enabled. This requires type checking on the output in `helloVoxel.py`, as diagnostic features cannot be stored as a SimpleITK image. | 13 March 2019, 09:22:49 UTC |
3f49835 | Joost van Griethuysen | 06 March 2019, 14:02:49 UTC | Merge pull request #445 from JoostJM/add-segmentation-support Add support for overlapping masks / Slicer Segementation objects | 06 March 2019, 14:02:49 UTC |
8f12a51 | Joost van Griethuysen | 06 March 2019, 13:40:34 UTC | STYL: Fix typo in shape 2D documentation | 06 March 2019, 13:40:34 UTC |
e372598 | Joost van Griethuysen | 06 March 2019, 13:37:09 UTC | DOC: Add documentation of shape2D features | 06 March 2019, 13:37:09 UTC |
1b8490d | Joost van Griethuysen | 06 March 2019, 09:55:53 UTC | BUG: Use correct dtype when calculating voxel-based with full kernels When calculating voxel-based with full kernel, `maskArray` replaced by a `numpy.ones` array, of the same shape as the original `maskArray`. However, the dtype was not explicitly set, but needs to be boolean as it is used to slice an array later on. | 06 March 2019, 09:56:07 UTC |
6ec585c | Joost van Griethuysen | 06 March 2019, 09:50:56 UTC | ENH: Allow different type for parameter file path specification A file location may also be passed as e.g. an instance of pathlib WindowsPath, which is not recognized as a string, but does represent a valid file path. Therefore, change the check to see if the string representation of the passed object resolves to an existing file, and if so, use that file as the parameter file. | 06 March 2019, 09:50:56 UTC |
64a3ab0 | Joost van Griethuysen | 06 March 2019, 09:15:59 UTC | BUG: Fix misalignment when calculating firstorder voxel-wise In firstorder, image array is padded to ensure full kernels are always possible. However, this requires an update of the kernel coordinates, which need to be done on a copy of the coordinates to prevent misalignment in the results feature map. | 06 March 2019, 09:15:59 UTC |
49bda8c | Joost van Griethuysen | 01 March 2019, 16:42:50 UTC | Merge pull request #466 from JoostJM/add-bounding-box-iteration Add bounding box iteration | 01 March 2019, 16:42:50 UTC |
0602f6a | Joost van Griethuysen | 20 February 2019, 14:47:44 UTC | ENH: Select index using `label_channel` setting Additionally, add range constraint on `label` setting (> 0) and implement label check when getting the mask. | 20 February 2019, 16:29:29 UTC |
297b51c | Joost van Griethuysen | 07 December 2018, 11:31:38 UTC | ENH: Add support for overlapping masks / Slicer Segementation objects In the new version of Slicer, segmentation is done using Segmentation Objects, which allow for overlapping segmentation. When stored, these `.seg.nrrd` files can be read by SimpleITK as vector images. By extracting the nth index from the vector, a labelmap (3D volume) can be obtained representing the nth segement. To ensure correct functionality in the rest of PyRadiomics, all non-zero in the obtained mask are then set to the label value. | 20 February 2019, 16:29:29 UTC |
aecc8ec | Joost van Griethuysen | 20 February 2019, 16:10:14 UTC | BUG: Fix GSLZM calculation in voxel-based calculation When growing the regions, mask voxels are set to 0 to prevent reprocessing. However, when extracting voxel-based, these need to be reset to allow for correct processing of voxels in the subsequent kernels. Therefore, if Nvox > 1, keep track of the processed voxels and reset them after processing. Additionally, force cast PyArray_DIM to make function `try_parse_voxels_arr` consistent with function `try_parse_arrays`. | 20 February 2019, 16:29:08 UTC |
39262ad | Joost van Griethuysen | 20 February 2019, 14:51:33 UTC | STYL: Simplify initialization of target voxel array in firstorder | 20 February 2019, 16:29:08 UTC |
011999f | Joost van Griethuysen | 20 February 2019, 12:33:16 UTC | BUG: Fix bugs with empty angles in GLRLM and GLCM In segment based mode, empty angles are removed from the calculation, but when calculating multiple voxel kernels, empty angles may presist (empty in some kernels, not in others). Exclude those angles from the calculations per voxel by setting them to NaN and using `nanmean` for combining angle results. Additionally, move some of the coefficients that are only used in single features to those features. Conserves memory and prevents unnecessary calculation. | 20 February 2019, 16:29:08 UTC |
8de7fb2 | Joost van Griethuysen | 15 February 2019, 17:13:18 UTC | ENH: Implement vectorized voxel-based calculation Implement vectorized calculation of voxel kernels and remove need of kernel generation for voxel-based calculation of texture matrices. For the latter, define kernels by updating the bounding box for calculation on the fly in the C extension. The mask array is then only utilized to either mask the kernels (`maskedKernel=True`, maskArray elements true where segmented) or no mask, in which case the maskArray is set to `numpy.ones` of `shape(imageArray)`. This reduces both the number of python-based loops, as the iteration time in the C extension (only iterates over the kernel for each voxel, not the entire image). Vectorize all feature formulas (exception: shape and shape2D features) Update firstorder to work with vectorized calculation (add dimension to `targetVoxelArray`, add `discretizedTargetVoxelArray`. Add voxelSetting parameter `voxelBatch`, which controls the maximum number of voxel calculated in a vectorized way (allows specification of less voxels in 1 batch to conserve memory). Default setting of -1 means all voxels are calculated in one batch Additionally, remove `self.matrix`, as this is reference equal to `self.imageArray` when applying binning. | 20 February 2019, 16:29:08 UTC |
b01edeb | Joost van Griethuysen | 13 February 2019, 09:02:48 UTC | ENH: Add C support for by-voxel calculation Add an extra dimension as the first dimension of each texture matrix, which will correspond to the matrix for the segment (segment-based, size 1) or the specific kernel identified by the voxel index in the passed array (voxel-based). This will allow a more vectorized calculation of kernels when processing in by-voxel mode. Additionally, update the python formulas to allow for this additional dimension by adding axis specifications to all reducing operations and updating defined axes to shift by +1. Use numpy.squeeze to convert the returned result in segment-based calculation from a 1-D array with size 1 to a scalar float value. | 20 February 2019, 16:29:08 UTC |
3062ef6 | Joost van Griethuysen | 12 February 2019, 16:23:51 UTC | TEST: Remove printf function calls | 20 February 2019, 16:29:08 UTC |
7845731 | Joost van Griethuysen | 12 February 2019, 09:17:14 UTC | ENH: Add bounding box iteration in C Update C extensions to iterate only over a view of the image (bounding box). This can be used later on to rapidly define kernels for a voxel based-calculation. - Define bounding box array as {L_0, L_1, ..., L_n, U_0, U_1, ..., U_n} (i.e. first all lower bounds, then all upper bounds). - Start iteration over the image on by calculating the first `i` from the lower bounds. - Upon each increase of `i`, calculate to see if `i` exceeds image bounds, and if so, increase `i` in that dimension to the lower bound. - When computing neighbours, compare against bounding box instead of size to determine valid angles. - For now, fix bb initialization to {0, size - 1} in each dimension. Testing: - Add print statements in GLCM and GLRLM to reflect new behaviour. Finally, add a check to ensure allocation for memory for `size` and `strides` is successful. | 20 February 2019, 16:29:08 UTC |
5cb7cd4 | Joost van Griethuysen | 20 February 2019, 16:28:38 UTC | Merge pull request #463 from JoostJM/update-c-extensions Update c extensions | 20 February 2019, 16:28:38 UTC |
9b7e5cb | Joost van Griethuysen | 13 February 2019, 10:53:00 UTC | ENH: Factor out common functionality in C Python wrappers - Move parsing of distances and building the angles array to a separate function - Move the conversion of image and mask objects to the try_parse_arrays function | 20 February 2019, 14:20:29 UTC |
907138b | Joost van Griethuysen | 06 February 2019, 08:28:29 UTC | Update python code to allow N-Dimensional input At certain places only a specific (range of) dimension(s) is allowed (e.g. local binary pattern filter). At those places, a check is implemented, preventing calculation if the dimensionality is wrong. Additionally, add the dimensionality to the output as part of the diagnostic features. | 20 February 2019, 14:20:29 UTC |
183aa21 | Joost van Griethuysen | 05 February 2019, 09:16:58 UTC | Update C wrapper to support N-Dimensional extraction - Update checks from ensuring NDim = 3 to NDim(image) == NDim(mask) - Parse out number of dimensions from image array and use it to instantiate the size and strides arrays - Switch calloc for malloc (no need to have the arrays initialized. - Switch the loops for initializing the texture arrays for a `memset` statement | 20 February 2019, 14:20:29 UTC |
372e4d2 | Joost van Griethuysen | 01 February 2019, 23:32:51 UTC | TEST: Remove printf statements | 20 February 2019, 14:20:29 UTC |
12a9828 | Joost van Griethuysen | 30 January 2019, 18:02:51 UTC | ENH: Update C-extension functions to allow N-dimensional input Rewrite the functions to be dimension unaware. For testing purposes, number of dimensions are hardcoded in the python wrapper and additional output is printed. | 20 February 2019, 14:20:29 UTC |
12b512f | Joost van Griethuysen | 20 February 2019, 14:19:56 UTC | BUG: Ensure consistency between numpy.histogram and numpy.digitize Related to #219. Ensure numpy.histogram and numpy.digitize yield comparable results. The difference is caused by the fact that numpy.histogram treats the rightmost bin as a closed interval (i.e. values equal to the rightmost edge are included in the last bin). On the other hand, numpy.digitize treats all bins as half open (including the rightmost). In this latter case, values equal to the rightmost bin edge are given value `len(bins) + 1`. Ensure consistent behaviour (with half open bins for all bins) by adding an extra bin edge when using fixed bin width (i.e. the rightmost edge is > max(targetValues)). When using a fixed bin count, correct behaviour was already ensured by adding +1 to the last bin (which is guaranteed to be equal to max(targetValues). In this case, the +1 ensures nummpy.digitize considers these maximum values as part of the last bin, seeing as the edges are arranged such, that a specific number of bins is obtained). On relation to #219: In that PR, the +1 to the rightmost bin was removed to allow 'switching off' binning by specifying bin-width 1. However, this changed did return the inconsistency between numpy.histogram and numpy.digitize, which is now corrected by this commit (by ensuring numpy.histogram is consistent with numpy.digitize, instead of the other way around). | 20 February 2019, 14:19:56 UTC |
5bb18fc | Joost van Griethuysen | 20 February 2019, 09:13:07 UTC | Merge pull request #467 from chchuj/patch-1 finishing print | 20 February 2019, 09:13:07 UTC |
4c9e075 | chchuj | 19 February 2019, 16:53:41 UTC | finishing print print("Stored feature %s in %s" % (key, key + ".nrrd")) | 19 February 2019, 16:53:41 UTC |
a49494e | Andrey Fedorov | 14 February 2019, 19:24:06 UTC | ENH: minor refinements | 14 February 2019, 19:24:06 UTC |
22b200f | Andrey Fedorov | 13 February 2019, 17:35:26 UTC | ENH: fix bugs, make more generic | 13 February 2019, 17:35:26 UTC |
966acac | Andrey Fedorov | 12 February 2019, 17:27:33 UTC | ENH: update comparison notebook | 12 February 2019, 17:27:33 UTC |
78fedb0 | Joost van Griethuysen | 04 February 2019, 13:18:42 UTC | Merge pull request #459 from git-gleb/patch-1 Update features.rst | 04 February 2019, 13:18:42 UTC |
6af4572 | git-gleb | 01 February 2019, 15:11:37 UTC | Update features.rst | 01 February 2019, 15:11:37 UTC |
4d023d2 | Andrey Fedorov | 01 February 2019, 10:25:38 UTC | Merge pull request #458 from Radiomics/add-reproduce ENH: add pyradiomics-reproduce lab | 01 February 2019, 10:25:38 UTC |
1d18182 | Andrey Fedorov | 01 February 2019, 10:22:18 UTC | ENH: add notebook started at 2019PW30 This notebook is specifically to compare USF and pyradiomics features. In the future it can be extended to provide a set of utilities to help with comparing pyradiomics results with those produced by other tools. | 01 February 2019, 10:22:18 UTC |
b92bd22 | Joost van Griethuysen | 31 January 2019, 17:49:11 UTC | Merge pull request #457 from JoostJM/add-voxel-cli Add voxel cli | 31 January 2019, 17:49:11 UTC |
8f929b1 | Andrey Fedorov | 31 January 2019, 12:20:25 UTC | BUG: remove mapping for the Kurtosis feature Kurtosis The IBSI feature definition implements excess kurtosis, where kurtosis is corrected by -3, yielding 0 for normal distributions. The PyRadiomics kurtosis is not corrected, yielding a value 3 higher than the IBSI kurtosis. | 31 January 2019, 12:20:25 UTC |
ffd6ef6 | Joost van Griethuysen | 31 January 2019, 12:15:25 UTC | STYL: Fix flak8 errors | 31 January 2019, 12:15:25 UTC |
36639a5 | Joost van Griethuysen | 31 January 2019, 11:49:24 UTC | DOCS: Add voxel settings to customization docs. | 31 January 2019, 11:50:52 UTC |
92e0987 | Joost van Griethuysen | 31 January 2019, 11:34:01 UTC | DOCS: Update the docs to reflect voxel-based functionality | 31 January 2019, 11:34:01 UTC |
d90aa7f | Joost van Griethuysen | 31 January 2019, 09:45:10 UTC | ENH: Add CLI for voxel-based extraction Add a new switch in PyRadiomics commandline entrypoint: `--mode`, `-m`, which takes either `segment` (default) or `voxel`. Add a new switch in PyRadiomics commandline entrypoint: `--out-dir`, `-od`, which specifies a directory (created if not exists) where featuremaps (mode `voxel`) or intermediate files (mode `segment`) are stored. If not specified, featuremaps are stored in the current working directory and intermediate files are not stored. Refactor the commandline parsing and running of PyRadiomics. Allow adding diagnositic info to the output when extracting voxel-based features. After extracting features in a case, results are split into featuremaps, which are stored as SimpleITK images and non-features, which are processed as the output of segment-based extraction. | 31 January 2019, 11:10:27 UTC |
e6bef34 | Joost van Griethuysen | 31 January 2019, 10:54:20 UTC | STYL: Fix flake8 error in commandlinebatch.py | 31 January 2019, 11:07:32 UTC |
81e713a | Joost van Griethuysen | 31 January 2019, 10:47:30 UTC | BUG: Fix bug in firstorder voxel-based calculation In firstorder, there was an incorrect call in `_initCalculation`, calling the `_initSegmentBasedCalculation` function. When extracting features in segment-based mode, this did not change the output, it only represented a redundant call. However, when features are extracted in voxel-based mode, the coordinates used to build up the target voxel array was incorrectly reset to all voxels inside the ROI, instead of just the voxels in the current kernel mask. This caused all voxels in the parameter map to have the identical value (and equal to the value from segment-based extraction). | 31 January 2019, 10:47:30 UTC |
e0fdbdc | Joost van Griethuysen | 15 January 2019, 12:08:54 UTC | Merge pull request #442 from JoostJM/shape-2D Add 2D Shape features | 15 January 2019, 12:08:54 UTC |
107ab9a | Andrey Fedorov | 07 January 2019, 14:53:50 UTC | Merge pull request #446 from Radiomics/update-docs Update documentation | 07 January 2019, 14:53:50 UTC |
e1a107f | Andrey Fedorov | 14 December 2018, 16:56:57 UTC | ENH: update documentation * clarify that NRRD is not the required input format * update DICOM RT related notes * add Labs section | 07 January 2019, 14:47:32 UTC |
c729d04 | Steve Pieper | 02 January 2019, 16:41:01 UTC | Merge pull request #450 from dfsp-spirit/fix_mailinglist_link_in_contributing Fix 2 broken links in contrib file. | 02 January 2019, 16:41:01 UTC |
e523ea4 | Tim Schaefer | 02 January 2019, 16:21:31 UTC | Fix 2 broken links in contrib file. | 02 January 2019, 16:21:31 UTC |
4b18ce2 | Joost van Griethuysen | 21 December 2018, 12:00:34 UTC | BUG: Fix deleting empty gray levels in GLDM and GLRLM When extracting voxel-wise, there may be discretised gray levels that are not present in a given kernel. In that case, an error occurred in GLRLM and GLDM, where the ivector (defining the gray levels) contained all gray levels, but the matrices only the gray levels present in the mask. Fix the bug by removing gray levels using the gray levels coefficient. | 21 December 2018, 12:02:43 UTC |
ba23713 | Joost van Griethuysen | 20 December 2018, 13:39:11 UTC | Merge pull request #448 from bgeorge0/patch-1 Minor typo fix | 20 December 2018, 13:39:11 UTC |
b677b0d | Ben George | 20 December 2018, 12:51:12 UTC | Minor typo fix | 20 December 2018, 12:51:12 UTC |
f87abcf | Joost van Griethuysen | 19 December 2018, 15:20:14 UTC | BUG: Fix bug when digitizing entire image Use np.flatten() to get a 1D array of the entire image when no mask is passed to the binImage function. This is required when voxelwise extraction is enabled with full kernel (kernelMasked = false). | 19 December 2018, 15:20:14 UTC |
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 |
899973e | Joost van Griethuysen | 19 October 2018, 12:50:47 UTC | STYL: Update comments in cshape Fix typos Add basic representation of cube/square in the algorithm | 19 October 2018, 12:50:47 UTC |
8ef7c8e | Joost van Griethuysen | 19 October 2018, 11:51:22 UTC | TEST: Add test baseline for shape2D Add testing of shape 2D, using all 5 radiomics testcases. As shape2D only works with single slice segmentations, add new largest slice segmentations for each test case, and update code to allow adding of a "_2D" suffix to the testcase, indicating this 2D label should be returned as mask. Additionally update the getTestCase function to raise an error instead of returning None in case the test case could not be obtained. | 19 October 2018, 12:01:33 UTC |
ba07b03 | Joost van Griethuysen | 19 October 2018, 09:59:05 UTC | ENH: Add Shape2D to feature classes Do not enable by default. If user enables shape2D, it first check if the user enabled force2D extraction and if the bounding box of the mask has size 1 in the specified 2D dimension. If not a warning is logged and extraction continues. | 19 October 2018, 10:00:35 UTC |
8567834 | Joost van Griethuysen | 18 October 2018, 16:07:59 UTC | ENH: Add C extension code for 2D shape features Calculates the Surface, perimeter and maximum diameter of a 2D shape (requires input to be a 2D numpy array and spacing). | 19 October 2018, 10:00:35 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 |