Ne vous répétez pas#
Parfois, nous copions et collons du code plusieurs fois pour traiter rapidement des images. À long terme, cette duplication de code n’est pas bonne pour la qualité du code, car si nous voulons changer quelque chose, nous devons le faire à plusieurs endroits et risquons d’en oublier certains. Ainsi, éviter le code répétitif est essentiel. Le principe de conception logicielle s’appelle Ne vous répétez pas.
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
Si nous voulions maintenant voir comment la modification du paramètre spot_sigma ci-dessus influence le résultat, nous devrions changer cette valeur trois fois. Lorsque le code devient encore plus long, il peut arriver que nous oubliions de le changer à un endroit.
Boucles for au lieu de répétition de code#
Une façon d’éviter la répétition de code consiste à utiliser des boucles for.
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
Fonctions au lieu de répétition de code#
Nous pouvons gagner encore plus de flexibilité en introduisant des fonctions dites auxiliaires, qui nous aident en faisant une chose dédiée, par exemple compter les noyaux :
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