# DICOM image intensity rescaling using non-linear regression based fitting

**URL:** <https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228>\
**Category:** Support\
**Created:** [December 30, 2018, 2:02pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228 "2018-12-30T14:02:34Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![michael](https://avatars.discourse-cdn.com/v4/letter/m/4bbf92/32.png) [@michael](https://discourse.slicer.org/u/michael)\
**Post date:** [December 30, 2018, 2:02pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/1 "2018-12-30T14:02:34Z")

</div>

Hi everybody !

I want to perform a value conversion on a DICOM image by solving an equation with 2 unknown variables (a and b) :  
output value = (a - input value) / (b + input value)

To do that we decided to perform least-square error minimization with non linear regression based on levenberg-marquardt model

To calibrate the model we have to use 2 segmentation volumes in the image were the value is fixed to calibrate the model.

Any advice for this? Thank for your help

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 30, 2018, 2:42pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/2 "2018-12-30T14:42:42Z")

</div>

You can use arrayFromVolume and arrayFromSegment methods to get voxels as numpy arrays. You can find examples in the [script repository](https://www.slicer.org/wiki/Documentation/Nightly/ScriptRepository).

You can implement the computation in Jupyter notebook using [Slicer Jupyter notebook](https://github.com/Slicer/SlicerJupyter/) or as scripted module.

---

<div class="post-metadata">

**Author:** ![michael](https://avatars.discourse-cdn.com/v4/letter/m/4bbf92/32.png) [@michael](https://discourse.slicer.org/u/michael)\
**Post date:** [December 30, 2018, 4:46pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/3 "2018-12-30T16:46:59Z")

</div>

Hi thank for your help !

Do you think it is easier (for code) to use DICOM mask OR segmentation volume to identify “calibration volume”?

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 30, 2018, 5:24pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/4 "2018-12-30T17:24:06Z")

</div>

What do you mean by DICOM mask and segmentation volume?

---

<div class="post-metadata">

**Author:** ![michael](https://avatars.discourse-cdn.com/v4/letter/m/4bbf92/32.png) [@michael](https://discourse.slicer.org/u/michael)\
**Post date:** [December 30, 2018, 5:32pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/5 "2018-12-30T17:32:49Z")

</div>

i mean link the algorythm with DICOM mask=(image?) or link on segmentations (contours?)

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 30, 2018, 5:45pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/6 "2018-12-30T17:45:03Z")

</div>

There are many ways to store segmentation in DICOM. Slicer can import DICOM RT Structure Set or DICOM Segmentation Object information objects.

---

<div class="post-metadata">

**Author:** ![michael](https://avatars.discourse-cdn.com/v4/letter/m/4bbf92/32.png) [@michael](https://discourse.slicer.org/u/michael)\
**Post date:** [December 30, 2018, 6:01pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/7 "2018-12-30T18:01:37Z")

</div>

yes i can use all : RT structures Set, binary label map but is it better to use “masked image”

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 30, 2018, 6:29pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/8 "2018-12-30T18:29:31Z")

</div>

RT structure set is somewhat less deterministic (due to complex rasterization procedure that includes contour interpolation, branching, end-capping, keyhole resolution), but in most cases they should give equivalent results.

---

<div class="post-metadata">

**Author:** ![michael](https://avatars.discourse-cdn.com/v4/letter/m/4bbf92/32.png) [@michael](https://discourse.slicer.org/u/michael)\
**Post date:** [December 30, 2018, 7:25pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/9 "2018-12-30T19:25:58Z")

</div>

Ok i prefer to use RT STRUCTURE SET !

I ve found this function what to you think about?

[https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least\_squares.html](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html)

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [December 31, 2018, 10:57pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/10 "2018-12-31T22:57:31Z")

</div>

scipy.optimize.least\_squares function is suitable for non-linear curve fitting.

---

<div class="post-metadata">

**Author:** ![michael](https://avatars.discourse-cdn.com/v4/letter/m/4bbf92/32.png) [@michael](https://discourse.slicer.org/u/michael)\
**Post date:** [January 1, 2019, 12:11pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/11 "2019-01-01T12:11:12Z")

</div>

is is better than arrayFromVolume and arrayFromSegment methods you describe me previously?

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [January 1, 2019, 2:18pm UTC](https://discourse.slicer.org/t/dicom-image-intensity-rescaling-using-non-linear-regression-based-fitting/5228/12 "2019-01-01T14:18:40Z")

</div>

You first need to get data using arrayFrom\* methods, probably apply some masking operation, and finally fit your model using least\_squares or similar method.
