-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
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 moreUsing ImageJ-Ops stats.mean works just fine.
Metadata
Metadata
Assignees
Labels
No labels