diff --git a/.gitignore b/.gitignore index b2f15ce895696fd311b35bd9ebb831c094d75ac0..57f16fb67c1b1589981416b323d7a9debc728665 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,41 @@ -.idea/ -.settings/ -build/ +/build* +/workspace +setting.xml +release/ target/ -bin/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +icy.log + +### IntelliJ IDEA ### +.idea/ +*.iws *.iml -*.jar +*.ipr + +### Eclipse ### +.apt_generated .classpath +.factorypath .project -export.jardesc -**/.DS_Store \ No newline at end of file +.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 061aebae96da6f0c541782c16fff159f0be21308..107ccb9feff3336eba517ca04d328fd3cec64b6a 100644 --- a/pom.xml +++ b/pom.xml @@ -7,13 +7,11 @@ <parent> <groupId>org.bioimageanalysis.icy</groupId> <artifactId>pom-icy</artifactId> - <version>2.2.0</version> + <version>3.0.0-a.1</version> </parent> <artifactId>connected-components</artifactId> - <version>5.0.0</version> - - <packaging>jar</packaging> + <version>5.0.0-a.1</version> <name>ConnectedComponents</name> <description> @@ -48,17 +46,12 @@ <groupId>org.bioimageanalysis.icy</groupId> <artifactId>jama</artifactId> </dependency> - - <dependency> - <groupId>net.sourceforge.jexcelapi</groupId> - <artifactId>jxl</artifactId> - </dependency> </dependencies> <repositories> <repository> <id>icy</id> - <url>https://icy-nexus.pasteur.fr/repository/Icy/</url> + <url>https://nexus-icy.pasteur.cloud/repository/icy/</url> </repository> </repositories> diff --git a/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponent.java b/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponent.java index dfa7b47030215f8e49c7c3faae7119e5b189cbdd..fa8fa12154b7508e4079ba0d7f4cee12fcd6db53 100644 --- a/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponent.java +++ b/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponent.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,15 +18,17 @@ package plugins.adufour.connectedcomponents; -import icy.image.IcyBufferedImage; -import icy.roi.ROI; -import icy.sequence.Sequence; -import icy.sequence.SequenceDataIterator; -import icy.type.DataIteratorUtil; -import icy.type.DataType; -import icy.type.collection.array.Array1DUtil; -import plugins.kernel.roi.roi2d.ROI2DArea; -import plugins.kernel.roi.roi3d.ROI3DArea; + +import org.bioimageanalysis.extension.kernel.roi.roi2d.ROI2DArea; +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.image.IcyBufferedImage; +import org.bioimageanalysis.icy.model.roi.ROI; +import org.bioimageanalysis.icy.model.sequence.Sequence; +import org.bioimageanalysis.icy.model.sequence.SequenceDataIterator; +import org.jetbrains.annotations.NotNull; import plugins.nchenouard.spot.Detection; import javax.vecmath.Point3d; @@ -182,7 +184,7 @@ public class ConnectedComponent extends Detection implements Iterable<Point3i> { for (int c = 0; c < intensitySum.length; c++) intensitySum[c] += Array1DUtil.getValue(((Object[]) dataCXY)[c], offsetXY, - sequence.getDataType_().isSigned()); + sequence.getDataType().isSigned()); } for (int i = 0; i < intensitySum.length; i++) @@ -220,7 +222,7 @@ public class ConnectedComponent extends Detection implements Iterable<Point3i> { for (int c = 0; c < minIntensity.length; c++) { final double val = Array1DUtil.getValue(((Object[]) dataCXY)[c], offsetXY, - sequence.getDataType_().isSigned()); + sequence.getDataType().isSigned()); if (val < minIntensity[c]) minIntensity[c] = val; } @@ -257,7 +259,7 @@ public class ConnectedComponent extends Detection implements Iterable<Point3i> { for (int c = 0; c < maxIntensity.length; c++) { final double val = Array1DUtil.getValue(((Object[]) dataCXY)[c], offsetXY, - sequence.getDataType_().isSigned()); + sequence.getDataType().isSigned()); if (val > maxIntensity[c]) maxIntensity[c] = val; } @@ -568,7 +570,7 @@ public class ConnectedComponent extends Detection implements Iterable<Point3i> { } @Override - public Iterator<Point3i> iterator() { + public @NotNull Iterator<Point3i> iterator() { return points.iterator(); } diff --git a/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponentDescriptor.java b/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponentDescriptor.java index 6c7a7fde7cf2bfed3917cbc817302d7245bd9537..abe0eeb05d47329ff0d3a403bada3671896933b6 100644 --- a/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponentDescriptor.java +++ b/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponentDescriptor.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 @@ -20,11 +20,11 @@ package plugins.adufour.connectedcomponents; import Jama.EigenvalueDecomposition; import Jama.Matrix; -import icy.image.IcyBufferedImage; -import icy.plugin.abstract_.Plugin; -import icy.plugin.interface_.PluginBundled; -import icy.sequence.Sequence; -import icy.type.DataType; +import org.bioimageanalysis.icy.common.type.DataType; +import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin; +import org.bioimageanalysis.icy.extension.plugin.interface_.PluginBundled; +import org.bioimageanalysis.icy.model.image.IcyBufferedImage; +import org.bioimageanalysis.icy.model.sequence.Sequence; import plugins.adufour.blocks.lang.Block; import plugins.adufour.blocks.util.VarList; import plugins.adufour.quickhull.QuickHull2D; @@ -389,7 +389,7 @@ public class ConnectedComponentDescriptor extends Plugin implements PluginBundle // volume = sum( sqrt[ (x[i] - x[i-1])^2 + (y[i] - y[i-1])^2 ] ) // area = 0.5 * sum( (x[i-1] * y[i]) - (y[i-1] * x[i]) ) - Point2D p1 = points.get(points.size() - 1), p2; + Point2D p1 = points.getLast(), p2; for (i = 0; i < points.size(); i++) { p2 = points.get(i); diff --git a/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponents.java b/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponents.java index baa1be66e19d65f8cec8b8421c9d65bfbd72f340..f8113aab490c93a7ff99014e453cf3371815f2e1 100644 --- a/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponents.java +++ b/src/main/java/plugins/adufour/connectedcomponents/ConnectedComponents.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,56 +18,47 @@ package plugins.adufour.connectedcomponents; -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import javax.vecmath.Point3d; -import javax.vecmath.Point3i; -import javax.vecmath.Point4d; - -import icy.file.FileUtil; -import icy.gui.frame.progress.FailedAnnounceFrame; -import icy.image.IcyBufferedImage; -import icy.image.colormap.FireColorMap; -import icy.main.Icy; -import icy.roi.ROI; -import icy.sequence.Sequence; -import icy.sequence.SequenceDataIterator; -import icy.sequence.VolumetricImage; -import icy.swimmingPool.SwimmingObject; -import icy.system.IcyHandledException; -import icy.type.DataIteratorUtil; -import icy.type.DataType; -import icy.type.collection.array.Array1DUtil; -import icy.util.StringUtil; -import icy.util.XLSUtil; -import jxl.write.WritableSheet; -import jxl.write.WritableWorkbook; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.bioimageanalysis.extension.kernel.roi.roi2d.ROI2DArea; +import org.bioimageanalysis.extension.kernel.roi.roi3d.ROI3DArea; +import org.bioimageanalysis.icy.Icy; +import org.bioimageanalysis.icy.common.collection.array.Array1DUtil; +import org.bioimageanalysis.icy.common.string.StringUtil; +import org.bioimageanalysis.icy.common.type.DataIteratorUtil; +import org.bioimageanalysis.icy.common.type.DataType; +import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon; +import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName; +import org.bioimageanalysis.icy.gui.frame.progress.FailedAnnounceFrame; +import org.bioimageanalysis.icy.io.FileUtil; +import org.bioimageanalysis.icy.io.xls.XLSXUtil; +import org.bioimageanalysis.icy.model.colormap.FireColorMap; +import org.bioimageanalysis.icy.model.image.IcyBufferedImage; +import org.bioimageanalysis.icy.model.roi.ROI; +import org.bioimageanalysis.icy.model.sequence.Sequence; +import org.bioimageanalysis.icy.model.sequence.SequenceDataIterator; +import org.bioimageanalysis.icy.model.sequence.VolumetricImage; +import org.bioimageanalysis.icy.model.swimmingPool.SwimmingObject; +import org.bioimageanalysis.icy.system.IcyHandledException; import plugins.adufour.blocks.lang.Block; import plugins.adufour.blocks.util.VarList; -import plugins.adufour.ezplug.EzGroup; -import plugins.adufour.ezplug.EzLabel; -import plugins.adufour.ezplug.EzPlug; -import plugins.adufour.ezplug.EzVarBoolean; -import plugins.adufour.ezplug.EzVarEnum; -import plugins.adufour.ezplug.EzVarFile; -import plugins.adufour.ezplug.EzVarInteger; -import plugins.adufour.ezplug.EzVarSequence; +import plugins.adufour.ezplug.*; import plugins.adufour.vars.lang.VarGenericArray; import plugins.adufour.vars.lang.VarROIArray; import plugins.adufour.vars.lang.VarSequence; import plugins.adufour.vars.util.VarException; -import plugins.kernel.roi.roi2d.ROI2DArea; -import plugins.kernel.roi.roi3d.ROI3DArea; import plugins.nchenouard.spot.DetectionResult; import plugins.nchenouard.spot.Spot; +import javax.vecmath.Point3d; +import javax.vecmath.Point3i; +import javax.vecmath.Point4d; +import java.io.File; +import java.io.IOException; +import java.util.*; + +@IcyPluginName("Connected Components") +@IcyPluginIcon(path = "/icon/Connected_Components.png") public class ConnectedComponents extends EzPlug implements Block { /** * List of extraction methods suitable for the Connected Components plugin @@ -359,17 +350,18 @@ public class ConnectedComponents extends EzPlug implements Block { if (exportExcel.getValue()) { int page = 1; - WritableSheet sheet; - final WritableWorkbook workbook; + Sheet sheet; + final Workbook workbook; + + File f = exportExcelFile.getValue(true); + if (!FileUtil.getFileExtension(f.getPath(), false).equalsIgnoreCase("xlsx")) + f = new File(f.getPath() + ".xlsx"); try { - File f = exportExcelFile.getValue(true); - if (!FileUtil.getFileExtension(f.getPath(), false).equalsIgnoreCase("xls")) - f = new File(f.getPath() + ".xls"); - workbook = XLSUtil.createWorkbook(f); - sheet = XLSUtil.createNewPage(workbook, "Page " + page); + workbook = XLSXUtil.createWorkbook(); + sheet = XLSXUtil.createNewPage(workbook, "Page " + page); } - catch (final Exception e) { + catch (final IOException e) { throw new IcyHandledException(e.getMessage()); } @@ -383,37 +375,37 @@ public class ConnectedComponents extends EzPlug implements Block { res += ", Z=" + StringUtil.toStringEx(resolution.z, 5); res += ", T=" + StringUtil.toStringEx(resolution.w, 5); - XLSUtil.setCellString(sheet, 0, 0, s.getName()); - XLSUtil.setCellString(sheet, 6, 0, res); - XLSUtil.setCellString(sheet, 0, 1, "#"); - XLSUtil.setCellString(sheet, 1, 1, "t"); - XLSUtil.setCellString(sheet, 2, 1, "x"); - XLSUtil.setCellString(sheet, 3, 1, "y"); - XLSUtil.setCellString(sheet, 4, 1, "z"); - XLSUtil.setCellString(sheet, 5, 1, "perimeter"); - XLSUtil.setCellString(sheet, 6, 1, "area"); - XLSUtil.setCellString(sheet, 7, 1, "sphericity"); - XLSUtil.setCellString(sheet, 8, 1, "major axis"); - XLSUtil.setCellString(sheet, 9, 1, "minor axis"); - XLSUtil.setCellString(sheet, 10, 1, "minor Z axis"); - XLSUtil.setCellString(sheet, 11, 1, "eccentricity"); - XLSUtil.setCellString(sheet, 12, 1, "hull fill ratio"); - XLSUtil.setCellString(sheet, 13, 1, "M100"); - XLSUtil.setCellString(sheet, 14, 1, "M010"); - XLSUtil.setCellString(sheet, 15, 1, "M001"); - XLSUtil.setCellString(sheet, 16, 1, "M110"); - XLSUtil.setCellString(sheet, 17, 1, "M101"); - XLSUtil.setCellString(sheet, 18, 1, "M011"); - XLSUtil.setCellString(sheet, 19, 1, "M111"); - XLSUtil.setCellString(sheet, 20, 1, "M200"); - XLSUtil.setCellString(sheet, 21, 1, "M020"); - XLSUtil.setCellString(sheet, 22, 1, "M002"); - XLSUtil.setCellString(sheet, 23, 1, "M220"); - XLSUtil.setCellString(sheet, 24, 1, "M202"); - XLSUtil.setCellString(sheet, 25, 1, "M022"); - XLSUtil.setCellString(sheet, 26, 1, "M222"); - XLSUtil.setCellString(sheet, 27, 1, "convex perimeter"); - XLSUtil.setCellString(sheet, 28, 1, "convex volume"); + XLSXUtil.setCellString(sheet, 0, 0, s.getName()); + XLSXUtil.setCellString(sheet, 6, 0, res); + XLSXUtil.setCellString(sheet, 0, 1, "#"); + XLSXUtil.setCellString(sheet, 1, 1, "t"); + XLSXUtil.setCellString(sheet, 2, 1, "x"); + XLSXUtil.setCellString(sheet, 3, 1, "y"); + XLSXUtil.setCellString(sheet, 4, 1, "z"); + XLSXUtil.setCellString(sheet, 5, 1, "perimeter"); + XLSXUtil.setCellString(sheet, 6, 1, "area"); + XLSXUtil.setCellString(sheet, 7, 1, "sphericity"); + XLSXUtil.setCellString(sheet, 8, 1, "major axis"); + XLSXUtil.setCellString(sheet, 9, 1, "minor axis"); + XLSXUtil.setCellString(sheet, 10, 1, "minor Z axis"); + XLSXUtil.setCellString(sheet, 11, 1, "eccentricity"); + XLSXUtil.setCellString(sheet, 12, 1, "hull fill ratio"); + XLSXUtil.setCellString(sheet, 13, 1, "M100"); + XLSXUtil.setCellString(sheet, 14, 1, "M010"); + XLSXUtil.setCellString(sheet, 15, 1, "M001"); + XLSXUtil.setCellString(sheet, 16, 1, "M110"); + XLSXUtil.setCellString(sheet, 17, 1, "M101"); + XLSXUtil.setCellString(sheet, 18, 1, "M011"); + XLSXUtil.setCellString(sheet, 19, 1, "M111"); + XLSXUtil.setCellString(sheet, 20, 1, "M200"); + XLSXUtil.setCellString(sheet, 21, 1, "M020"); + XLSXUtil.setCellString(sheet, 22, 1, "M002"); + XLSXUtil.setCellString(sheet, 23, 1, "M220"); + XLSXUtil.setCellString(sheet, 24, 1, "M202"); + XLSXUtil.setCellString(sheet, 25, 1, "M022"); + XLSXUtil.setCellString(sheet, 26, 1, "M222"); + XLSXUtil.setCellString(sheet, 27, 1, "convex perimeter"); + XLSXUtil.setCellString(sheet, 28, 1, "convex volume"); final ConnectedComponentDescriptor shapeDescriptor = new ConnectedComponentDescriptor(); int cpt = 2; @@ -424,68 +416,68 @@ public class ConnectedComponents extends EzPlug implements Block { center.x *= resolution.x; center.y *= resolution.y; center.z *= resolution.z; - XLSUtil.setCellNumber(sheet, 0, cpt, cpt - 1); - XLSUtil.setCellNumber(sheet, 1, cpt, time * resolution.w); - XLSUtil.setCellNumber(sheet, 2, cpt, center.x); - XLSUtil.setCellNumber(sheet, 3, cpt, center.y); - XLSUtil.setCellNumber(sheet, 4, cpt, center.z); - XLSUtil.setCellNumber(sheet, 5, cpt, shapeDescriptor.computePerimeter(cc, null, null)); - XLSUtil.setCellNumber(sheet, 6, cpt, cc.getSize() * voxelSize); - XLSUtil.setCellNumber(sheet, 7, cpt, shapeDescriptor.computeSphericity(cc)); + XLSXUtil.setCellNumber(sheet, 0, cpt, (double) (cpt - 1)); + XLSXUtil.setCellNumber(sheet, 1, cpt, time * resolution.w); + XLSXUtil.setCellNumber(sheet, 2, cpt, center.x); + XLSXUtil.setCellNumber(sheet, 3, cpt, center.y); + XLSXUtil.setCellNumber(sheet, 4, cpt, center.z); + XLSXUtil.setCellNumber(sheet, 5, cpt, shapeDescriptor.computePerimeter(cc, null, null)); + XLSXUtil.setCellNumber(sheet, 6, cpt, cc.getSize() * voxelSize); + XLSXUtil.setCellNumber(sheet, 7, cpt, shapeDescriptor.computeSphericity(cc)); final double[] radiuses = shapeDescriptor.computeEllipseDimensions(cc); - XLSUtil.setCellNumber(sheet, 8, cpt, radiuses[0]); - XLSUtil.setCellNumber(sheet, 9, cpt, radiuses[1]); - XLSUtil.setCellNumber(sheet, 10, cpt, radiuses[2]); - XLSUtil.setCellNumber(sheet, 11, cpt, shapeDescriptor.computeEccentricity(cc)); + XLSXUtil.setCellNumber(sheet, 8, cpt, radiuses[0]); + XLSXUtil.setCellNumber(sheet, 9, cpt, radiuses[1]); + XLSXUtil.setCellNumber(sheet, 10, cpt, radiuses[2]); + XLSXUtil.setCellNumber(sheet, 11, cpt, shapeDescriptor.computeEccentricity(cc)); final double[] contour_area = shapeDescriptor.computeConvexAreaAndVolume(cc); - XLSUtil.setCellNumber(sheet, 12, cpt, contour_area[1] == 0.0 ? 0.0 : Math.min(1.0, cc.getSize() / contour_area[1])); - XLSUtil.setCellNumber(sheet, 13, cpt, shapeDescriptor.computeGeometricMoment(cc, 1, 0, 0)); - XLSUtil.setCellNumber(sheet, 14, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 1, 0)); + XLSXUtil.setCellNumber(sheet, 12, cpt, contour_area[1] == 0.0 ? 0.0 : Math.min(1.0, cc.getSize() / contour_area[1])); + XLSXUtil.setCellNumber(sheet, 13, cpt, shapeDescriptor.computeGeometricMoment(cc, 1, 0, 0)); + XLSXUtil.setCellNumber(sheet, 14, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 1, 0)); if (!is2D) - XLSUtil.setCellNumber(sheet, 15, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 0, 1)); + XLSXUtil.setCellNumber(sheet, 15, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 0, 1)); - XLSUtil.setCellNumber(sheet, 16, cpt, shapeDescriptor.computeGeometricMoment(cc, 1, 1, 0)); + XLSXUtil.setCellNumber(sheet, 16, cpt, shapeDescriptor.computeGeometricMoment(cc, 1, 1, 0)); if (!is2D) - XLSUtil.setCellNumber(sheet, 17, cpt, shapeDescriptor.computeGeometricMoment(cc, 1, 0, 1)); + XLSXUtil.setCellNumber(sheet, 17, cpt, shapeDescriptor.computeGeometricMoment(cc, 1, 0, 1)); if (!is2D) - XLSUtil.setCellNumber(sheet, 18, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 1, 1)); + XLSXUtil.setCellNumber(sheet, 18, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 1, 1)); if (!is2D) - XLSUtil.setCellNumber(sheet, 19, cpt, shapeDescriptor.computeGeometricMoment(cc, 1, 1, 1)); + XLSXUtil.setCellNumber(sheet, 19, cpt, shapeDescriptor.computeGeometricMoment(cc, 1, 1, 1)); - XLSUtil.setCellNumber(sheet, 20, cpt, shapeDescriptor.computeGeometricMoment(cc, 2, 0, 0)); - XLSUtil.setCellNumber(sheet, 21, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 2, 0)); + XLSXUtil.setCellNumber(sheet, 20, cpt, shapeDescriptor.computeGeometricMoment(cc, 2, 0, 0)); + XLSXUtil.setCellNumber(sheet, 21, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 2, 0)); if (!is2D) - XLSUtil.setCellNumber(sheet, 22, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 0, 2)); + XLSXUtil.setCellNumber(sheet, 22, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 0, 2)); - XLSUtil.setCellNumber(sheet, 23, cpt, shapeDescriptor.computeGeometricMoment(cc, 2, 2, 0)); + XLSXUtil.setCellNumber(sheet, 23, cpt, shapeDescriptor.computeGeometricMoment(cc, 2, 2, 0)); if (!is2D) - XLSUtil.setCellNumber(sheet, 24, cpt, shapeDescriptor.computeGeometricMoment(cc, 2, 0, 2)); + XLSXUtil.setCellNumber(sheet, 24, cpt, shapeDescriptor.computeGeometricMoment(cc, 2, 0, 2)); if (!is2D) - XLSUtil.setCellNumber(sheet, 25, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 2, 2)); + XLSXUtil.setCellNumber(sheet, 25, cpt, shapeDescriptor.computeGeometricMoment(cc, 0, 2, 2)); if (!is2D) - XLSUtil.setCellNumber(sheet, 26, cpt, shapeDescriptor.computeGeometricMoment(cc, 2, 2, 2)); + XLSXUtil.setCellNumber(sheet, 26, cpt, shapeDescriptor.computeGeometricMoment(cc, 2, 2, 2)); - XLSUtil.setCellNumber(sheet, 27, cpt, contour_area[0]); - XLSUtil.setCellNumber(sheet, 28, cpt, contour_area[1]); + XLSXUtil.setCellNumber(sheet, 27, cpt, contour_area[0]); + XLSXUtil.setCellNumber(sheet, 28, cpt, contour_area[1]); cpt++; if (cpt == Short.MAX_VALUE) { page++; - sheet = XLSUtil.createNewPage(workbook, "Page " + page); + sheet = XLSXUtil.createNewPage(workbook, "Page " + page); cpt = 1; } } try { - XLSUtil.saveAndClose(workbook); + XLSXUtil.saveAndClose(workbook, f); } catch (final Exception e) { throw new IcyHandledException(e.getMessage()); @@ -761,7 +753,7 @@ public class ConnectedComponents extends EzPlug implements Block { int voxelOffset = 0; final Object inputData = stack.getImage(z).getDataXY(0); - final DataType dataType = stack.getImage(z).getDataType_(); + final DataType dataType = stack.getImage(z).getDataType(); for (int y = 0; y < height; y++) { onEdgeY = (y == 0 || y == height - 1); diff --git a/src/main/resources/icon/Connected_Components.png b/src/main/resources/icon/Connected_Components.png new file mode 100644 index 0000000000000000000000000000000000000000..75d115265fc73272e854d46e26b680d999b78f58 Binary files /dev/null and b/src/main/resources/icon/Connected_Components.png differ