diff --git a/.gitignore b/.gitignore index 5fe16ebb8b4e949b1d5f2b3189fcef93a07f070c..57f16fb67c1b1589981416b323d7a9debc728665 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,41 @@ -/ROIToDistanceMap/bin/ -*.jar +/build* +/workspace +setting.xml +release/ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +icy.log + +### IntelliJ IDEA ### .idea/ +*.iws *.iml -.settings/ -.project +*.ipr + +### Eclipse ### +.apt_generated .classpath -target/ +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### **/.DS_Store +Icon? \ No newline at end of file diff --git a/pom.xml b/pom.xml index fb3ae4ddc30b36b199d0244852143d54046ea86d..5cea3293f698f951a26cb46f3c41d42936205dbc 100644 --- a/pom.xml +++ b/pom.xml @@ -8,12 +8,12 @@ <parent> <artifactId>pom-icy</artifactId> <groupId>org.bioimageanalysis.icy</groupId> - <version>2.2.0</version> + <version>3.0.0-a.1</version> </parent> <!-- Project Information --> <artifactId>roi-to-distance-map</artifactId> - <version>4.0.0</version> + <version>4.0.0-a.1</version> <name>ROI to Distance Map</name> <description>Convert ROI to a Distance Map</description> @@ -62,23 +62,19 @@ <dependencies> <dependency> <groupId>org.bioimageanalysis.icy</groupId> - <artifactId>protocols</artifactId> + <artifactId>ezplug</artifactId> </dependency> - - <!-- The EzPlug library, simplifies writing UI for Icy plugins. --> <dependency> <groupId>org.bioimageanalysis.icy</groupId> - <artifactId>ezplug</artifactId> + <artifactId>protocols</artifactId> </dependency> - <dependency> <groupId>org.bioimageanalysis.icy</groupId> - <artifactId>3d-mesh-roi</artifactId> + <artifactId>kernel-extensions</artifactId> </dependency> - <dependency> <groupId>org.bioimageanalysis.icy</groupId> - <artifactId>icy-bioformats</artifactId> + <artifactId>3d-mesh-roi</artifactId> </dependency> </dependencies> @@ -86,8 +82,7 @@ <repositories> <repository> <id>icy</id> - <name>Icy's Nexus</name> - <url>https://icy-nexus.pasteur.fr/repository/Icy/</url> + <url>https://nexus.pasteur.cloud/repository/icy/</url> </repository> </repositories> </project> diff --git a/src/main/java/plugins/adufour/distancetransforms/Chamfer3.java b/src/main/java/plugins/adufour/distancetransforms/Chamfer3.java index 0ca266af963fc9764efc93265410bffa8bbc58cb..4087f44f964b6da3d0ac2b9e9275368c5eb830dc 100644 --- a/src/main/java/plugins/adufour/distancetransforms/Chamfer3.java +++ b/src/main/java/plugins/adufour/distancetransforms/Chamfer3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2023. Institut Pasteur. + * Copyright (c) 2010-2024. Institut Pasteur. * * This file is part of Icy. * Icy is free software: you can redistribute it and/or modify @@ -18,6 +18,10 @@ package plugins.adufour.distancetransforms; +import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon; +import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName; +import org.jetbrains.annotations.NotNull; + /** * Pseudo-Euclidean distance transform based on a two-pass sweeping algorithm using a 3x3 (in 2D) or * 3x3x3 (in 3D) chamfer mask. <br> @@ -35,9 +39,11 @@ package plugins.adufour.distancetransforms; * * @author Alexandre Dufour */ +@IcyPluginName("Chamfer 3") +@IcyPluginIcon(path = "/distance-transforms.png") public class Chamfer3 extends ChamferDistanceTransform { @Override - public void updateUnsignedChamferDistance2D(final float[] map, final int width, final float planarLateralDistance) { + public void updateUnsignedChamferDistance2D(final float @NotNull [] map, final int width, final float planarLateralDistance) { final double xy2 = planarLateralDistance * planarLateralDistance; final float planarDiagonalDistance = (float) Math.sqrt(xy2 + xy2); @@ -95,7 +101,7 @@ public class Chamfer3 extends ChamferDistanceTransform { } @Override - public void updateUnsignedChamferDistance3D(final float[][] map, final int width, final float planoLateralDistance, final float axioLateralDistance) { + public void updateUnsignedChamferDistance3D(final float @NotNull [] @NotNull [] map, final int width, final float planoLateralDistance, final float axioLateralDistance) { final double xy2 = planoLateralDistance * planoLateralDistance; final double xz2 = axioLateralDistance * axioLateralDistance; final float planoDiagonalDistance = (float) Math.sqrt(xy2 + xy2); diff --git a/src/main/java/plugins/adufour/distancetransforms/Chamfer5.java b/src/main/java/plugins/adufour/distancetransforms/Chamfer5.java index 7682d7403d7be3ecf41b47ec3596703b7765a443..0696d08953e6d7fe823b4239106451a6f556585a 100644 --- a/src/main/java/plugins/adufour/distancetransforms/Chamfer5.java +++ b/src/main/java/plugins/adufour/distancetransforms/Chamfer5.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2023. Institut Pasteur. + * Copyright (c) 2010-2024. Institut Pasteur. * * This file is part of Icy. * Icy is free software: you can redistribute it and/or modify @@ -18,6 +18,10 @@ package plugins.adufour.distancetransforms; +import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon; +import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName; +import org.jetbrains.annotations.NotNull; + /** * Pseudo-Euclidean distance transform based on a two-pass sweeping algorithm using a 5x5 (in 2D) or * 5x5x5 (in 3D) chamfer mask. <br> @@ -40,9 +44,11 @@ package plugins.adufour.distancetransforms; * * @author Alexandre Dufour */ +@IcyPluginName("Chamfer 5") +@IcyPluginIcon(path = "/distance-transforms.png") public class Chamfer5 extends ChamferDistanceTransform { @Override - public void updateUnsignedChamferDistance2D(final float[] map, final int width, final float lateralDistance) { + public void updateUnsignedChamferDistance2D(final float @NotNull [] map, final int width, final float lateralDistance) { // pre-calculate distances final float a = lateralDistance; final float b = (float) Math.sqrt(a * a + a * a); @@ -121,8 +127,9 @@ public class Chamfer5 extends ChamferDistanceTransform { } } + // TODO: Make this method more simple @Override - public void updateUnsignedChamferDistance3D(final float[][] map, final int width, final float planarLateralDistance, final float axialLateralDistance) { + public void updateUnsignedChamferDistance3D(final float @NotNull [] @NotNull [] map, final int width, final float planarLateralDistance, final float axialLateralDistance) { // 2D distances final float xySq = planarLateralDistance * planarLateralDistance; final float b = (float) Math.sqrt(xySq + xySq); diff --git a/src/main/java/plugins/adufour/distancetransforms/ChamferDistanceTransform.java b/src/main/java/plugins/adufour/distancetransforms/ChamferDistanceTransform.java index 1ee632d68092046ab2ccccd3c0a54a1396a19fa6..bbe2ed78f43148538c680887e07d9b2ef187b08c 100644 --- a/src/main/java/plugins/adufour/distancetransforms/ChamferDistanceTransform.java +++ b/src/main/java/plugins/adufour/distancetransforms/ChamferDistanceTransform.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2023. Institut Pasteur. + * Copyright (c) 2010-2024. Institut Pasteur. * * This file is part of Icy. * Icy is free software: you can redistribute it and/or modify @@ -18,21 +18,18 @@ package plugins.adufour.distancetransforms; -import icy.common.Version; -import icy.image.IcyBufferedImage; -import icy.main.Icy; -import icy.roi.ROI; -import icy.roi.ROI2D; -import icy.roi.ROI3D; -import icy.sequence.Sequence; -import icy.sequence.SequenceDataIterator; -import icy.type.DataIteratorUtil; -import icy.type.DataType; -import icy.type.collection.array.Array1DUtil; -import icy.util.OMEUtil; +import org.bioimageanalysis.extension.kernel.roi.roi3d.ROI3DArea; +import org.bioimageanalysis.icy.common.collection.array.Array1DUtil; +import org.bioimageanalysis.icy.common.type.DataIteratorUtil; +import org.bioimageanalysis.icy.common.type.DataType; +import org.bioimageanalysis.icy.model.OMEUtil; +import org.bioimageanalysis.icy.model.image.IcyBufferedImage; +import org.bioimageanalysis.icy.model.roi.ROI; +import org.bioimageanalysis.icy.model.roi.ROI3D; +import org.bioimageanalysis.icy.model.sequence.Sequence; +import org.bioimageanalysis.icy.model.sequence.SequenceDataIterator; +import org.jetbrains.annotations.NotNull; import plugins.adufour.roi.mesh.ROI3DMesh; -import plugins.kernel.roi.roi3d.ROI3DArea; -import plugins.kernel.roi.roi3d.ROI3DStack; import java.util.ArrayList; import java.util.Arrays; @@ -41,12 +38,12 @@ import java.util.concurrent.Future; public abstract class ChamferDistanceTransform extends DistanceTransform { @Override - public Sequence createDistanceMap(final Sequence input, final int channel, final double threshold, final boolean invertMap, final boolean useRealUnits) { + public Sequence createDistanceMap(final @NotNull Sequence input, final int channel, final double threshold, final boolean invertMap, final boolean useRealUnits) { final int width = input.getSizeX(); final int height = input.getSizeY(); final int depth = input.getSizeZ(); final int time = input.getSizeT(); - final DataType type = input.getDataType_(); + final DataType type = input.getDataType(); final int maxDistance = width * height * depth; @@ -92,7 +89,7 @@ public abstract class ChamferDistanceTransform extends DistanceTransform { * @return sequence */ @Override - public Sequence createDistanceMap(final Sequence sequence, final boolean mapOnlySelectedROI, final boolean invertMap, final boolean useRealUnits) throws InterruptedException { + public Sequence createDistanceMap(final @NotNull Sequence sequence, final boolean mapOnlySelectedROI, final boolean invertMap, final boolean useRealUnits) throws InterruptedException { final List<ROI> rois = mapOnlySelectedROI ? sequence.getSelectedROIs() : sequence.getROIs(); String title = "Distance map "; @@ -121,17 +118,17 @@ public abstract class ChamferDistanceTransform extends DistanceTransform { // Fill the ROI with the default distance // Warning: Icy <= 1.8.6 have an issue with the data iterator - final Version patch = new Version(1, 8, 6); + //final Version patch = new Version(1, 8, 6); for (final ROI r : rois) { - if (Icy.version.isLowerOrEqual(patch) && r instanceof ROI3DStack) { - final ROI3DStack<?> stack = (ROI3DStack<?>) r; + /*if (Icy.VERSION.isLowerOrEqual(patch) && r instanceof final ROI3DStack<?> stack) { for (final ROI2D slice : stack) { final SequenceDataIterator iterator = new SequenceDataIterator(output, slice, true); DataIteratorUtil.set(iterator, maxDistance); } } - else if (r instanceof ROI3DMesh) { + else*/ + if (r instanceof ROI3DMesh) { final ROI3D rea = new ROI3DArea(((ROI3D) r).getBooleanMask(true)); rea.setC(((ROI3D) r).getC()); rea.setT(((ROI3D) r).getT()); @@ -150,7 +147,7 @@ public abstract class ChamferDistanceTransform extends DistanceTransform { return output; } - private void updateUnsignedChamferDistance(final Sequence output, final boolean useRealUnits) { + private void updateUnsignedChamferDistance(final @NotNull Sequence output, final boolean useRealUnits) { final int width = output.getSizeX(); final int length = output.getSizeT(); diff --git a/src/main/java/plugins/adufour/distancetransforms/DistanceTransform.java b/src/main/java/plugins/adufour/distancetransforms/DistanceTransform.java index 8a7868db9a884a270fdae97760d843ae4eb5caef..1cb708004be60b545a8ca4b26a18e05159e1af3b 100644 --- a/src/main/java/plugins/adufour/distancetransforms/DistanceTransform.java +++ b/src/main/java/plugins/adufour/distancetransforms/DistanceTransform.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2023. Institut Pasteur. + * Copyright (c) 2010-2024. Institut Pasteur. * * This file is part of Icy. * Icy is free software: you can redistribute it and/or modify @@ -18,14 +18,13 @@ package plugins.adufour.distancetransforms; -import icy.plugin.abstract_.Plugin; -import icy.plugin.interface_.PluginLibrary; -import icy.sequence.Sequence; +import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin; +import org.bioimageanalysis.icy.model.sequence.Sequence; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -public abstract class DistanceTransform extends Plugin implements PluginLibrary { +public abstract class DistanceTransform extends Plugin { protected static ExecutorService multiThreadService = Executors.newCachedThreadPool(); /** diff --git a/src/main/java/plugins/adufour/distancetransforms/ROIToDistanceMap.java b/src/main/java/plugins/adufour/distancetransforms/ROIToDistanceMap.java index 358fe29febf1400c38c376fd096ff0262471b77b..172cf7b2929e04750cd30f78fcdd6fcb3da3b7de 100644 --- a/src/main/java/plugins/adufour/distancetransforms/ROIToDistanceMap.java +++ b/src/main/java/plugins/adufour/distancetransforms/ROIToDistanceMap.java @@ -18,7 +18,10 @@ package plugins.adufour.distancetransforms; -import icy.sequence.Sequence; +import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon; +import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName; +import org.bioimageanalysis.icy.model.sequence.Sequence; +import org.jetbrains.annotations.NotNull; import plugins.adufour.blocks.lang.Block; import plugins.adufour.blocks.util.VarList; import plugins.adufour.ezplug.EzPlug; @@ -27,6 +30,8 @@ import plugins.adufour.ezplug.EzVarPlugin; import plugins.adufour.ezplug.EzVarSequence; import plugins.adufour.vars.lang.VarSequence; +@IcyPluginName("ROI to Distance Map") +@IcyPluginIcon(path = "/distance-transforms.png") public class ROIToDistanceMap extends EzPlug implements Block { EzVarSequence sequence = new EzVarSequence("Sequence"); @@ -41,7 +46,7 @@ public class ROIToDistanceMap extends EzPlug implements Block { VarSequence map = new VarSequence("Distance map", null); @Override - public void declareInput(final VarList inputMap) { + public void declareInput(final @NotNull VarList inputMap) { inputMap.add("Use ROI from", sequence.getVariable()); inputMap.add("Algorithm", transform.getVariable()); inputMap.add("Invert map", invert.getVariable()); @@ -49,7 +54,7 @@ public class ROIToDistanceMap extends EzPlug implements Block { } @Override - public void declareOutput(final VarList outputMap) { + public void declareOutput(final @NotNull VarList outputMap) { outputMap.add("Distance map", map); } @@ -64,6 +69,7 @@ public class ROIToDistanceMap extends EzPlug implements Block { setTimeDisplay(true); } + @SuppressWarnings("resource") @Override protected void execute() { try { diff --git a/src/main/resources/distance-transforms.png b/src/main/resources/distance-transforms.png new file mode 100644 index 0000000000000000000000000000000000000000..0a94830619320fe2524441b7180769d3196dc1c8 Binary files /dev/null and b/src/main/resources/distance-transforms.png differ