Generando pilas de características#
Los algoritmos de aprendizaje automático como los Clasificadores de Bosque Aleatorio, por ejemplo, implementados en APOC utilizan pilas de características para la clasificación de píxeles. Las pilas de características son listas de imágenes del mismo tamaño (2D o 3D). APOC proporciona una función de utilidad para generar pilas de características. Toma una imagen y una cadena de especificación de características como entrada para producir una pila de características.
Comencemos cargando una imagen de ejemplo y creando una función de conveniencia para la visualización:
from skimage.io import imread, imshow
import numpy as np
import apoc
import matplotlib.pyplot as plt
Comenzamos de nuevo con la imagen de ejemplo de manchas.
image = imread('../../data/blobs.tif')
imshow(image)
<matplotlib.image.AxesImage at 0x7f9ba9333580>
Además, definimos una función de utilidad para visualizar pilas de características.
def visualize(feature_stack):
"""
Shows lists of images in rows of three
"""
if len(feature_stack) == 0:
return
# show feature images
width = 3
height = int(len(feature_stack) / 3)
if height * width < len(feature_stack):
height = height + 1
fig, axes = plt.subplots(height, width, figsize=(10,10))
for i, f in enumerate(feature_stack):
if height > 1:
axes[int(i / 3)][i % 3].imshow(f, cmap=plt.cm.gray)
else:
axes[i].imshow(f, cmap=plt.cm.gray)
w = len(feature_stack) % width
if w > 0:
w = width - w
while (w > 0):
if height > 1:
axes[-1][width - w].set_visible(False)
else:
axes[width - w].set_visible(False)
w = w - 1
plt.show()
Pilas de características#
Una pila de características es una lista de imágenes 2D o 3D, típicamente derivadas de una imagen original. Si no especificas ninguna especificación de características, se generará una pila con la imagen original, una versión borrosa y una imagen de bordes:
feature_stack = apoc.generate_feature_stack(image)
visualize(feature_stack)
También hay algunos conjuntos de características predefinidos:
for f in apoc.PredefinedFeatureSet:
print(f)
visualize(apoc.generate_feature_stack(image, f))
PredefinedFeatureSet.custom
PredefinedFeatureSet.small_quick
PredefinedFeatureSet.medium_quick
PredefinedFeatureSet.large_quick
PredefinedFeatureSet.small_dog_log
PredefinedFeatureSet.medium_dog_log
PredefinedFeatureSet.large_dog_log
PredefinedFeatureSet.object_size_1_to_2_px
PredefinedFeatureSet.object_size_1_to_5_px
PredefinedFeatureSet.object_size_3_to_8_px
PredefinedFeatureSet.object_size_5_to_10_px
PredefinedFeatureSet.object_size_10_to_15_px
PredefinedFeatureSet.object_size_15_to_20_px
PredefinedFeatureSet.object_size_20_to_25_px
PredefinedFeatureSet.object_size_25_to_50_px
PredefinedFeatureSet.object_size_50_to_100_px
Definiciones de características personalizadas#
Además, puedes definir características específicas correspondientes a filtros clesperanto:
feature_stack = apoc.generate_feature_stack(image, "gaussian_blur=3 mean_box=3 top_hat_box=3")
visualize(feature_stack)
feature_stack = apoc.generate_feature_stack(image, "maximum_box=3 difference_of_gaussian=5 sobel=0")
visualize(feature_stack)
También puedes variar los radios / sigmas de las características:
feature_stack = apoc.generate_feature_stack(image, "gaussian_blur=1 gaussian_blur=5 gaussian_blur=10 gaussian_blur=20")
visualize(feature_stack)
Además, algunas características se pueden combinar, por ejemplo, puedes calcular el Sobel de un Gaussiano o un Laplaciano de un Gaussiano
feature_stack = apoc.generate_feature_stack(image, "sobel_of_gaussian_blur=1 sobel_of_gaussian_blur=5 sobel_of_gaussian_blur=10")
visualize(feature_stack)
feature_stack = apoc.generate_feature_stack(image, "laplace_box_of_gaussian_blur=1 laplace_box_of_gaussian_blur=5 laplace_box_of_gaussian_blur=10")
visualize(feature_stack)