sounds like a very interesting project!
I recently did some projects on big image data counting cell nuclei marked in different channels. That’s definitely doable on the GPU.
In order to manage that amount of data, I’d recommend two strategies (do both! ):
Downsampling: A voxel size of 0.6x0.6x1.5 microns is likely not necessary to detect cells (correct me if I’m wrong or feel free to provide an example image). Furthermore, downstream analysis and visualisation is simplified if your voxels are isotropic. In my workflows I often make isotropic voxels with size 1x1x1 microns. Enough to see nuclei and trivial to compute distances / areas / volumes in physical units later on.
- Process your data set in tiles. Tiling is implemented in CLIJx, just saying, that’s a bit expermental so handle it with care.
Sure, see above. I haven’t tested this one in particular. CLIJ is compatbile with the very most NVidia graphics cards I’ve seen.
Yes, if you manage to make spot-lists out of your detected cells in both channels, you can use generateDistanceMatrix.
Alternatively: If you have cell segmentations as label maps (it’s much harder to get those, I know) you could use generateJaccardIndexMatrix to find out which cells are overlapping between the two channels as demonstrated here.
Yes, the only difference is that in the NEUBIAS video I show distances of all spots in one image to each other. You’re measuring distances between spots in two images. But as you will see, generateDistanceMatrix takes two pointlists as input. It should be straight-forward. One little warning though: If you have a distance matrix of 20000x10000 cells, you can process it on the GPU. However, you can not pull it to ImageJ as it is limited to maximum size of 2D planar images.
Last but not least a general hint independent from CLIJ. You may know this one already, but for others reading here: When processing big data or 3D data, develop your workflow on a small representative 2D crop of your data. When you’re happy with the performance of the workflow, translate it to 3D. As many image processing operations take ages in 3D, it may make sense to translate the workflow to CLIJ in the same step.
Let me know how it goes and if you need further hints.