New Fiji plugin: LocalZProjector for projecting 3D volumes on 2D planes

Hello all.

I would like to introduce a new Fiji plug in that we just made a preprint of, with @sebherbert, Leo Valon and friends.

LocalZProjector is a Fiji plugin, using ImageJ2 structures, that aims at projecting 3D volumes on 2D planes. So the goal is that same as the Maximum Intensity Projection (MIP) but we try to only include the signal of interest in the projection, discarding the spurious signal coming from elsewhere.

It is based on a simple concept: a tunable pre-filter is used to ‘find’ the surface of interest using e.g. the local contrast (e.g. with std filter). We get a height map from it and we regularize it with a tunable median filter.

We developed it because with our samples there is a lot of spurious unwanted signal (auto-fluo, dead cells, …).

Good ol’ MIP generates ugly projections with little hope for subsequent analysis. Ideally you want to extract the signal only from around the surface of interest.

Several excellent tools exist that do that: PreMosa, FastSME, MinCostZSurface, SurfCutJ, etc… (reviewed and compared in the preprint).
But unfortunately we found out that some of our samples were challenging. And we also wanted to process large 3D stacks.
Here is the comparison of the MIP (left) vs LZP (right) on a 42 GB stack (acquired with a DiSPIM, deskwed and rotated):


This approach is common, but we did our best to have it in a useful package.
LZP can deal with large images, without any additional preprocessing step. Just open your large image with the ‘Open as Virtual stack’ of ImageJ and you are good.
Also it can deal with multi-C, time-lapses without efforts.
It relies on IJ2 structures, is multithreaded and fast.
And it is scriptable (scripts/ · master · IAH public / LocalZProjector · GitLab).

There is a companion app in MATLAB called DeProj, to get accurate morphology measurements from these projections.
2D projections are great (easier to segment, to visualize and smaller disk space), but for curved samples they distort the geometry. And the distortion can be very strong.

So DeProj takes the cell segmentation (a B&W mask) generated from the projection (use Epyseg, TissueMiner, MorpholibJ etc to build it) and the height-map (the Z position of the reference surface, generated as second output of LocalZProjector) and correct for the distortion.

It does all the last step of analysis (get cells from mask, deproject, measure etc) and outputs results tables and visualizations:

The tools are made to be easy to use and are expected to work turnkey. They are open-source and we hope they will be useful for your projects:

To install LocalZProjector in Fiji:


It is definitely a very nice plugin. I will try to integrate with DRPPP. May be in combination with dynamically adjusted scanning it will give even better results.

1 Like

Thanks! I did not know about DRPPP
Is this the one?

Thanks! DRPPP is a Deep Resolution Plant Phenotyping Platform: A multidisciplinary platform combined plant science (plant growth), 3D imaging (labeling, sample preparations, mounting, dynamically adjust scanning), and informatics (image processing, data extraction, mathematical modeling). All in one hand.

The detailed description is on the website.

Cool! Let me know how I can help.
Is the software in MATLAB? I could not find its website.

Dear Jean-Yves, you can find more details under this link:

Thank you for the nice documentation. The parameter sweep for other methods like MinCostZ is also very helpful. I was trying to run the script and I get error in line 7 — from net.imagej import Dataset — . The error message says — A Dataset is required but none existed. — I am new to Jython so maybe it is some obvious issue. :slight_smile: Could you please help me with this, I want to try it out on a timeseries.

1 Like

Hey @abhijeetkrishna, the script looks for an active image and executes on this image. Try to open your image of interest first and then run the script.


Oh I see. Thanks! It works now.

1 Like

Hello @abhijeetkrishna

The plugin must work for time series as well. If it does not, it is a bug.

We just added 2 test datasets on Zenodo to play with the software, linked here: