Wiki
Clone wikianima / Parallelization of processing
Here's a standard solution to parallelizing segmentation & feature extraction
#!Scala import anduril.builtin._ import anduril.tools._ import anduril.anima._ import org.anduril.runtime._ object ImageAnalysis { var threads=3 val in=INPUT(path="Lots_of_images") val gray=BFConvert(in = in, name = "%o_C_%w", gray = true, png = true, multiplier = 4) val alexa=FolderCleaner(gray, filePattern=".*_C_Alexa.*", rename="re.sub('_C_.* ','_nm',name)").out val dapi=FolderCleaner(gray, filePattern=".*_C_DAPI.*", rename="re.sub('_C_.* ','_nm',name)").out val alexa_split=FolderSplit(alexa, N=threads, link=true) val dapi_split=FolderSplit(dapi, N=threads, link=true) val joined_images=NamedSeq[ImageList]("joined_images") val joined_tables=NamedSeq[CSV]("joined_tables") for ((key,file)<-iterArray(dapi_split.out)) { withName(key) { val nuclei=SegmentImage(in=dapi_split.out(key).force(), method="otsu", corr=0.95) val intensities=IntensityFeatures(mask=nuclei.mask, images=alexa_split.out(key).force(), names=alexa_split.out(key).force()).out val morphology=MorphologyFeatures(mask=nuclei.mask, names=alexa_split.out(key).force()).out joined_tables+=CSVJoin(intensities,morphology).out.force() joined_images+=nuclei.perimeter }} val perimeters=Array2Folder(joined_images,fileMode=".") val tables=CSVListJoin(in=joined_tables,fileCol="") val visualization=MergeImage(in=makeArray(perimeters.out, dapi).force(), colors="W,C") }
Updated