|
| 1 | +--- |
| 2 | +title: 3D Objects Counter+ |
| 3 | +description: 3D object counting in Fiji/ImageJ with fixed min/max filters for morphology, volume, Feret diameter, and intensity. |
| 4 | +categories: [Analysis, 3D, Particle Analysis] |
| 5 | +source-url: https://github.com/Jay2owe/3DObjectsCounterPlus |
| 6 | +update-site: 3DObjectsCounterPlus |
| 7 | +release-version: 0.1.0 |
| 8 | +release-date: 2026-05-17 |
| 9 | +dev-status: Active |
| 10 | +support-status: Active |
| 11 | +team-maintainers: '@Jay2owe' |
| 12 | +license-url: https://github.com/Jay2owe/3DObjectsCounterPlus/blob/main/LICENSE |
| 13 | +license-label: BSD-3-Clause |
| 14 | +--- |
| 15 | + |
| 16 | +3D Objects Counter+ is a Fiji/ImageJ plugin for counting and measuring thresholded 3D objects in image stacks. It extends the native [3D Objects Counter](/plugins/3d-objects-counter) workflow with fixed min/max filters for object shape, volume, surface area, Feret diameter, and intensity. |
| 17 | + |
| 18 | +The plugin is designed for users who want the familiar threshold, size-filter, map, statistics, measurement redirect, and macro workflow of 3D Objects Counter, with additional morphology filters before the final maps and result tables are created. |
| 19 | + |
| 20 | +## Installation |
| 21 | + |
| 22 | +3D Objects Counter+ is distributed through the ImageJ update site: |
| 23 | + |
| 24 | +{% include link-banner url="https://sites.imagej.net/3DObjectsCounterPlus/" %} |
| 25 | + |
| 26 | +To install it: |
| 27 | + |
| 28 | +1. Start Fiji. |
| 29 | +2. Choose {% include bc path="Help|Update..." %}. |
| 30 | +3. Click **Manage update sites**. |
| 31 | +4. Click **Add Unlisted Site**, or enable **3DObjectsCounterPlus** if it is already listed. |
| 32 | +5. Use: |
| 33 | + - Name: `3DObjectsCounterPlus` |
| 34 | + - URL: `https://sites.imagej.net/3DObjectsCounterPlus/` |
| 35 | +6. Apply changes and restart Fiji. |
| 36 | + |
| 37 | +After restart, run the command from: |
| 38 | + |
| 39 | +```text |
| 40 | +Analyze > 3D Objects Counter+ |
| 41 | +``` |
| 42 | + |
| 43 | +## Main Workflow |
| 44 | + |
| 45 | +Open a 3D stack, then run **Analyze > 3D Objects Counter+**. The dialog opens with the title `3D Objects Counter+`. |
| 46 | + |
| 47 | +The main controls are: |
| 48 | + |
| 49 | +- `Image`, which shows the stack that will be counted. |
| 50 | +- `Threshold`, which sets the voxel-intensity cutoff for object detection. |
| 51 | +- `Slice`, which changes the displayed z-slice while checking the threshold. |
| 52 | +- `Filters:`, which contains fixed `Min` and `Max` ranges. |
| 53 | +- `Exclude objects on edges`, which removes objects touching the stack border. |
| 54 | +- `Maps to show:`, with `Objects`, `Surfaces`, `Centroids`, and `Centers of mass`. |
| 55 | +- `Results tables to show:`, with `Statistics` and `Summary`. |
| 56 | +- `Redirect measurements to:`, which measures intensity from another open image while detecting objects from the active image. |
| 57 | +- `Preview`, `OK`, and `Cancel` action buttons. |
| 58 | + |
| 59 | +The help button opens `About 3D Objects Counter+ Controls`, which explains the dialog controls, filter meanings, maps, result tables, and action buttons. |
| 60 | + |
| 61 | +## Threshold And Preview |
| 62 | + |
| 63 | +The dialog starts on the center slice and uses a center-slice IsoData threshold as the initial value. Changing `Threshold` or `Slice` updates the threshold display so voxels at or above the threshold can be inspected before object counting is run. |
| 64 | + |
| 65 | +`Preview` runs object counting with the current settings, shows the selected preview maps, and keeps the dialog open. Preview map windows are prefixed with `[Preview]`. `OK` runs object counting with the current settings, opens the selected final outputs, records macro options when the ImageJ macro recorder is active, and closes the dialog. |
| 66 | + |
| 67 | +## Filters |
| 68 | + |
| 69 | +Filters are fixed min/max ranges. The default ranges are non-excluding, so objects are only removed when a user tightens a minimum or maximum value. |
| 70 | + |
| 71 | +The available filter rows are: |
| 72 | + |
| 73 | +- `Size (Voxels)`, with default minimum `10` and maximum set to the stack voxel count. |
| 74 | +- `Sphericity`, from `0` to `1`. |
| 75 | +- `Compactness`, from `0` to `1`. |
| 76 | +- `Elongation`, from `1` to `Infinity`. |
| 77 | +- `Volume (<unit>^3)`, shown only when the image has calibrated spatial units. |
| 78 | +- `Surface area`, from `0` to `Infinity`. |
| 79 | +- `Mean intensity`, from `0` to `Infinity`. |
| 80 | +- `Max intensity`, from `0` to `Infinity`. |
| 81 | +- `Max Feret diameter`, from `0` to `Infinity`. |
| 82 | + |
| 83 | +Multiple filters are combined with AND logic, so an object must pass every active range to remain in the final result. |
| 84 | + |
| 85 | +## Measurement Redirect |
| 86 | + |
| 87 | +`Redirect measurements to:` lets the active image define the detected objects while another open image supplies intensity measurements and intensity-weighted centers of mass. This is useful when object detection is performed on a mask, filtered stack, or segmentation image, while intensity should be measured from a raw channel. |
| 88 | + |
| 89 | +The redirect image must already be open and must match the detection image width, height, and stack depth. |
| 90 | + |
| 91 | +## Outputs |
| 92 | + |
| 93 | +3D Objects Counter+ can create these map windows: |
| 94 | + |
| 95 | +- `Objects map of <image>`, a labelled object map with object numbers at centroids. |
| 96 | +- `Surfaces map of <image>`, a labelled surface-voxel map with object numbers at centroids. |
| 97 | +- `Centroids map of <image>`, a point map at geometric centroids. |
| 98 | +- `Centers of mass map of <image>`, a point map at intensity-weighted centers of mass. |
| 99 | + |
| 100 | +It can also create: |
| 101 | + |
| 102 | +- `Results for <image>`, a per-object statistics table. |
| 103 | +- An ImageJ log summary reporting the threshold, size range, object count, and morphology means. |
| 104 | + |
| 105 | +The statistics table includes native-style measurements such as integrated density, mean, standard deviation, minimum, maximum, centroids (`X`, `Y`, `Z`), centers of mass (`XM`, `YM`, `ZM`), bounding-box fields, object labels, and morphology columns such as `Morph_Sphericity`, `Morph_Compactness`, `Morph_Elongation`, and `Morph_Feret3D_um`. |
| 106 | + |
| 107 | +For very high object counts, text-number overlays can be skipped to keep map windows lighter. The map pixel labels and statistics table are still produced. |
| 108 | + |
| 109 | +## Supported Inputs |
| 110 | + |
| 111 | +The interactive command works on the active Fiji/ImageJ image. It expects a non-empty image stack for 3D object counting. Standard Fiji installations provide the underlying ImageJ image model and the native 3D Objects Counter components used by the plugin. |
| 112 | + |
| 113 | +Calibrated volume filtering appears when the image has real spatial calibration units rather than pixel-only units. Intensity filters and centers of mass are measured from the detection image unless a redirect image is selected. |
| 114 | + |
| 115 | +## Macro Usage |
| 116 | + |
| 117 | +3D Objects Counter+ is macro-recordable and can be called from ImageJ macros: |
| 118 | + |
| 119 | +```ijm |
| 120 | +run("3D Objects Counter+", "threshold=128"); |
| 121 | +``` |
| 122 | + |
| 123 | +A fuller call can combine thresholding, size limits, edge exclusion, measurement redirect, morphology filters, and output visibility: |
| 124 | + |
| 125 | +```ijm |
| 126 | +run("3D Objects Counter+", |
| 127 | + "threshold=128 min=20 max=Infinity " + |
| 128 | + "exclude_edges sphericity>=0.6 volume>=100 " + |
| 129 | + "redirect=[raw.tif] hide_surfaces hide_centroids"); |
| 130 | +``` |
| 131 | + |
| 132 | +Supported direct filter tokens include `volume`, `volume_calibrated`, `surface_area`, `sphericity`, `compactness`, `elongation`, `mean_intensity`, `max_intensity`, and `feret_diameter_max`. Supported operators are `>=`, `<=`, `>`, and `<`. |
| 133 | + |
| 134 | +Output windows can be hidden with `hide_labels`, `hide_surfaces`, `hide_centroids`, `hide_centers_of_mass`, `hide_stats`, and `hide_summary`. The British spelling `hide_centres_of_mass` is also accepted. |
| 135 | + |
| 136 | +## Java API |
| 137 | + |
| 138 | +The public Java API lives under `sc.fiji.oc3dplus.api`. The main entry point is `OC3DPlus`, with parameters built through `OC3DPlusParameters` and results returned as `OC3DPlusResult`. |
| 139 | + |
| 140 | +```java |
| 141 | +OC3DPlusParameters params = OC3DPlus.builder() |
| 142 | + .threshold(128) |
| 143 | + .minSize(20) |
| 144 | + .addFilter("sphericity", ">=", 0.6) |
| 145 | + .build(); |
| 146 | + |
| 147 | +OC3DPlusResult result = OC3DPlus.count(imp, params); |
| 148 | +``` |
| 149 | + |
| 150 | +The API can count one image or process lists of images without opening ImageJ result windows. |
| 151 | + |
| 152 | +## Runtime Dependencies |
| 153 | + |
| 154 | +The plugin requires Fiji/ImageJ and uses the standard Fiji 3D object-counting stack. The update site records dependencies on ImageJ, `mcib3d-core`, the native `3D_Objects_Counter`, and `Colocalization_Image_Creator`, so normal update-site installation resolves the runtime files. |
| 155 | + |
| 156 | +## Citing |
| 157 | + |
| 158 | +When publishing work that uses 3D Objects Counter+, cite the plugin using the citation metadata in the source repository. Please also cite the upstream tools it builds on: the original 3D Objects Counter work by Bolte and Cordelieres, and the mcib3d work by Ollion and colleagues. |
0 commit comments