|
|
import os
|
|
|
import nibabel as nib
|
|
|
import numpy as np
|
|
|
import tensorflow as tf
|
|
|
from tensorflow.keras.layers import Conv2D, Activation, BatchNormalization, MaxPooling2D, Flatten, Dense
|
|
|
from tensorflow.keras.models import Sequential
|
|
|
from tensorflow.keras.preprocessing import image
|
|
|
|
|
|
|
|
|
model = Sequential()
|
|
|
|
|
|
|
|
|
model.add(Conv2D(96, (9, 9), strides=(4, 4), padding='valid', input_shape=(224, 224, 1)))
|
|
|
model.add(Activation('relu'))
|
|
|
model.add(BatchNormalization())
|
|
|
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
|
|
|
|
|
|
|
|
|
model.add(Conv2D(256, (7, 7), strides=(1, 1), padding='same'))
|
|
|
model.add(Activation('relu'))
|
|
|
model.add(BatchNormalization())
|
|
|
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
|
|
|
|
|
|
|
|
|
model.add(Conv2D(384, (3, 3), strides=(1, 1), padding='same'))
|
|
|
model.add(Activation('relu'))
|
|
|
|
|
|
|
|
|
model.add(Conv2D(384, (3, 3), strides=(1, 1), padding='same'))
|
|
|
model.add(Activation('relu'))
|
|
|
|
|
|
|
|
|
model.add(Conv2D(256, (3, 3), strides=(1, 1), padding='same'))
|
|
|
model.add(Activation('relu'))
|
|
|
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
|
|
|
|
|
|
|
|
|
model.add(Flatten())
|
|
|
|
|
|
|
|
|
model.add(Dense(4096))
|
|
|
model.add(Activation('relu'))
|
|
|
|
|
|
|
|
|
model.compile(optimizer='adam', loss='categorical_crossentropy')
|
|
|
|
|
|
|
|
|
base_dir = r"C:\Users\pg22\OneDrive - King's College London\Documents\PhD Data\UCSF-PDGM-v3\UCSF_PDGM"
|
|
|
|
|
|
|
|
|
for folder_name in os.listdir(base_dir):
|
|
|
patient_dir = os.path.join(base_dir, folder_name)
|
|
|
|
|
|
|
|
|
if os.path.isdir(patient_dir):
|
|
|
|
|
|
patient_id = folder_name.replace('_nifti', '')
|
|
|
|
|
|
|
|
|
tumor_file = os.path.join(patient_dir, f'{patient_id}_tumor_segmentation.nii.gz')
|
|
|
tumor_data = nib.load(tumor_file).get_fdata()
|
|
|
|
|
|
|
|
|
|
|
|
tumor_data_resized = np.array([image.array_to_img(slice_2d[..., None], scale=False).resize((224, 224)) for slice_2d in tumor_data])
|
|
|
|
|
|
tumor_data_normalized = tumor_data_resized / np.max(tumor_data_resized)
|
|
|
|
|
|
tumor_data_expanded = np.expand_dims(tumor_data_normalized, axis=-1)
|
|
|
|
|
|
|
|
|
features = model.predict(tumor_data_expanded)
|
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
|
|
|
|
dim1 = 64
|
|
|
dim2 = features.size // dim1
|
|
|
|
|
|
|
|
|
features_reshaped = features.reshape((dim1, dim2))
|
|
|
|
|
|
|
|
|
plt.imshow(features_reshaped, cmap='viridis')
|
|
|
plt.colorbar()
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
features_file_path = r"C:\Users\pg22\OneDrive - King's College London\Documents\PhD Data\features.npy"
|
|
|
|
|
|
|
|
|
np.save(features_file_path, features)
|
|
|
|
|
|
|