Prostate-Inference / src /preprocessing /histogram_match.py
Anirudh Balaraman
first commit
d348964
import SimpleITK as sitk
import os
import numpy as np
import nrrd
from tqdm import tqdm
import pandas as pd
import random
import json
from skimage import exposure
import multiprocessing
import logging
def get_histmatched(data, ref_data, mask, ref_mask):
source_pixels = data[mask > 0]
ref_pixels = ref_data[ref_mask > 0]
matched_pixels = exposure.match_histograms(source_pixels, ref_pixels)
matched_img = data.copy()
matched_img[mask > 0] = matched_pixels
return matched_img
def histmatch(args):
files = os.listdir(args.t2_dir)
t2_histmatched_dir = os.path.join(args.output_dir, 't2_histmatched')
dwi_histmatched_dir = os.path.join(args.output_dir, 'DWI_histmatched')
adc_histmatched_dir = os.path.join(args.output_dir, 'ADC_histmatched')
os.makedirs(t2_histmatched_dir, exist_ok=True)
os.makedirs(dwi_histmatched_dir, exist_ok=True)
os.makedirs(adc_histmatched_dir, exist_ok=True)
logging.info("Starting histogram matching")
for file in files:
t2_image, header_t2 = nrrd.read(os.path.join(args.t2_dir, file))
dwi_image, header_dwi = nrrd.read(os.path.join(args.dwi_dir, file))
adc_image, header_adc = nrrd.read(os.path.join(args.adc_dir, file))
ref_t2, _ = nrrd.read(os.path.join(args.project_dir, 'dataset', 't2_reference.nrrd'))
ref_dwi, _ = nrrd.read(os.path.join(args.project_dir, 'dataset', 'dwi_reference.nrrd'))
ref_adc , _ = nrrd.read(os.path.join(args.project_dir, 'dataset', 'adc_reference.nrrd'))
prostate_mask, _ = nrrd.read(os.path.join(args.seg_dir, file))
ref_prostate_mask, _ = nrrd.read(os.path.join(args.project_dir, 'dataset', 'prostate_segmentation_reference.nrrd'))
histmatched_t2 = get_histmatched(t2_image, ref_t2, prostate_mask, ref_prostate_mask)
histmatched_dwi = get_histmatched(dwi_image, ref_dwi, prostate_mask, ref_prostate_mask)
histmatched_adc = get_histmatched(adc_image, ref_adc, prostate_mask, ref_prostate_mask)
nrrd.write(os.path.join(t2_histmatched_dir, file), histmatched_t2, header_t2)
nrrd.write(os.path.join(dwi_histmatched_dir, file), histmatched_dwi, header_dwi)
nrrd.write(os.path.join(adc_histmatched_dir, file), histmatched_adc, header_adc)
args.t2_dir = t2_histmatched_dir
args.dwi_dir = dwi_histmatched_dir
args.adc_dir = adc_histmatched_dir
return args