Génération de piles de caractéristiques#
Les algorithmes d’apprentissage automatique tels que les classificateurs de forêts aléatoires, par exemple tels qu’implémentés dans APOC, utilisent des piles de caractéristiques pour la classification des pixels. Les piles de caractéristiques sont des listes d’images de même taille (2D ou 3D). APOC propose une fonction utilitaire pour générer des piles de caractéristiques. Elle prend une image et une chaîne de spécification de caractéristiques en entrée pour produire une pile de caractéristiques.
Commençons par charger une image d’exemple et créer une fonction pratique pour la visualisation :
from skimage.io import imread, imshow
import numpy as np
import apoc
import matplotlib.pyplot as plt
Nous commençons à nouveau avec l’image d’exemple des taches.
image = imread('../../data/blobs.tif')
imshow(image)
<matplotlib.image.AxesImage at 0x7f9ba9333580>
Nous définissons en outre une fonction utilitaire pour visualiser les piles de caractéristiques.
def visualize(feature_stack):
"""
Affiche des listes d'images en rangées de trois
"""
if len(feature_stack) == 0:
return
# affiche les images de caractéristiques
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()
Piles de caractéristiques#
Une pile de caractéristiques est une liste d’images 2D ou 3D, généralement dérivées d’une image originale. Si vous ne spécifiez aucune spécification de caractéristiques, une pile sera générée avec l’image originale, une version floue et une image de contours :
feature_stack = apoc.generate_feature_stack(image)
visualize(feature_stack)
Il existe également des ensembles de caractéristiques prédéfinis :
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
Définitions de caractéristiques personnalisées#
Vous pouvez en outre définir des caractéristiques spécifiques correspondant aux filtres 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)
Vous pouvez également faire varier les rayons / sigmas des caractéristiques :
feature_stack = apoc.generate_feature_stack(image, "gaussian_blur=1 gaussian_blur=5 gaussian_blur=10 gaussian_blur=20")
visualize(feature_stack)
De plus, certaines caractéristiques peuvent être combinées, par exemple vous pouvez calculer le sobel d’un gaussien ou un laplacien d’un gaussien
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)