Skip to content

Commit a127e5b

Browse files
committed
release: clean public repository surface
1 parent c86a4f1 commit a127e5b

19 files changed

Lines changed: 151 additions & 900 deletions

.github/workflows/ci.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- master
8+
pull_request:
9+
branches:
10+
- main
11+
- master
12+
13+
permissions:
14+
contents: read
15+
16+
jobs:
17+
build:
18+
name: Maven build
19+
runs-on: ubuntu-latest
20+
21+
steps:
22+
- name: Check out repository
23+
uses: actions/checkout@v4
24+
25+
- name: Set up Java
26+
uses: actions/setup-java@v4
27+
with:
28+
distribution: temurin
29+
java-version: "8"
30+
cache: maven
31+
32+
- name: Build and test
33+
run: ./mvnw -B clean verify -Denforcer.skip=true

.gitignore

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
/.claude/
1919
CLAUDE_CONTEXT.md
2020

21-
# Internal engineering plan notes (kept on disk, not published)
22-
/docs/plan/
21+
# Local/private docs and audit notes (not published)
22+
/docs/
23+
/PUBLISHING_AUDIT.md
2324

24-
# Release staging area (drafts for publishing local only, not published)
25+
# Release staging area (drafts for publishing - local only, not published)
2526
/release-staging/
2627

2728
# OS files

.zenodo.json

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"title": "3D Objects Counter+: morphology-filterable 3D object counting for Fiji/ImageJ",
3+
"upload_type": "software",
4+
"description": "A Fiji/ImageJ plugin extending the classic 3D Objects Counter workflow with fixed morphology and intensity filters, macro-recordable options, and a public Java API.",
5+
"creators": [
6+
{
7+
"name": "Malcolm, Jamie",
8+
"affiliation": "UK Dementia Research Institute at Imperial College London",
9+
"orcid": "0009-0008-3862-2776"
10+
}
11+
],
12+
"license": "BSD-3-Clause",
13+
"keywords": [
14+
"Fiji",
15+
"ImageJ",
16+
"microscopy",
17+
"3D object counting",
18+
"morphological filtering",
19+
"segmentation"
20+
],
21+
"related_identifiers": [
22+
{
23+
"identifier": "https://github.com/Jay2owe/3DObjectsCounterPlus",
24+
"relation": "isSupplementTo",
25+
"scheme": "url",
26+
"resource_type": "software"
27+
},
28+
{
29+
"identifier": "10.1111/j.1365-2818.2006.01706.x",
30+
"relation": "cites",
31+
"scheme": "doi",
32+
"resource_type": "publication-article"
33+
},
34+
{
35+
"identifier": "10.1093/bioinformatics/btt276",
36+
"relation": "cites",
37+
"scheme": "doi",
38+
"resource_type": "publication-article"
39+
}
40+
]
41+
}

docs/java-api.md renamed to API.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 3D Objects Counter+ Java API
1+
# 3D Objects Counter+ - Java API
22

33
The plugin exposes its engine as a small public API so it can be used as a
44
library from any Java code running inside Fiji (or any JVM with the
@@ -16,7 +16,7 @@ necessary jars on the classpath).
1616
```
1717

1818
This plugin's only runtime requirements are the native Fiji
19-
`3D_Objects_Counter` and `mcib3d-core` jars both supplied by Fiji's core
19+
`3D_Objects_Counter` and `mcib3d-core` jars - both supplied by Fiji's core
2020
update site and the standard 3D ImageJ Suite. Once the 3D Objects Counter+
2121
update site is published, users running that update site should have the
2222
needed jars.
@@ -27,13 +27,13 @@ All under `sc.fiji.oc3dplus.api`.
2727

2828
| Class | Purpose |
2929
| --- | --- |
30-
| `OC3DPlus` | Static façade with `count()`, `detect()`, `countAll()`, `builder()`. |
30+
| `OC3DPlus` | Static facade with `count()`, `detect()`, `countAll()`, `builder()`. |
3131
| `OC3DPlus.Builder` | Fluent builder for `OC3DPlusParameters`. |
3232
| `OC3DPlusParameters` | Immutable parameter bundle. |
3333
| `OC3DPlusResult` | Per-call result: stats, label image, per-filter survivor counts. |
3434
| `MorphPredicate` | Single `feature OP value` filter. `parse()` / `format()` for macro use. |
3535

36-
## Example 1 simple count, no filters
36+
## Example 1 - simple count, no filters
3737

3838
```java
3939
import ij.ImagePlus;
@@ -54,7 +54,7 @@ System.out.println("Objects: " + result.objectCount());
5454
result.statistics().show("OC3D+ Results");
5555
```
5656

57-
## Example 2 with morph filtering
57+
## Example 2 - with morph filtering
5858

5959
```java
6060
import ij.ImagePlus;
@@ -82,7 +82,7 @@ for (int i = 0; i < labels.length; i++) {
8282
}
8383
```
8484

85-
## Example 3 headless batch (parallel)
85+
## Example 3 - headless batch (parallel)
8686

8787
```java
8888
import ij.ImagePlus;
@@ -108,11 +108,11 @@ for (int i = 0; i < images.size(); i++) {
108108
}
109109
```
110110

111-
`countAll` shares no state across threads `params` is immutable and each
111+
`countAll` shares no state across threads - `params` is immutable and each
112112
worker constructs its own engine instance. Results are returned in input
113113
order.
114114

115-
The Java façade methods return `OC3DPlusResult` objects directly. They do not
115+
The Java facade methods return `OC3DPlusResult` objects directly. They do not
116116
show images, open table windows, mutate the input image, or write to ImageJ's
117117
global Results window; callers choose what to display or save. The engine may
118118
update ImageJ status text while it runs.
@@ -122,7 +122,7 @@ update ImageJ status text while it runs.
122122
| Feature name | Source | Units |
123123
| --- | --- | --- |
124124
| `volume` | `MeasureVolume.getVolumePix` | voxels |
125-
| `surface_area` | `MeasureSurface.getSurfaceContactUnit` | calibrated² |
125+
| `surface_area` | `MeasureSurface.getSurfaceContactUnit` | calibrated^2 |
126126
| `sphericity` | `MeasureCompactness.SPHER_CORRECTED` | unitless 0..1 |
127127
| `compactness` | `MeasureCompactness.COMP_CORRECTED` | unitless |
128128
| `elongation` | `MeasureEllipsoid.ELL_ELONGATION` | unitless |

CHANGELOG.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Changelog
2+
3+
All notable changes to 3D Objects Counter+ are documented here.
4+
5+
## [0.1.0] - 2026-05-17
6+
7+
### Added
8+
9+
- Fiji/ImageJ command at `Analyze > 3D Objects Counter+`.
10+
- Native-style dialog with threshold and slice controls, live threshold preview,
11+
fixed morphology/intensity filter ranges, map selection, result-table
12+
selection, and optional measurement redirect.
13+
- Public Java API through `OC3DPlus`, `OC3DPlusParameters`, and
14+
`OC3DPlusResult`.
15+
- Macro-recordable options for threshold, size limits, edge exclusion,
16+
measurement redirect, direct morphology filters, and output visibility.
17+
- Object, surface, centroid, and center-of-mass maps with numbered overlays.
18+
- Per-object statistics, summary logging, and public macro/API documentation.
19+
- Streaming filtered measurement path for morphology filters without re-running
20+
unsafe heavyweight map generation.
21+
22+
### Fixed
23+
24+
- Guarded high-fragmentation filtered stacks against ImageJ application stalls
25+
caused by expensive legacy object-map pathways.
26+
- Preserved morphology result columns for filtered runs, including filters that
27+
do not directly use every morphology feature.
28+
- Kept object-map labels visible regardless of object count by using overlay
29+
labels instead of changing map pixels.
30+
- Made measurement redirect use processing snapshots so live ImageJ windows are
31+
not read while the engine is running.
32+
33+
### Notes
34+
35+
- The Fiji update site and Zenodo DOI are not live yet.

CITATION.cff

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ repository-code: "https://github.com/Jay2owe/3DObjectsCounterPlus"
1717
url: "https://github.com/Jay2owe/3DObjectsCounterPlus"
1818
license: BSD-3-Clause
1919
version: "0.1.0"
20+
date-released: 2026-05-17
2021
keywords:
2122
- fiji
2223
- imagej
@@ -35,5 +36,3 @@ references:
3536
journal: "Journal of Microscopy"
3637
year: 2006
3738
doi: "10.1111/j.1365-2818.2006.01706.x"
38-
# TODO: add `doi:` once Zenodo concept DOI is minted from the first
39-
# tagged GitHub Release.

README.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 3D Objects Counter+
22

3+
[![CI](https://github.com/Jay2owe/3DObjectsCounterPlus/actions/workflows/ci.yml/badge.svg)](https://github.com/Jay2owe/3DObjectsCounterPlus/actions/workflows/ci.yml)
4+
35
A Fiji/ImageJ plugin for 3D object counting with native-style controls and
46
fixed min/max morphology filters.
57

@@ -9,7 +11,7 @@ It extends the workflow of the native
911
surface area, Feret diameter, and intensity, while keeping the familiar
1012
threshold, size-filter, map, statistics, and macro workflow.
1113

12-
![3D Objects Counter+ dialog](docs/images/3d-objects-counter-plus-dialog.png)
14+
![3D Objects Counter+ dialog](assets/3d-objects-counter-plus-dialog.png)
1315

1416
> **Status:** `0.1.0` is a public pre-release. The Fiji update site is planned
1517
> but not live yet; for now, use a packaged JAR or build from source.
@@ -27,6 +29,12 @@ threshold, size-filter, map, statistics, and macro workflow.
2729

2830
## Install
2931

32+
Requirements:
33+
34+
- Fiji/ImageJ.
35+
- The standard Fiji `3D Objects Counter` and `mcib3d-core` dependencies, which
36+
are provided by Fiji's core update sites.
37+
3038
Manual install:
3139

3240
1. Build or download `3D_Objects_Counter_Plus-<version>.jar`.
@@ -177,8 +185,18 @@ OC3DPlusParameters params = OC3DPlus.builder()
177185
OC3DPlusResult result = OC3DPlus.count(imp, params);
178186
```
179187

180-
See [docs/java-api.md](docs/java-api.md) for API details and
181-
[docs/macro-examples.ijm](docs/macro-examples.ijm) for macro examples.
188+
See [API.md](API.md) for API details and
189+
[examples/macro-examples.ijm](examples/macro-examples.ijm) for macro examples.
190+
191+
## How It Works
192+
193+
3D Objects Counter+ first labels thresholded 3D objects with the classic Fiji
194+
3D Objects Counter path. When extra filters are enabled, it measures morphology
195+
and intensity features from the label map, applies the selected ranges, and then
196+
builds the requested maps and results from the filtered label image.
197+
198+
This keeps the default no-extra-filter workflow close to the classic plugin
199+
while avoiding expensive legacy map-generation paths for filtered runs.
182200

183201
## Outputs
184202

File renamed without changes.
File renamed without changes.

docs/fixed_bugs/high-fragmentation-map-memory-guard.md

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)