Commit 2fa3bde1 authored by Alessia Marcolini's avatar Alessia Marcolini
Browse files

Import and use new

parent 90f38f72
#%%
import os
from radiomics import featureextractor
from pyradiomics_radler import MyRadiomicsFeaturesExtractor as RadiomicsFeatureExtractor
import SimpleITK as sitk
import numpy as np
import pandas as pd
import os
from pathlib import Path
from tqdm import tqdm
......@@ -14,6 +13,8 @@ import warnings
warnings.filterwarnings("ignore")
# %%
# os.chdir('..')
DATASET = Path('HN_val')
BBOX = 'bbox_64'
VOXEL_SPACING = (1.0, 1.0, 1.0)
......@@ -25,30 +26,23 @@ PIXEL_SPACING = [1.0, 2.0, 3.0, 4.0, 5.0]
#%%
DATADIR = Path('data') / DATASET / 'processed' / 'bbox' / BBOX
OUTDIR = Path('data') / DATASET / 'processed'
OUTFILE = f'radiomics_features_{BBOX}.csv' # output file name
OUTFILE = f'radiomics_features_{BBOX}_radnew21.csv' # output file name
clinical = pd.read_csv(Path('data') / DATASET / 'processed' / f'clinical_{DATASET}.csv')
#%%
params_shape = 'shape.yaml' # param file to use to create the extractor
extractor_shape = featureextractor.RadiomicsFeaturesExtractor(params_shape)
params_shape = '02_radiomics_features_extraction/shape_new.yaml' # param file to use to create the extractor
extractor_shape = RadiomicsFeatureExtractor(params_shape)
params_intensity = 'intensity.yaml' # param file to use to create the extractor
extractor_intensity = featureextractor.RadiomicsFeaturesExtractor(params_intensity)
params_intensity = '02_radiomics_features_extraction/intensity.yaml' # param file to use to create the extractor
extractor_intensity = RadiomicsFeatureExtractor(params_intensity)
params_texture = 'texture.yaml' # param file to use to create the extractor
extractor_texture = featureextractor.RadiomicsFeaturesExtractor(params_texture)
params_texture = '02_radiomics_features_extraction/texture_new.yaml' # param file to use to create the extractor
extractor_texture = RadiomicsFeatureExtractor(params_texture)
filenames = [f for f in os.listdir(DATADIR) if f.endswith('.npy')]
filenames = [f for f in os.listdir(DATADIR) if f.endswith('.npy')][:2]
exclude_list = []
# 'HN-CHUM-011',
# 'HN-HMR-008',
# 'HN-CHUS-043',
# 'HN-HMR-002',
# 'HN-CHUM-010',
# 'HN-HGJ-044',
# ] #'HN-CHUM-020', 'HN-CHUS-093', 'HN-HMR-001', 'HN-HMR-007', 'HN-HMR-017'] # BAD SUV conversion
#%%
def process_file(filename):
......@@ -66,12 +60,15 @@ def process_file(filename):
curr_modality.SetSpacing(VOXEL_SPACING)
modalities.append(curr_modality)
# print(data[-1, :, :, :] == data[1, :, :, :])
# print(np.max(data[-1, :, :, :]))
has_label = np.max(data[-1, :, :, :]) > 0
if has_label:
segmentation = sitk.GetImageFromArray(data[-1, :, :, :].astype(np.uint8))
segmentation.SetSpacing(VOXEL_SPACING)
feature = {}
# shape features
result = extractor_shape.execute(modalities[0], segmentation)
for key, value in result.items():
......@@ -95,28 +92,26 @@ def process_file(filename):
# uniform binning
extractor_texture.settings['binMode'] = 'uniform'
try:
result = extractor_texture.execute(
modality, segmentation
)
for key, value in result.items():
if not key.startswith("general_"):
feature[
f'{key}_{P}_{NB}_uniform_{name}'
] = result[key]
# equalized binning
extractor_texture.settings['binMode'] = 'equal'
result = extractor_texture.execute(
modality, segmentation
)
for key, value in result.items():
if not key.startswith("general_"):
feature[
f'{key}_{P}_{NB}_equalized_{name}'
] = result[key]
except:
broken = True
result = extractor_texture.execute(
modality, segmentation
)
for key, value in result.items():
if not key.startswith("general_"):
feature[
f'{key}_{P}_{NB}_uniform_{name}'
] = result[key]
# equalized binning
extractor_texture.settings['binMode'] = 'equal'
result = extractor_texture.execute(
modality, segmentation
)
for key, value in result.items():
if not key.startswith("general_"):
feature[
f'{key}_{P}_{NB}_equalized_{name}'
] = result[key]
if not broken:
feature['filename'] = filename
......@@ -127,22 +122,32 @@ def process_file(filename):
return feature
else:
return {}
return {'filename': filename, 'patient': patient}
#%% MULTIPROCESS
result = []
for file in filenames:
feat = process_file(file)
result.append(feat)
multiproc = ListMultiprocessing(process_file, N_JOBS)
multiproc.execute(filenames)
result = multiproc.get_result()
print('done')
# %%
# multiproc = ListMultiprocessing(process_file, N_JOBS)
# multiproc.execute(filenames)
# result = multiproc.get_result()
# print('done')
#%% Save features in a Pandas df
features = pd.DataFrame(result)
features.set_index('filename', inplace=True)
print('Number of files: ', features.shape[0])
print('Number of features: ', features.shape[1])
print('Number of features: ', features.shape[1] - 1)
# %%
features.to_csv(OUTDIR / OUTFILE)
# %%
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment