File size: 2,229 Bytes
01f75cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import os

import nibabel as nib
import SimpleITK as sitk
from nibabel import processing
from nibabel.orientations import aff2axcodes, axcodes2ornt, ornt_transform


def N4_Bias_Field_Correction(input_path, output_path):
    """
    Perform N4 Bias Field Correction on an input image and save the corrected image to the specified output path.

    Args:
        input_path (str): Path to the input image file.
        output_path (str): Path to save the corrected image file.

    Returns:
        None
    """
    raw_img_sitk = sitk.ReadImage(input_path, sitk.sitkFloat32)
    transformed = sitk.RescaleIntensity(raw_img_sitk, 0, 255)
    transformed = sitk.LiThreshold(transformed, 0, 1)
    head_mask = transformed
    shrinkFactor = 4
    inputImage = sitk.Shrink(raw_img_sitk, [shrinkFactor] * raw_img_sitk.GetDimension())
    maskImage = sitk.Shrink(head_mask, [shrinkFactor] * raw_img_sitk.GetDimension())
    bias_corrector = sitk.N4BiasFieldCorrectionImageFilter()
    corrected = bias_corrector.Execute(inputImage, maskImage)
    log_bias_field = bias_corrector.GetLogBiasFieldAsImage(raw_img_sitk)
    corrected_image_full_resolution = raw_img_sitk / sitk.Exp(log_bias_field)
    sitk.WriteImage(corrected_image_full_resolution, output_path)
    return


def preprocessing(ipath, output_dir, basename):
    """
    Preprocesses a medical image by performing N4 bias field correction and conforming the image to a specified shape and voxel size.

    Args:
        ipath (str): The input file path of the medical image to be processed.
        output_dir (str): The directory where the processed image will be saved.
        basename (str): The base name for the output file.

    Returns:
        tuple: A tuple containing:
            - odata (nibabel.Nifti1Image): The N4 bias field corrected image.
            - data (nibabel.Nifti1Image): The conformed image with specified shape and voxel size.
    """
    opath = os.path.join(output_dir, f"original/{basename}_N4.nii")
    N4_Bias_Field_Correction(ipath, opath)
    odata = nib.squeeze_image(nib.as_closest_canonical(nib.load(opath)))
    data = processing.conform(odata, out_shape=(256, 256, 256), voxel_size=(1.0, 1.0, 1.0), order=1)
    return odata, data