File size: 1,212 Bytes
01f75cf
 
 
 
 
 
 
 
 
 
 
 
 
 
dcbe128
01f75cf
 
 
 
 
 
 
 
 
 
 
dcbe128
01f75cf
 
 
dcbe128
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import os

import nibabel as nib
import numpy as np
from nibabel import processing


def normalize(voxel):
    nonzero = voxel[voxel > 0]
    voxel = np.clip(voxel, 0, np.mean(nonzero) + np.std(nonzero) * 2)
    voxel = (voxel - np.min(voxel)) / (np.max(voxel) - np.min(voxel))
    voxel = (voxel * 2) - 1
    return voxel.astype("float32")


def reimburse_conform(output_dir, basename, suffix, odata, data, output):
    nii = nib.Nifti1Image(output.astype(np.uint16), affine=data.affine)
    header = odata.header
    nii = processing.conform(
        nii,
        out_shape=(header["dim"][1], header["dim"][2], header["dim"][3]),
        voxel_size=(header["pixdim"][1], header["pixdim"][2], header["pixdim"][3]),
        order=0,
    )
    os.makedirs(os.path.join(output_dir, f"{suffix}"), exist_ok=True)
    nib.save(nii, os.path.join(output_dir, f"{suffix}/{basename}_{suffix}_mask.nii"))

    result = odata.get_fdata().astype("float32") * nii.get_fdata().astype("int16")
    nii = nib.Nifti1Image(result.astype(np.float32), affine=odata.affine)
    nib.save(nii, os.path.join(output_dir, f"{suffix}/{basename}_{suffix}.nii"))
    return os.path.join(output_dir, f"{suffix}/{basename}_{suffix}_mask.nii")