Pyradiomics: [FEAT EXTRACTION] Several features returning same values for different images

Created on 14 Jan 2020  ·  16Comments  ·  Source: AIM-Harvard/pyradiomics

Describe the bug
Hi all,

I ran the pyradiomics code on some datasets recently.
I have been getting some strange results - several features are the same.
i.e.,
original_firstorder_Entropy - all -3.2E-16
original_firstorder_Uniformity - all 1
GLCM - all give me the same values (either 0, 1, or -3.20E-16)

The images contain very different values so all of this is unexpected...

Any insight ?
Many thanks

Version (please complete the following information):
OS: Windows Server 2012 R2
Python version: 3.6.1
PyRadiomics version 2.2.0

question

All 16 comments

It could be due to your choice of binning for those images. Did you try to increase the number of bins and see if this makes any difference?

Hi Fedorov,
I am not sure how I can change the number of bins... Would you be able to describe and I will see if it's possible?
Many thanks

Thanks Fedorov - I tested on a subset of data with binWidth = 50, but the results are still the same unfortunately.

Hi,
c
Can you check which is the range of intensities in within the masks and
change the bin width so that the number of bins would fall between 30 and
130 as suggested in
https://pyradiomics.readthedocs.io/en/latest/faq.html#what-about-gray-value-discretization-fixed-bin-width-fixed-bin-count

How are you executing pyradiomics? Are you passing the parameter file
correctly?

Hope this helps to find the issue

A terça, 14/01/2020, 17:28, GitHub-username-hyphen notifications@github.com
escreveu:

Hi Fedorov, I tested on a subset of data with binWidth = 50, but the
results are the same.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/Radiomics/pyradiomics/issues/552?email_source=notifications&email_token=AGGB5ZLWAWZCFF5SEVV4GI3Q5XY3HA5CNFSM4KGWGJWKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEI5OMNI#issuecomment-574285365,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGGB5ZPEZ7UXDR22NCWIKCTQ5XY3HANCNFSM4KGWGJWA
.

Hi Joao,
The masks are binary, so the values are either 1 or 0.
We're using a range of images, but have set our masks so that when overlaid on the images it should only cover positive values.

We originally used the default setting of binWidth = 25, but I changed it to 50 (arbitrary number) as suggested by Fedorov but still had the same result. We execute pyradiomics using PyCharm, which I believe calls upon the params.yaml file for the parameter file. Did not have this issue previously with other datasets.

Sorry I was not clear, but the range I was referring to was the range of
intensities of the image where your mask is one.

Can you out here the command/lines of code that are executing pyradiomics?
So we better help you!

Thanks

A terça, 14/01/2020, 18:47, GitHub-username-hyphen notifications@github.com
escreveu:

Hi Joao,
The masks are binary, so the values are either 1 or 0.
We're using a range of images, but have set our masks so that when
overlaid on the images it should only cover positive values.

We originally used the default setting of binWidth = 25, but I changed it
to 50 (arbitrary number) as suggested by Fedorov but still had the same
result. We execute pyradiomics using PyCharm, which I believe calls upon
the params.yaml file for the parameter file. Did not have this issue
previously with other datasets.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/Radiomics/pyradiomics/issues/552?email_source=notifications&email_token=AGGB5ZPIXVJU5KUVHW7VNPDQ5YCDXA5CNFSM4KGWGJWKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEI5WDLA#issuecomment-574316972,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGGB5ZMGT2UAT6L5WO5GQP3Q5YCDXANCNFSM4KGWGJWA
.

Hi Joao,
Sorry I am a novice at all of this - I think this is what you were asking for?

`from radiomics import featureextractor, getTestCase
import six
import sys, os

set constants

dataDir = 'E:\Texture Analysis Files\PyCharm Projects\SR_FE_Codes\IVIM_D_ThresholdedIndiv_20200110\Test'
forYAML = 'E:\Texture Analysis Files\PyCharm Projects\SR_FE_Codes'
params = os.path.join(forYAML, "examples", "exampleSettings", "Params.yaml")
extractor = featureextractor.RadiomicsFeatureExtractor(params)
a = []`

That was exactly what i asked.

I think the issue might be that scale of your D from IVIM analysis. The
value of bin width may be too high or to low for the values inside the
mask. Depends on the units (mm²/s or other) and how those values are
represented (·10^-6 or other).

I think the easiest way to understand the range of values would be to load
the images and masks on 3D Slicer and in the Quantification select the
Segmentation Statistics (or something similar), check the minimum and
maximum and define the bin width accordingly.

Let me know if you were able to solve it

A terça, 14/01/2020, 19:21, GitHub-username-hyphen notifications@github.com
escreveu:

Hi Joao,
Sorry I am a novice at all of this - I think this is what you were asking
for?

`from radiomics import featureextractor, getTestCase
import six
import sys, os
set constants

dataDir = 'E:\Texture Analysis Files\PyCharm
Projects\SR_FE_Codes\IVIM_D_ThresholdedIndiv_20200110\Test'
forYAML = 'E:\Texture Analysis Files\PyCharm Projects\SR_FE_Codes'
params = os.path.join(forYAML, "examples", "exampleSettings",
"Params.yaml")
extractor = featureextractor.RadiomicsFeatureExtractor(params)
a = []`


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/Radiomics/pyradiomics/issues/552?email_source=notifications&email_token=AGGB5ZP2EPWNOVFBG66UU53Q5YGFHA5CNFSM4KGWGJWKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEI5ZQQQ#issuecomment-574330946,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGGB5ZNKSMN6ZZGCVBVEGO3Q5YGFHANCNFSM4KGWGJWA
.

You could also try using the binCount parameter as described here in place of the binWidth: https://pyradiomics.readthedocs.io/en/latest/customization.html#feature-class-level

Hi Joao, Fedorov,

Thank you both for your suggestions.
I have imported some of our cases into Slicer. We are looking at looking at different IVIM maps (i.e., ADC, D, f) with different thresholds set, so the min/max vary. Some examples below though:

ADC: 8.33816e-05 to 0.00217475
D: 6.71817e-05 to 0.3
f: 0.000594766 to 0.299469

I see that the suggestions appear to be to set binWidth between 30-130 but was wondering if either of you had suggestions as to what I could test? I am not sure which direction we should change binWidth to given our various scales on the different maps.

Thank you very much for your help,

So the issue is that a bin width of 25 or 50 is too high for the range
(maximum-minimum) of values of ADC, D and f. You can for instance select
for ADC a bin width of
(0.00217475 - 8.33816e-05)/80
where 80 is the number of bins.
The value 80 is just an example for you to get a bin width.
You can the do what os proposed in pyradiomics that would be to execute the
feature extraction once and look at the firstorder_range and see if by
dividing by your selected bin width the majority of the patients would have
between 30 and 130 bins (not a bin width between 30 and 130).

You can try the solution by Andrey and you will see that those values will
change.

Hope It was clear enough to help you

A terça, 14/01/2020, 21:10, GitHub-username-hyphen notifications@github.com
escreveu:

Hi Joao, Fedorov,

Thank you both for your suggestions.
I have imported some of our cases into Slicer. We are looking at looking
at different IVIM maps (i.e., ADC, D, f) with different thresholds set, so
the min/max vary. Some examples below though:

ADC: 8.33816e-05 to 0.00217475
D: 6.71817e-05 to 0.3
f: 0.000594766 to 0.299469

I see that the suggestions appear to be to set binWidth between 30-130 but
was wondering if either of you had suggestions as to what I could test? I
am not sure which direction we should change binWidth to given our various
scales on the different maps.

Thank you very much for your help,


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/Radiomics/pyradiomics/issues/552?email_source=notifications&email_token=AGGB5ZJMMWFJBVIEFAMQCOLQ5YS3PA5CNFSM4KGWGJWKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEI6ELLA#issuecomment-574375340,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGGB5ZOTFERRJZDRYKDQYPTQ5YS3PANCNFSM4KGWGJWA
.

Thanks so much Joao, that was very helpful!

I'll try your suggestions and take a look to see what has been published as
well.

On Jan. 14, 2020 at 16:31, Joao Santinha notifications@github.com wrote:

So the issue is that a bin width of 25 or 50 is too high for the range
(maximum-minimum) of values of ADC, D and f. You can for instance select
for ADC a bin width of
(0.00217475 - 8.33816e-05)/80
where 80 is the number of bins.
The value 80 is just an example for you to get a bin width.
You can the do what os proposed in pyradiomics that would be to execute the
feature extraction once and look at the firstorder_range and see if by
dividing by your selected bin width the majority of the patients would have
between 30 and 130 bins (not a bin width between 30 and 130).

You can try the solution by Andrey and you will see that those values will
change.

Hope It was clear enough to help you

A terça, 14/01/2020, 21:10, GitHub-username-hyphen >
escreveu:

Hi Joao, Fedorov,

Thank you both for your suggestions.
I have imported some of our cases into Slicer. We are looking at looking
at different IVIM maps (i.e., ADC, D, f) with different thresholds set, so
the min/max vary. Some examples below though:

ADC: 8.33816e-05 to 0.00217475
D: 6.71817e-05 to 0.3
f: 0.000594766 to 0.299469

I see that the suggestions appear to be to set binWidth between 30-130 but
was wondering if either of you had suggestions as to what I could test? I
am not sure which direction we should change binWidth to given our various
scales on the different maps.

Thank you very much for your help,


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<
https://github.com/Radiomics/pyradiomics/issues/552?email_source=notifications&email_token=AGGB5ZJMMWFJBVIEFAMQCOLQ5YS3PA5CNFSM4KGWGJWKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEI6ELLA#issuecomment-574375340
,
or unsubscribe
<
https://github.com/notifications/unsubscribe-auth/AGGB5ZOTFERRJZDRYKDQYPTQ5YS3PANCNFSM4KGWGJWA

.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Radiomics/pyradiomics/issues/552?email_source=notifications&email_token=AOAQCNIEPHMNDHUL2LV7SPTQ5YVKLA5CNFSM4KGWGJWKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEI6GKFI#issuecomment-574383381,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOAQCNPKNW3LUEBDZAUN6RLQ5YVKLANCNFSM4KGWGJWA
.

Hi Fedorov,
I am looking into adjusting binCount vs binWidth but cannot find a line in the code for binCount. Can you advise on where I can find this?
Thank you

It is easiest to experiment by using command line tool for feature extraction, and specify parameters in the config file. Can you start wit this config file, and specify binWidth in place of binCount?

Hi all,

I think this issue was resolved by changing the binWidth to reflect the scale of values in the image.

Thanks Joao, Fedorov!

Was this page helpful?
0 / 5 - 0 ratings