From 8164ffc059e096994118dc324091da8d4c07fff5 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Fri, 5 Apr 2024 22:02:49 +0200 Subject: [PATCH 1/6] POM: Bump parent to pom-scijava-38.0.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d2580a11..6805bb3d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.scijava pom-scijava - 34.1.0 + 38.0.1 sc.fiji From 83eaa1e20df86e0b82153b27755983b923d5ab3f Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Mon, 19 Aug 2024 12:23:54 +0200 Subject: [PATCH 2/6] POM: Bump dependency versions imglib2 -> 7.1.0 imglib2-realtransform -> 4.0.3 imglib2-roi -> 0.15.0 imglib2-cache -> 1.0.0-beta-18 imglib2-algorithm -> 0.15.3 bigdataviewer-core -> 10.6.0 --- pom.xml | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index 6805bb3d..3b2d699b 100644 --- a/pom.xml +++ b/pom.xml @@ -85,24 +85,16 @@ bsd_2 Matthias Arzt - 6.1.0 - 1.0.0-beta-17 - 10.4.6 - 1.0.0-beta-32 - sign,deploy-to-scijava - 10.4.6 - 0.2.0 - 2.0.0 - 6.1.0 - 0.13.2 - 0.3.1 - 1.0.0-beta-17 - 4.0.1 - 0.14.0 - 0.45.0 + 7.1.0 + 4.0.3 + 0.15.0 + 1.0.0-beta-18 + 0.15.3 + 10.6.0 + @@ -198,10 +190,6 @@ sc.fiji bigdataviewer-core - - sc.fiji - bigdataviewer-vistools - net.imglib2 imglib2-realtransform From 1db7ae7edf315965b42bb248b927fd671ab74c80 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Fri, 5 Apr 2024 22:04:14 +0200 Subject: [PATCH 3/6] Adapt API changes introduced by imglib/imglib2-roi#71 --- .../ui/actions/AddLabelingIoAction.java | 2 +- .../sc/fiji/labkit/ui/labeling/Labeling.java | 2 +- .../ui/labeling/LabelingSerializer.java | 2 +- .../labkit/ui/models/ColoredLabelsModel.java | 2 +- .../ui/plugin/MeasureConnectedComponents.java | 6 +- .../weka/TrainableSegmentationSegmenter.java | 2 +- .../ui/utils/sparse/SparseIterableRegion.java | 65 ++++++++++++------- .../sparse/SparseRandomAccessIntType.java | 2 +- .../demo/custom_segmenter/MeanCalculator.java | 2 +- .../ui/labeling/SparseIterableRegionTest.java | 4 +- .../sparse/SparseRandomAccessIntTypeTest.java | 2 +- 11 files changed, 55 insertions(+), 36 deletions(-) diff --git a/src/main/java/sc/fiji/labkit/ui/actions/AddLabelingIoAction.java b/src/main/java/sc/fiji/labkit/ui/actions/AddLabelingIoAction.java index d74bbbee..31b4f0f5 100644 --- a/src/main/java/sc/fiji/labkit/ui/actions/AddLabelingIoAction.java +++ b/src/main/java/sc/fiji/labkit/ui/actions/AddLabelingIoAction.java @@ -84,7 +84,7 @@ private void addLabel(Labeling labeling, Label label, .stream().map(Label::name).collect(Collectors.toList())); if (newLabelName == null) return; Label newLabel = labeling.addLabel(newLabelName); - Cursor cursor = region.cursor(); + Cursor cursor = region.inside().cursor(); RandomAccess> ra = labeling.randomAccess(); while (cursor.hasNext()) { cursor.fwd(); diff --git a/src/main/java/sc/fiji/labkit/ui/labeling/Labeling.java b/src/main/java/sc/fiji/labkit/ui/labeling/Labeling.java index 246f5a8a..73b9b3e5 100644 --- a/src/main/java/sc/fiji/labkit/ui/labeling/Labeling.java +++ b/src/main/java/sc/fiji/labkit/ui/labeling/Labeling.java @@ -142,7 +142,7 @@ public static Labeling fromMap(Map> regions) { new SparseRandomAccessIntType(interval)); RandomAccess> ra = imgLabeling.randomAccess(); regions.forEach((label, region) -> { - Cursor cursor = region.cursor(); + Cursor cursor = region.inside().cursor(); while (cursor.hasNext()) { cursor.fwd(); ra.setPosition(cursor); diff --git a/src/main/java/sc/fiji/labkit/ui/labeling/LabelingSerializer.java b/src/main/java/sc/fiji/labkit/ui/labeling/LabelingSerializer.java index f46eb7a0..f86159f3 100644 --- a/src/main/java/sc/fiji/labkit/ui/labeling/LabelingSerializer.java +++ b/src/main/java/sc/fiji/labkit/ui/labeling/LabelingSerializer.java @@ -266,7 +266,7 @@ private JsonElement regionToJson(Gson gson, IterableRegion region) { JsonArray result = new JsonArray(); - Cursor cursor = region.cursor(); + Cursor cursor = region.inside().cursor(); long[] coords = new long[cursor.numDimensions()]; while (cursor.hasNext()) { cursor.fwd(); diff --git a/src/main/java/sc/fiji/labkit/ui/models/ColoredLabelsModel.java b/src/main/java/sc/fiji/labkit/ui/models/ColoredLabelsModel.java index 2d97e527..76e11c23 100644 --- a/src/main/java/sc/fiji/labkit/ui/models/ColoredLabelsModel.java +++ b/src/main/java/sc/fiji/labkit/ui/models/ColoredLabelsModel.java @@ -141,7 +141,7 @@ public void localizeLabel(final Label label) { private static Interval getBoundingBox(IterableRegion region) { int numDimensions = region.numDimensions(); - Cursor cursor = region.cursor(); + Cursor cursor = region.inside().cursor(); if (!cursor.hasNext()) return null; long[] min = new long[numDimensions]; long[] max = new long[numDimensions]; diff --git a/src/main/java/sc/fiji/labkit/ui/plugin/MeasureConnectedComponents.java b/src/main/java/sc/fiji/labkit/ui/plugin/MeasureConnectedComponents.java index 10c12be8..57ba07ee 100644 --- a/src/main/java/sc/fiji/labkit/ui/plugin/MeasureConnectedComponents.java +++ b/src/main/java/sc/fiji/labkit/ui/plugin/MeasureConnectedComponents.java @@ -114,7 +114,7 @@ public static void addAction(Extensible extensible, LabelingModel model) { static List connectedComponetsSizes(IterableRegion region) { List sizes = new ArrayList<>(); - Cursor cursor = region.cursor(); + Cursor cursor = region.inside().cursor(); SparseRandomAccessIntType visitedImage = new SparseRandomAccessIntType( region); RandomAccess visited = visitedImage.randomAccess(); @@ -124,12 +124,12 @@ static List connectedComponetsSizes(IterableRegion region) { visited.setPosition(cursor); if (visited.get().get() == 0) { currentIndex++; - long countBefore = visitedImage.sparsityPattern().size(); + long countBefore = visitedImage.sparsityPattern().inside().size(); Filter, Pair> filter = ( current, seed) -> current.getA().get() && current.getB().get() == 0; FloodFill.fill(region, visitedImage, cursor, new IntType(currentIndex), new DiamondShape(1), filter); - long countAfter = visitedImage.sparsityPattern().size(); + long countAfter = visitedImage.sparsityPattern().inside().size(); sizes.add(countAfter - countBefore); } } diff --git a/src/main/java/sc/fiji/labkit/ui/segmentation/weka/TrainableSegmentationSegmenter.java b/src/main/java/sc/fiji/labkit/ui/segmentation/weka/TrainableSegmentationSegmenter.java index 354ac610..598ecf14 100644 --- a/src/main/java/sc/fiji/labkit/ui/segmentation/weka/TrainableSegmentationSegmenter.java +++ b/src/main/java/sc/fiji/labkit/ui/segmentation/weka/TrainableSegmentationSegmenter.java @@ -260,7 +260,7 @@ private void trainFrame(Training training, List classes, Labeling labeli ImgPlus image, FeatureCalculator featuresCalculator) { SparseRandomAccessIntType classIndices = getClassIndices(labeling, classes); - if (classIndices.sparsityPattern().size() == 0) + if (classIndices.sparsityPattern().inside().size() == 0) return; DiskCachedCellImg cachedFeatureBlock = cachedFeatureBlock(featuresCalculator, image); diff --git a/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseIterableRegion.java b/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseIterableRegion.java index b0412e3f..f9fd1412 100644 --- a/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseIterableRegion.java +++ b/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseIterableRegion.java @@ -35,6 +35,7 @@ import net.imglib2.AbstractWrappedInterval; import net.imglib2.Cursor; import net.imglib2.Interval; +import net.imglib2.IterableInterval; import net.imglib2.Localizable; import net.imglib2.Point; import net.imglib2.RandomAccess; @@ -56,6 +57,8 @@ public class SparseIterableRegion extends AbstractWrappedInterval final private IntervalIndexer2 indexer; + private final InsideIterable inside; + public SparseIterableRegion(Interval interval) { this(interval, new TLongHashSet()); } @@ -64,6 +67,7 @@ public SparseIterableRegion(Interval interval, TLongSet positions) { super(interval); this.codes = positions; this.indexer = new IntervalIndexer2(interval); + this.inside = new InsideIterable(); } public void add(Localizable position) { @@ -79,43 +83,58 @@ private boolean contains(Localizable position) { } @Override - public Cursor cursor() { - return new SparseRoiCursor(); + public RandomAccess randomAccess() { + return new SparseRoiRandomAccess(); } @Override - public Cursor localizingCursor() { - return cursor(); + public RandomAccess randomAccess(Interval interval) { + return randomAccess(); } @Override - public long size() { - return codes.size(); + public IterableInterval< Void > inside() + { + return inside; } - @Override - public Void firstElement() { - return null; - } + private class InsideIterable extends AbstractWrappedInterval< Interval > implements IterableInterval< Void > + { + InsideIterable() + { + super( SparseIterableRegion.this ); + } - @Override - public Object iterationOrder() { - return null; - } + @Override + public Cursor cursor() { + return new SparseRoiCursor(); + } - @Override - public Iterator iterator() { - return cursor(); - } + @Override + public Cursor localizingCursor() { + return cursor(); + } - @Override - public RandomAccess randomAccess() { - return new SparseRoiRandomAccess(); + @Override + public long size() { + return codes.size(); + } + + @Override + public Void firstElement() { + return null; + } + + @Override + public Object iterationOrder() { + return this; + } } @Override - public RandomAccess randomAccess(Interval interval) { - return randomAccess(); + public BitType getType() + { + return new BitType(); } private class SparseRoiCursor extends AbstractCursor implements diff --git a/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntType.java b/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntType.java index cbbd1327..967103fd 100644 --- a/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntType.java +++ b/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntType.java @@ -78,7 +78,7 @@ public RandomAccess randomAccess(Interval interval) { } public Cursor sparseCursor() { - return new MappingCursor<>(sparsityPattern().cursor(), randomAccess()); + return new MappingCursor<>(sparsityPattern().inside().cursor(), randomAccess()); } public IterableRegion> sparsityPattern() { diff --git a/src/test/java/demo/custom_segmenter/MeanCalculator.java b/src/test/java/demo/custom_segmenter/MeanCalculator.java index 7984e01e..5c253c84 100644 --- a/src/test/java/demo/custom_segmenter/MeanCalculator.java +++ b/src/test/java/demo/custom_segmenter/MeanCalculator.java @@ -45,7 +45,7 @@ class MeanCalculator { public void addSample(RandomAccessibleInterval image, IterableRegion region) { - Cursor cursor = region.cursor(); + Cursor cursor = region.inside().cursor(); RandomAccess> randomAccess = Cast.unchecked(image.randomAccess()); while (cursor.hasNext()) { cursor.fwd(); diff --git a/src/test/java/sc/fiji/labkit/ui/labeling/SparseIterableRegionTest.java b/src/test/java/sc/fiji/labkit/ui/labeling/SparseIterableRegionTest.java index 20d4c124..4c533ca8 100644 --- a/src/test/java/sc/fiji/labkit/ui/labeling/SparseIterableRegionTest.java +++ b/src/test/java/sc/fiji/labkit/ui/labeling/SparseIterableRegionTest.java @@ -69,7 +69,7 @@ public void testSize() { RandomAccess ra = roi.randomAccess(); ra.setPosition(positionA); ra.get().set(true); - assertEquals(1, roi.size()); + assertEquals(1, roi.inside().size()); } @Test @@ -78,7 +78,7 @@ public void testCursor() { RandomAccess ra = roi.randomAccess(); ra.setPosition(positionA); ra.get().set(true); - Cursor cursor = roi.cursor(); + Cursor cursor = roi.inside().cursor(); assertTrue(cursor.hasNext()); cursor.fwd(); assertEquals(positionA[1], cursor.getLongPosition(1)); diff --git a/src/test/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntTypeTest.java b/src/test/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntTypeTest.java index aeaf8c02..12cbb0bd 100644 --- a/src/test/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntTypeTest.java +++ b/src/test/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntTypeTest.java @@ -49,6 +49,6 @@ public void testNoEntryValue() { noEntryValue); Views.iterable(image).forEach(x -> x.setInteger(noEntryValue)); // test - assertFalse(image.sparsityPattern().cursor().hasNext()); + assertFalse(image.sparsityPattern().inside().cursor().hasNext()); } } From 2fc86c55c2f5c85c64be168e9f2029fa9e8b5914 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Fri, 5 Apr 2024 22:06:12 +0200 Subject: [PATCH 4/6] Add missing getType() implementations --- src/main/java/sc/fiji/labkit/ui/labeling/Labeling.java | 6 ++++++ .../labkit/ui/utils/sparse/SparseRandomAccessIntType.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/sc/fiji/labkit/ui/labeling/Labeling.java b/src/main/java/sc/fiji/labkit/ui/labeling/Labeling.java index 73b9b3e5..af97f957 100644 --- a/src/main/java/sc/fiji/labkit/ui/labeling/Labeling.java +++ b/src/main/java/sc/fiji/labkit/ui/labeling/Labeling.java @@ -303,6 +303,12 @@ public void setLabelOrder(Comparator comparator) { labels.sort(comparator); } + @Override + public LabelingType< Label > getType() + { + return randomAccess().getType(); + } + public static class SetEntryAsBitType extends BitType { private Set set = null; diff --git a/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntType.java b/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntType.java index 967103fd..087b86cf 100644 --- a/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntType.java +++ b/src/main/java/sc/fiji/labkit/ui/utils/sparse/SparseRandomAccessIntType.java @@ -124,6 +124,12 @@ private void set(MyRandomAccess position, int value) { } } + @Override + public IntType getType() + { + return new IntType(); + } + // -- Helper classes -- private class MyRandomAccess extends Point implements RandomAccess { From 426c9073e834ad235c7f2d97de7b55efab6c3239 Mon Sep 17 00:00:00 2001 From: Matthias Arzt Date: Thu, 29 Aug 2024 11:57:18 +0200 Subject: [PATCH 5/6] Avoid using ImgLabeling.getType() In imglib2-7.1 the way Utils.getTypeFromInterval(...) works was changed. Currently it triggers a NullPointerException for an ImgLabeling. This workaround fixes the problem. --- .../java/sc/fiji/labkit/ui/brush/LabelBrushController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/sc/fiji/labkit/ui/brush/LabelBrushController.java b/src/main/java/sc/fiji/labkit/ui/brush/LabelBrushController.java index d4d13bd3..cba411de 100644 --- a/src/main/java/sc/fiji/labkit/ui/brush/LabelBrushController.java +++ b/src/main/java/sc/fiji/labkit/ui/brush/LabelBrushController.java @@ -40,6 +40,7 @@ import net.imglib2.roi.IterableRegion; import net.imglib2.roi.Regions; import net.imglib2.type.logic.BitType; +import net.imglib2.util.Intervals; import org.scijava.ui.behaviour.*; import sc.fiji.labkit.ui.ActionsAndBehaviours; import sc.fiji.labkit.ui.brush.neighborhood.Ellipsoid; @@ -248,8 +249,8 @@ private List