Can't uses `stats.mean` with a `SamplingIterableInterval`
With SciJava ops in Fiji (via a Jython script) I am unable to use the stats.mean Op on a sample created from an ImgLabeling.
Here's small example that replicates this behavior (use with the Blobs example open).
#@ OpEnvironment ops #@ Img img from net.imglib2.algorithm.labeling.ConnectedComponents import StructuringElement from net.imglib2.roi import Regions from net.imglib2.roi.labeling import LabelRegions from net.imglib2.type.logic import BitType # create an ImgLabeling thres = ops.op("create.img").input(img, BitType()).apply() ops.op("threshold.otsu").input(img).output(thres).compute() labeling = ops.op("labeling.cca").input(thres, StructuringElement.FOUR_CONNECTED).apply() # create a sample for each label and run stats.mean regions = LabelRegions(labeling) for r in regions: sample = Regions.sample(r, img) print(ops.op("stats.mean").input(sample).apply())
This creates the following stack trace:
Started bug_ops_stats_mean.py at Thu Aug 22 11:42:24 CDT 2024 Traceback (most recent call last): File "/home/edward/Documents/workspaces/ops/examples/bugs/bug_ops_stats_mean.py", line 18, in <module> print(ops.op("stats.mean").input(sample).apply()) Name: "stats.mean", Types: java.util.function.Function<net.imglib2.roi.util.SamplingIterableInterval<net.imglib2.type.numeric.integer.UnsignedByteType>, org.scijava.common3.Any> Input Types: * net.imglib2.roi.util.SamplingIterableInterval<net.imglib2.type.numeric.integer.UnsignedByteType> Output Type: * org.scijava.common3.Any See debugging output for full failure report. at org.scijava.ops.engine.impl.DefaultOpEnvironment.findOp(DefaultOpEnvironment.java:367) at org.scijava.ops.engine.impl.DefaultOpEnvironment.op(DefaultOpEnvironment.java:215) at org.scijava.ops.api.OpBuilder.matchFunctionHelper(OpBuilder.java:15392) at org.scijava.ops.api.OpBuilder.matchFunction(OpBuilder.java:15233) at org.scijava.ops.api.OpBuilder$Arity1_IV_OU.function(OpBuilder.java:945) at org.scijava.ops.api.OpBuilder$Arity1_IV_OU.apply(OpBuilder.java:982) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) org.scijava.ops.engine.DependencyMatchingException: org.scijava.ops.engine.DependencyMatchingException: Error matching dependencies for request: Name: "stats.mean", Types: java.util.function.Function<net.imglib2.roi.util.SamplingIterableInterval<net.imglib2.type.numeric.integer.UnsignedByteType>, org.scijava.common3.Any> Input Types: * net.imglib2.roi.util.SamplingIterableInterval<net.imglib2.type.numeric.integer.UnsignedByteType> Output Type: * org.scijava.common3.Any See debugging output for full failure report. at org.python.core.Py.JavaError(Py.java:547) at org.python.core.Py.JavaError(Py.java:538) at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:192) at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:208) at org.python.core.PyObject.__call__(PyObject.java:461) at org.python.core.PyObject.__call__(PyObject.java:465) at org.python.core.PyMethod.__call__(PyMethod.java:126) at org.python.pycode._pyx22.f$0(/home/edward/Documents/workspaces/ops/examples/bugs/bug_ops_stats_mean.py:16) at org.python.pycode._pyx22.call_function(/home/edward/Documents/workspaces/ops/examples/bugs/bug_ops_stats_mean.py) at org.python.core.PyTableCode.call(PyTableCode.java:173) at org.python.core.PyCode.call(PyCode.java:18) at org.python.core.Py.runCode(Py.java:1687) at org.python.core.__builtin__.eval(__builtin__.java:497) at org.python.core.__builtin__.eval(__builtin__.java:501) at org.python.util.PythonInterpreter.eval(PythonInterpreter.java:255) at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:57) at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:31) at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:262) at org.scijava.script.ScriptModule.run(ScriptModule.java:173) at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165) at org.scijava.module.ModuleRunner.call(ModuleRunner.java:125) at org.scijava.module.ModuleRunner.call(ModuleRunner.java:64) at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:247) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: org.scijava.ops.engine.DependencyMatchingException: Error matching dependencies for request: Name: "stats.mean", Types: java.util.function.Function<net.imglib2.roi.util.SamplingIterableInterval<net.imglib2.type.numeric.integer.UnsignedByteType>, org.scijava.common3.Any> Input Types: * net.imglib2.roi.util.SamplingIterableInterval<net.imglib2.type.numeric.integer.UnsignedByteType> Output Type: * org.scijava.common3.Any See debugging output for full failure report. at org.scijava.ops.engine.impl.DefaultOpEnvironment.findOp(DefaultOpEnvironment.java:367) at org.scijava.ops.engine.impl.DefaultOpEnvironment.op(DefaultOpEnvironment.java:215) at org.scijava.ops.api.OpBuilder.matchFunctionHelper(OpBuilder.java:15392) at org.scijava.ops.api.OpBuilder.matchFunction(OpBuilder.java:15233) at org.scijava.ops.api.OpBuilder$Arity1_IV_OU.function(OpBuilder.java:945) at org.scijava.ops.api.OpBuilder$Arity1_IV_OU.apply(OpBuilder.java:982) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:190) ... 24 more
Using ImageJ-Ops stats.mean works just fine.