Funktionale Parameter#

Ein Kernkonzept der Python-Sprache ist die funktionale Programmierung: Wir definieren Funktionen und wenden sie auf unsere Daten an.

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])

In Python können Sie auch Variablen haben, die eine Funktion enthalten und ausgeführt werden können:

my_function = double_number

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

Benutzerdefinierte funktionale Parameter#

Sie können auch Ihre eigenen Funktionen definieren, die funktionale Parameter annehmen. Zum Beispiel können wir eine count_blobs-Funktion definieren, die ein image und eine threshold_algorithm-Funktion als Parameter nimmt.

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()

Wir öffnen nun ein Bild und analysieren es zweimal.

from skimage.io import imread, imshow

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

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

Wir zählen nun die Blobs in diesem Bild mit zwei verschiedenen Algorithmen, die wir als Parameter übergeben:

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

Übung#

Angenommen, Sie möchten herausfinden, welcher Schwellenwert-Algorithmus für Ihr Bild am besten funktioniert. Dazu möchten Sie sich das Bild ansehen, das von mehreren Algorithmen mit einem Schwellenwert versehen wurde. Definieren Sie eine Liste von Schwellenwert-Algorithmen, z.B. aus dieser Liste. Programmieren Sie eine For-Schleife, die die Schwellenwert-Algorithmen auf das Blobs-Bild anwendet und die Ergebnisse anzeigt. Das Ergebnis sollte diesem Beispiel ähneln.