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>
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.