Parámetros funcionales#

Un concepto fundamental del lenguaje Python es la programación funcional: Definimos funciones y las aplicamos a nuestros datos.

import numpy as np 

values = np.asarray([1, 2, 3, 4, 10])
def double_number(x):
    return x * 2
double_number(values)
array([ 2,  4,  6,  8, 20])

En Python también puedes tener variables que contienen una función y pueden ser ejecutadas:

my_function = double_number

my_function(values)
array([ 2,  4,  6,  8, 20])

Parámetros funcionales personalizados#

También puedes definir tus propias funciones que tomen parámetros funcionales. Por ejemplo, podemos definir una función count_blobs que toma una image y una función threshold_algorithm como parámetros.

import matplotlib.pyplot as plt
from skimage.measure import label

def count_blobs(image, threshold_algorithm):
    # binarize the image using a given 
    # threshold-algorithm
    threshold = threshold_algorithm(image)
    binary = image > threshold
    
    # show intermediate result
    # plt.imshow(binary)
    
    # return count blobs
    labels = label(binary)
    return labels.max()

Ahora abrimos una imagen y la analizamos dos veces.

from skimage.io import imread, imshow

blobs_image = imread('../../data/blobs.tif')

imshow(blobs_image)
<matplotlib.image.AxesImage at 0x17968acd0>
../_images/05dbb9e7395c2944b360ead71bdaae0c366bad17ce7958c6cbb8002d921ca585.png

Ahora contamos los blobs en esta imagen con dos algoritmos diferentes que proporcionamos como parámetro:

from skimage.filters import threshold_otsu

count_blobs(blobs_image, threshold_otsu)
64
from skimage.filters import threshold_yen

count_blobs(blobs_image, threshold_yen)
67

Ejercicio#

Supongamos que quieres averiguar qué algoritmo de umbral funciona mejor para tu imagen. Por lo tanto, es posible que desees echar un vistazo a la imagen umbralizada por múltiples algoritmos. Define una lista de algoritmos de umbral, por ejemplo, de esta lista. Programa un bucle for que aplique los algoritmos de umbral a la imagen de blobs y muestre los resultados. El resultado debería ser similar a este ejemplo.