diff --git a/SLIC/src/algorithms/danyfel80/islic/SLICTask.java b/SLIC/src/algorithms/danyfel80/islic/SLICTask.java index d63c6bdf833e74d2f8d7a6548fc1552798aa8205..44c705c3ed43706c98bf0ead4e53150b8e5a873c 100644 --- a/SLIC/src/algorithms/danyfel80/islic/SLICTask.java +++ b/SLIC/src/algorithms/danyfel80/islic/SLICTask.java @@ -425,6 +425,13 @@ public class SLICTask { List<int[]> rgbs = labs.stream().map(lab -> CIELab.toRGB(lab.x, lab.y, lab.z)).collect(Collectors.toList()); superPixelsResult = new Sequence( new IcyBufferedImage(sequence.getWidth(), sequence.getHeight(), 3, DataType.UBYTE)); + + superPixelsResult.setPixelSizeX(sequence.getPixelSizeX()); + superPixelsResult.setPixelSizeY(sequence.getPixelSizeY()); + superPixelsResult.setPixelSizeZ(sequence.getPixelSizeZ()); + superPixelsResult.setPositionX(sequence.getPositionX()); + superPixelsResult.setPositionY(sequence.getPositionY()); + superPixelsResult.setPositionZ(sequence.getPositionZ()); superPixelsResult.beginUpdate(); double[][] spData = Array2DUtil.arrayToDoubleArray(superPixelsResult.getDataXYC(0, 0), diff --git a/SLIC/src/plugins/danyfel80/islic/SLIC.java b/SLIC/src/plugins/danyfel80/islic/SLIC.java index 48aef85ec211a36f4d935aafc7dde871fafd6de9..1c467d266c7be94474adba4fc68fd9fc55affa14 100644 --- a/SLIC/src/plugins/danyfel80/islic/SLIC.java +++ b/SLIC/src/plugins/danyfel80/islic/SLIC.java @@ -2,19 +2,23 @@ package plugins.danyfel80.islic; import algorithms.danyfel80.islic.SLICTask; import icy.gui.dialog.MessageDialog; +import plugins.adufour.blocks.lang.Block; +import plugins.adufour.blocks.util.VarList; import plugins.adufour.ezplug.EzPlug; import plugins.adufour.ezplug.EzVarBoolean; import plugins.adufour.ezplug.EzVarDouble; import plugins.adufour.ezplug.EzVarInteger; import plugins.adufour.ezplug.EzVarSequence; -public class SLIC extends EzPlug { +public class SLIC extends EzPlug implements Block { private EzVarSequence inSequence; private EzVarInteger inSPSize; private EzVarDouble inSPReg; private EzVarBoolean inIsROIOutput; + private EzVarSequence outSequence; + @Override protected void initialize() { inSequence = new EzVarSequence("Sequence"); @@ -31,6 +35,29 @@ public class SLIC extends EzPlug { addEzComponent(inIsROIOutput); } + @Override + public void declareInput(VarList inputMap) { + inSequence = new EzVarSequence("Sequence"); + inSPSize = new EzVarInteger("Superpixel size"); + inSPReg = new EzVarDouble("Superpixels regularity"); + inIsROIOutput = new EzVarBoolean("Output as ROIs", false); + + inSPSize.setValue(30); + inSPReg.setValue(0.2); + + inputMap.add(inSequence.name, inSequence.getVariable()); + inputMap.add(inSPSize.name, inSPSize.getVariable()); + inputMap.add(inSPReg.name, inSPReg.getVariable()); + inputMap.add(inIsROIOutput.name, inIsROIOutput.getVariable()); + } + + @Override + public void declareOutput(VarList outputMap) { + outSequence = new EzVarSequence("Result"); + + outputMap.add(outSequence.name, outSequence.getVariable()); + } + @Override protected void execute() { long procTime, startTime, endTime; @@ -39,8 +66,10 @@ public class SLIC extends EzPlug { task = new SLICTask(inSequence.getValue(), inSPSize.getValue(), inSPReg.getValue(), inIsROIOutput.getValue()); } catch (Exception e) { e.printStackTrace(); - MessageDialog.showDialog("Initialization Error", - String.format("SLIC could not start properly: " + e.getMessage()), MessageDialog.ERROR_MESSAGE); + if (!this.isHeadLess()) { + MessageDialog.showDialog("Initialization Error", + String.format("SLIC could not start properly: " + e.getMessage()), MessageDialog.ERROR_MESSAGE); + } return; } startTime = System.currentTimeMillis(); @@ -48,16 +77,27 @@ public class SLIC extends EzPlug { task.execute(); } catch (Exception e) { e.printStackTrace(); - MessageDialog.showDialog("Runtime Error", String.format("SLIC could not run properly: " + e.getMessage()), - MessageDialog.ERROR_MESSAGE); + if (!this.isHeadLess()) { + MessageDialog.showDialog("Runtime Error", String.format("SLIC could not run properly: " + e.getMessage()), + MessageDialog.ERROR_MESSAGE); + } return; } endTime = System.currentTimeMillis(); procTime = endTime - startTime; - MessageDialog.showDialog(String.format("SLIC finished in %d milliseconds", procTime)); System.out.println(String.format("SLIC finished in %d milliseconds", procTime)); - addSequence(task.getResultSequence()); + if (!this.inIsROIOutput.getValue()) { + task.getResultSequence().setName(inSequence.getValue().getName() + + String.format("_SLIC(size=%s,reg=%.2f)", inSPSize.getValue().intValue(), inSPReg.getValue().doubleValue())); + } + if (!this.isHeadLess()) { + MessageDialog.showDialog(String.format("SLIC finished in %d milliseconds", procTime)); + addSequence(task.getResultSequence()); + } else { + outSequence.setValue(task.getResultSequence()); + } + } @Override