Skip to content

Commit 426552b

Browse files
committed
Widen projection op input
Now the project Op can project on a RAI input
1 parent 4c5b75f commit 426552b

2 files changed

Lines changed: 12 additions & 30 deletions

File tree

scijava-ops-image/src/main/java/org/scijava/ops/image/transform/project/project/DefaultProjectParallel.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import net.imglib2.loops.LoopBuilder;
3737
import net.imglib2.util.Intervals;
3838

39+
import net.imglib2.view.Views;
3940
import org.scijava.function.Computers;
4041

4142
/**
@@ -44,7 +45,7 @@
4445
* @implNote op name='transform.project', priority='99.'
4546
*/
4647
public class DefaultProjectParallel<T, V> implements
47-
Computers.Arity3<RandomAccessibleInterval<T>, Computers.Arity1<Iterable<T>, V>, Integer, RandomAccessibleInterval<V>>
48+
Computers.Arity3<RandomAccessibleInterval<T>, Computers.Arity1<? super RandomAccessibleInterval<T>, V>, Integer, RandomAccessibleInterval<V>>
4849
{
4950

5051
/**
@@ -57,9 +58,8 @@ public class DefaultProjectParallel<T, V> implements
5758
*/
5859
@Override
5960
public void compute(final RandomAccessibleInterval<T> input,
60-
Computers.Arity1<Iterable<T>, V> op, Integer dim,
61-
final RandomAccessibleInterval<V> output)
62-
{
61+
Computers.Arity1<? super RandomAccessibleInterval<T>, V> op, Integer dim,
62+
final RandomAccessibleInterval<V> output) {
6363
// TODO this first check is too simple, but for now ok
6464
if (input.numDimensions() != output.numDimensions() + 1) //
6565
throw new IllegalArgumentException(
@@ -69,22 +69,12 @@ public void compute(final RandomAccessibleInterval<T> input,
6969
"ERROR: input image must contain dimension " + dim);
7070

7171
LoopBuilder.setImages(output, Intervals.positions(output)).multiThreaded()
72-
.forEachChunk(chunk -> {
73-
var chunkRA = input.randomAccess();
74-
chunk.forEachPixel((pixel, position) -> {
75-
for (var d = 0; d < input.numDimensions(); d++) {
76-
if (d != dim) {
77-
chunkRA.setPosition(position.getIntPosition(d - (d > dim ? 1
78-
: 0)), d);
79-
}
80-
}
81-
82-
op.compute(new DimensionIterable(input.dimension(dim), dim, chunkRA),
83-
pixel);
84-
85-
});
86-
87-
return null;
72+
.forEachPixel((pixel, position) -> {
73+
var ra = input;
74+
for (var d = 0; d < position.numDimensions(); d++) {
75+
ra = Views.hyperSlice(ra, d < dim ? 0 : 1, position.getIntPosition(d));
76+
}
77+
op.compute(ra, pixel);
8878
});
8979
}
9080

scijava-ops-image/src/test/java/org/scijava/ops/image/transform/project/project/ProjectTest.java renamed to scijava-ops-image/src/test/java/org/scijava/ops/image/transform/project/ProjectTest.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
* #L%
2828
*/
2929

30-
package org.scijava.ops.image.transform.project.project;
30+
package org.scijava.ops.image.transform.project;
3131

3232
import static org.junit.jupiter.api.Assertions.assertEquals;
3333

@@ -50,7 +50,6 @@ public class ProjectTest extends AbstractOpTest {
5050
private Img<UnsignedByteType> in;
5151
private Img<UnsignedByteType> out1;
5252
private Img<UnsignedByteType> out2;
53-
private Computers.Arity1<Iterable<UnsignedByteType>, UnsignedByteType> op;
5453

5554
@BeforeEach
5655
public void initImg() {
@@ -70,18 +69,11 @@ public void initImg() {
7069

7170
out1 = TestImgGeneration.unsignedByteArray(false, 10, 10);
7271
out2 = TestImgGeneration.unsignedByteArray(false, 10, 10);
73-
74-
op = OpBuilder.matchComputer(ops, "stats.sum",
75-
new Nil<Iterable<UnsignedByteType>>()
76-
{}, new Nil<UnsignedByteType>() {});
7772
}
7873

7974
@Test
8075
public void testProjector() {
81-
// TODO: uncomment when this Op is ported (assuming it will be?)
82-
// ops.run(DefaultProjectParallel.class, out1, in, op, PROJECTION_DIM);
83-
// ops.run(DefaultProjectParallel.class, out2, in, op, PROJECTION_DIM);
84-
// testEquality(out1, out2);
76+
var op = ops.op("stats.sum").input(in).outType(UnsignedByteType.class).computer();
8577

8678
ops.op("transform.project").input(in, op, PROJECTION_DIM).output(out1)
8779
.compute();

0 commit comments

Comments
 (0)