No te repitas#
A veces, copiamos y pegamos código varias veces para procesar imágenes rápidamente. A largo plazo, esta duplicación de código no es buena para la calidad del código, porque si queremos cambiar algo, necesitamos cambiarlo en múltiples lugares y podemos olvidarnos de algunos. Por lo tanto, evitar el código repetitivo es clave. El principio de diseño de software se llama No te repitas.
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 ahora quisiéramos ver cómo cambiar el parámetro spot_sigma arriba influye en el resultado, tendríamos que cambiar este valor tres veces. Cuando el código se vuelve aún más largo, puede suceder que olvidemos cambiarlo en un lugar.
Bucles for en lugar de repetición de código#
Una forma de evitar la repetición de código son los bucles 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
Funciones en lugar de repetición de código#
Podemos ganar aún más flexibilidad introduciendo las llamadas funciones auxiliares, que nos ayudan haciendo una cosa específica, por ejemplo, contar núcleos:
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