Seleccionar etiquetas usando aprendizaje automático#
apoc permite seleccionar objetos etiquetados según propiedades como tamaño, forma e intensidad en una imagen correspondiente. En este ejemplo, seleccionaremos objetos alargados de una segmentación de instancias de manchas.
import apoc
from skimage.io import imread
import pyclesperanto_prototype as cle
import numpy as np
cle.select_device('RTX')
<NVIDIA GeForce RTX 3050 Ti Laptop GPU on Platform: NVIDIA CUDA (1 refs)>
image = imread('../../data/blobs.tif')
labels = cle.label(cle.threshold_otsu(image))
annotation = imread('../../data/label_annotation.tif')
cle.imshow(image)
cle.imshow(labels, labels=True)
cle.imshow(annotation, labels=True)
Entrenamiento#
Para entrenar el clasificador, necesitas especificar características. A continuación, usamos la intensidad media y la desviación estándar dentro de los objetos etiquetados, así como el tamaño y la forma del objeto.
features = 'area,mean_max_distance_to_centroid_ratio,standard_deviation_intensity'
cl_filename = "object_selector.cl"
# Create an object classifier
apoc.erase_classifier(cl_filename) # delete it if it was existing before
classifier = apoc.ObjectSelector(cl_filename, positive_class_identifier=1)
# train it
classifier.train(features, labels, annotation, image)
Predicción#
Después de que el clasificador ha sido entrenado, podemos usarlo para seleccionar objetos.
result = classifier.predict(labels, image)
print(result.max())
cle.imshow(result, labels=True)
23.0
También se puede cargar el clasificador desde el disco y aplicarlo a otro conjunto de datos. Demostramos esto aplicando el clasificador a una versión rotada de la imagen y la imagen de etiquetas de arriba.
image1 = image.T
labels1 = cle.label(cle.threshold_otsu(image1))
classifier = apoc.ObjectSelector(cl_filename)
result = classifier.predict(labels1, image1)
print(result.max())
cle.imshow(result, labels=True)
23.0
Después del entrenamiento, podemos preguntarle al clasificador qué tan importantes fueron las características al hacer la predicción.
classifier.feature_importances()
{'area': 0.29573084473661354,
'mean_max_distance_to_centroid_ratio': 0.4264564597125618,
'standard_deviation_intensity': 0.27781269555082466}
Ejercicio#
Usa el código y las imágenes de ejemplo anteriores para entrenar un clasificador que seleccione todos los objetos pequeños en la imagen de etiquetas.