Wiederhole dich nicht#
Manchmal kopieren und fügen wir Code mehrmals ein, um Bilder schnell zu verarbeiten. Langfristig ist diese Code-Duplizierung nicht gut für die Code-Qualität, denn wenn wir etwas ändern wollen, müssen wir es an mehreren Stellen ändern und könnten einige vergessen. Daher ist die Vermeidung von sich wiederholendem Code entscheidend. Das Software-Design-Prinzip wird Don’t repeat yourself (Wiederhole dich nicht) genannt.
import pyclesperanto_prototype as cle
image = cle.imread("../../data/BBBC007_batch/17P1_POS0013_D_1UL.tif")
labels = cle.voronoi_otsu_labeling(image, spot_sigma=3)
number_of_nuclei = labels.max()
number_of_nuclei
44.0
image = cle.imread("../../data/BBBC007_batch/20P1_POS0005_D_1UL.tif")
labels = cle.voronoi_otsu_labeling(image, spot_sigma=3)
number_of_nuclei = labels.max()
number_of_nuclei
41.0
image = cle.imread("../../data/BBBC007_batch/20P1_POS0007_D_1UL.tif")
labels = cle.voronoi_otsu_labeling(image, spot_sigma=3)
number_of_nuclei = labels.max()
number_of_nuclei
73.0
Wenn wir jetzt sehen wollten, wie sich eine Änderung des spot_sigma
Parameters oben auf das Ergebnis auswirkt, müssten wir diesen Wert dreimal ändern. Wenn der Code noch länger wird, kann es passieren, dass wir vergessen, ihn an einer Stelle zu ändern.
For-Schleifen statt Code-Wiederholung#
Eine Möglichkeit, Code-Wiederholungen zu vermeiden, sind For-Schleifen.
folder = "../../data/BBBC007_batch/"
files = ["17P1_POS0013_D_1UL.tif",
"20P1_POS0005_D_1UL.tif",
"20P1_POS0007_D_1UL.tif"]
for file in files:
image = cle.imread(folder + file)
labels = cle.voronoi_otsu_labeling(
image,
spot_sigma=3)
number_of_nuclei = labels.max()
print(file, number_of_nuclei)
17P1_POS0013_D_1UL.tif 44.0
20P1_POS0005_D_1UL.tif 41.0
20P1_POS0007_D_1UL.tif 73.0
Funktionen statt Code-Wiederholung#
Wir können noch mehr Flexibilität gewinnen, indem wir sogenannte Hilfsfunktionen einführen, die uns helfen, indem sie eine bestimmte Aufgabe erledigen, zum Beispiel das Zählen von Zellkernen:
def count_nuclei(image, spot_sigma=3):
labels = cle.voronoi_otsu_labeling(
image,
spot_sigma=spot_sigma)
number_of_nuclei = labels.max()
return number_of_nuclei
count_nuclei(cle.imread(folder + files[0]))
44.0
count_nuclei(cle.imread(folder + files[1]))
41.0
count_nuclei(cle.imread(folder + files[2]))
73.0
count_nuclei(cle.imread(folder + files[2]), spot_sigma=5)
68.0