<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#Import necessary libraries
from MEDLoader import MEDLoader
import MEDCoupling as mc
from MEDCouplingRemapper import MEDCouplingRemapper
import SimpleITK as sitk

# Import the labeled image
reader2 = sitk.ImageFileReader()
reader2.SetFileName('/home/morrile2/Documents/MULTIS Data/MRI_Segmentation/Femur_T1-label.nii')
img_label = reader2.Execute()
img_l = sitk.GetArrayFromImage(img_label)

print img_label.GetOrigin(), img_label.GetSize(), img_label.GetSpacing()

img_origin = img_label.GetOrigin()
img_size = img_label.GetSize()
img_spacing = img_label.GetSpacing()

def build_vector(dim):
    arr = mc.DataArrayDouble(img_size[dim]+1)
    arr.iota(0)
    arr *= img_spacing[dim]
    if dim == 2:
        arr += img_origin[dim]-0.5*img_spacing[dim]
    else:
        arr += img_origin[dim] - 0.5 * img_spacing[dim]
        arr *= -1
    return arr

# Import the target tetrahedral mesh
trgMesh = MEDLoader.ReadUMeshFromFile('/home/morrile2/Documents/MULTIS Data/MRI_Segmentation/full_leg2.med', 0)

# # Create the source mesh matching the image dimensions
x_dim = build_vector(0)
y_dim = build_vector(1)
z_dim = build_vector(2)

srcMesh = mc.MEDCouplingCMesh()
srcMesh.setCoords(x_dim, y_dim, z_dim)
srcMesh = srcMesh.buildUnstructured()
srcMesh.setName("SourceMesh")
#
# Interpolate cells to cells
remap = MEDCouplingRemapper()
remap.prepare(srcMesh,trgMesh,"P0P0")
#
# Source field construction
srcField = mc.MEDCouplingFieldDouble(mc.ON_CELLS, mc.ONE_TIME)
srcField.setMesh(srcMesh)
# print srcField.getMesh().getNumberOfCells()

array = mc.DataArrayDouble()
array.alloc(srcField.getMesh().getNumberOfCells(), 3)  # Implicitely fieldOnNodes will be a 3 component field.
array.setInfoOnComponents(['Skin', 'Fat', 'Muscle'])
# print(srcField.getMesh().getNumberOfCells())
for i in range(0,srcField.getMesh().getNumberOfCells(), 1):
    # print i, i//(img_size[0]*img_size[1])
    # array[i] = int(img_l[i//(img_size[0]*img_size[1])][i%(img_size[0]*img_size[1])//(img_size[0])][i%img_size[0]])
    val = int(img_l[i//(img_size[0]*img_size[1])][i%(img_size[0]*img_size[1])//(img_size[0])][i%img_size[0]])
    if val == 21: #Skin
        array[i] = [1,0,0]
    elif val == 12: #Fat
        array[i] = [0,1,0]
    elif val == 8: #Muscle
        array[i] = [0,0,1]
    else:
        array[i] = [0,0,0]

srcField.setArray(array)

# Transfer field
srcField.setNature(mc.Integral) # Extensive remapping - Integral (summation) of field
# srcField.setNature(mc.ConservativeVolumic) # Intensive remapping - Average of field
trgFieldCV = remap.transferField(srcField, 0)

srcField.setName("FIELD_src")
trgFieldCV.setName("FIELD_trg")

MEDLoader.WriteUMesh('/home/morrile2/Documents/Multis/app/MRI_Segmentation/Source_extensive2.med', srcMesh, True)
MEDLoader.WriteFieldUsingAlreadyWrittenMesh('/home/morrile2/Documents/Multis/app/MRI_Segmentation/Source_extensive2.med', srcField)

MEDLoader.WriteUMesh('/home/morrile2/Documents/Multis/app/MRI_Segmentation/Target_extensive2.med', trgMesh, True)
MEDLoader.WriteFieldUsingAlreadyWrittenMesh('/home/morrile2/Documents/Multis/app/MRI_Segmentation/Target_extensive2.med', trgFieldCV)

</pre></body></html>