Detección y localización de tumores cerebrales

Contenidos

  • Cuente los valores de cada clase.
brain_df['mask'].value_counts()
623403-1459003
  • Mostrar aleatoriamente una imagen de resonancia magnética del conjunto de datos.
image = cv2.imread(brain_df.image_path[1301])
plt.imshow(image)
907024-5349408

Image_path almacena la ruta de la resonancia magnética del cerebro para que podamos mostrar la imagen usando matplotlib.

Sugerencia: la parte verdosa de la imagen de arriba se puede considerar como el tumor.

  • Además, muestre la imagen de máscara correspondiente.
image1 = cv2.imread(brain_df.mask_path[1301])
plt.imshow(image1)
215495-5315675

Ahora, es posible que haya captado la pista de lo que realmente es la máscara. La máscara es la imagen de la parte del cerebro afectada por un tumor de la imagen de resonancia magnética correspondiente. Aquí, la máscara es de la resonancia magnética cerebral que se muestra arriba.

  • Analice los valores de píxeles de la imagen de la máscara.
cv2.imread(brain_df.mask_path[1301]).max()

Salida: 255

El valor máximo de píxeles en la imagen de la máscara es 255, lo que indica el color blanco.

cv2.imread(brain_df.mask_path[1301]).min()

Salida: 0

El valor mínimo de píxeles en la imagen de la máscara es 0, lo que indica el color negro.

  • Visualización de la resonancia magnética del cerebro, la máscara correspondiente y la resonancia magnética con la máscara.
count = 0
fig, axs = plt.subplots(12, 3, figsize = (20, 50))
for i in range(len(brain_df)):
  if brain_df['mask'][i] ==1 and count <5:
    img = io.imread(brain_df.image_path[i])
    axs[count][0].title.set_text('Brain MRI')
    axs[count][0].imshow(img)
    
    mask = io.imread(brain_df.mask_path[i])
    axs[count][1].title.set_text('Mask')
    axs[count][1].imshow(mask, cmap = 'gray')
    
    img[mask == 255] = (255, 0, 0) #Red color
    axs[count][2].title.set_text('MRI with Mask')
    axs[count][2].imshow(img)
    count+=1

fig.tight_layout()
437678-2925223
  • Elimine la identificación, ya que no es necesaria para su procesamiento.
# Drop the patient id column
brain_df_train = brain_df.drop(columns = ['patient_id'])
brain_df_train.shape

Obtendrá el tamaño del marco de datos en la salida: (3929, 3)

  • Convierta los datos en la columna de máscara de formato entero a formato de cadena, ya que necesitaremos los datos en formato de cadena.
brain_df_train['mask'] = brain_df_train['mask'].apply(lambda x: str(x))
brain_df_train.info()
349879-8334281

Como puede ver, ahora cada característica tiene el tipo de datos como objeto.

  • Divida los datos en conjuntos de prueba y de tren.
# split the data into train and test data
from sklearn.model_selection import train_test_split
train, test = train_test_split(brain_df_train, test_size = 0.15)
  • Aumente más datos con ImageDataGenerator. ImageDataGenerator genera lotes de datos de imágenes de tensores con aumento de datos en tiempo real.

Referir aquí para obtener más información sobre ImageDataGenerator y los parámetros en detalle.

Crearemos un train_generator y validation_generator a partir de los datos del tren y un test_generator a partir de los datos de prueba.

# create an image generator
from keras_preprocessing.image import ImageDataGenerator

#Create a data generator which scales the data from 0 to 1 and makes validation split of 0.15
datagen = ImageDataGenerator(rescale=1./255., validation_split = 0.15)

train_generator=datagen.flow_from_dataframe(
dataframe=train,
directory= './',
x_col="image_path",
y_col="mask",
subset="training",
batch_size=16,
shuffle=True,
class_mode="categorical",
target_size=(256,256))

valid_generator=datagen.flow_from_dataframe(
dataframe=train,
directory= './',
x_col="image_path",
y_col="mask",
subset="validation",
batch_size=16,
shuffle=True,
class_mode="categorical",
target_size=(256,256))

# Create a data generator for test images
test_datagen=ImageDataGenerator(rescale=1./255.)

test_generator=test_datagen.flow_from_dataframe(
dataframe=test,
directory= './',
x_col="image_path",
y_col="mask",
batch_size=16,
shuffle=False,
class_mode="categorical",
target_size=(256,256))
Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.