# Calculation between two scalar volumes

**URL:** <https://discourse.slicer.org/t/calculation-between-two-scalar-volumes/36520>\
**Category:** Support\
**Created:** [May 31, 2024, 10:42am UTC](https://discourse.slicer.org/t/calculation-between-two-scalar-volumes/36520 "2024-05-31T10:42:00Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![mssm](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/mssm/32/76622_2.png) [@mssm](https://discourse.slicer.org/u/mssm)\
**Post date:** [May 31, 2024, 10:42am UTC](https://discourse.slicer.org/t/calculation-between-two-scalar-volumes/36520/1 "2024-05-31T10:42:00Z")

</div>

Dear respected experts,

I have two Dicom volumes (Volume A, Volume B). The positions are exactly same.

I would like to create a new volume by performing calculations on each voxel value.  
Specifically, I would like to perform the calculation α\*A + (1-α)\*B and create a new volume, but what function should I use to do this in 3D Slicer?  
I have already tried the “Add Scalar Volume” function, but I couldn’t make it.

I can visualize the image, but I need a dicom volume data for the image.

Thank you in advance.

A neurosurgeon from Japan

---

<div class="post-metadata">

**Author:** ![cpinter](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/cpinter/32/7995_2.png) [@cpinter](https://discourse.slicer.org/u/cpinter)\
**Post date:** [May 31, 2024, 11:29am UTC](https://discourse.slicer.org/t/calculation-between-two-scalar-volumes/36520/2 "2024-05-31T11:29:21Z")

</div>

I would use numpy to do this. It is easy to get the numpy array from volumes and then moving the result back to a volume. You can get the idea looking for example at this script in the script repository:  
[https://slicer.readthedocs.io/en/latest/developer\_guide/script\_repository.html#combine-multiple-volumes-into-one](https://slicer.readthedocs.io/en/latest/developer_guide/script_repository.html#combine-multiple-volumes-into-one)

---

<div class="post-metadata">

**Author:** ![mssm](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/mssm/32/76622_2.png) [@mssm](https://discourse.slicer.org/u/mssm)\
**Post date:** [May 31, 2024, 3:47pm UTC](https://discourse.slicer.org/t/calculation-between-two-scalar-volumes/36520/3 "2024-05-31T15:47:09Z")

</div>

Thank you for your kind advice. It is a bit difficut for me, but I am going to try the method you taught me. Thanks again.

---

<div class="post-metadata">

**Author:** ![mssm](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/mssm/32/76622_2.png) [@mssm](https://discourse.slicer.org/u/mssm)\
**Post date:** [August 14, 2024, 4:39pm UTC](https://discourse.slicer.org/t/calculation-between-two-scalar-volumes/36520/4 "2024-08-14T16:39:43Z")

</div>

I was managed to make a script to make a fusion of two volumes. Thanks, cpinter!

```python
# name of volume data, BONE and VESSEL
# alfa-blending of BONE and VESSEL with a certain alfa value.

volumenode_A = slicer.util.getNode("BONE")
array_A = slicer.util.arrayFromVolume(volumenode_A)
volumenode_B = slicer.util.getNode("VESSEL")
array_B = slicer.util.arrayFromVolume(volumenode_B)
alfa = 0.05 # change this value as you like
array_C = array_A * (1 - alfa) + array_B * alfa
volumenode_C = slicer.modules.volumes.logic().CloneVolume(volumenode_A, "Calc")
slicer.util.updateVolumeFromArray(volumenode_C, array_C)

```
