Skip to content

Can't uses stats.mean with a SamplingIterableInterval #270

@elevans

Description

@elevans

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions