Skip to content

Commit baf869e

Browse files
committed
Modernize added code
1 parent 5f49837 commit baf869e

File tree

3 files changed

+32
-53
lines changed

3 files changed

+32
-53
lines changed

imagej/imagej-ops2/src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@
167167
requires ojalgo;
168168
requires jama;
169169
requires mines.jtk;
170+
requires net.imglib2.realtransform;
170171

171172
provides org.scijava.types.TypeExtractor with
172173
net.imagej.ops2.types.ImgFactoryTypeExtractor,
Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@
2727
* #L%
2828
*/
2929

30-
package net.imagej.ops2.transform.realTransform;
30+
package net.imagej.ops2.transform;
31+
32+
import org.scijava.function.Functions;
33+
import org.scijava.ops.spi.Optional;
3134

3235
import net.imglib2.FinalInterval;
3336
import net.imglib2.Interval;
@@ -39,30 +42,16 @@
3942
import net.imglib2.realtransform.RealViews;
4043
import net.imglib2.type.numeric.NumericType;
4144
import net.imglib2.type.numeric.RealType;
42-
import net.imglib2.view.IntervalView;
4345
import net.imglib2.view.Views;
4446

45-
import org.scijava.Priority;
46-
import org.scijava.ops.core.Op;
47-
import org.scijava.ops.function.Functions;
48-
import org.scijava.param.Parameter;
49-
import org.scijava.plugin.Plugin;
50-
import org.scijava.struct.ItemIO;
51-
5247
/**
5348
* Applies an Affine transform to a {@link RandomAccessibleInterval}
5449
*
5550
* @author Brian Northan (True North Intelligent Algorithms)
5651
* @author Martin Horn (University of Konstanz)
5752
* @author Stefan Helfrich (University of Konstanz)
53+
* @implNote op names="transform.realTransform", priority="101.0"
5854
*/
59-
@Plugin(type = Op.class, name = "transform.realTransform",
60-
priority = Priority.HIGH + 1)
61-
@Parameter(key = "input")
62-
@Parameter(key = "transform")
63-
@Parameter(key = "outputInterval")
64-
@Parameter(key = "interpolator")
65-
@Parameter(key = "output", itemIO = ItemIO.OUTPUT)
6655
public class DefaultTransformView<T extends NumericType<T> & RealType<T>>
6756
implements
6857
Functions.Arity4<RandomAccessibleInterval<T>, InvertibleRealTransform, Interval, InterpolatorFactory<T, RandomAccessible<T>>, RandomAccessibleInterval<T>>
@@ -72,7 +61,7 @@ public class DefaultTransformView<T extends NumericType<T> & RealType<T>>
7261
* TODO: declare {@code outputInterval}, {@code interpolator} as optional once
7362
* <a href=https://github.com/scijava/incubator/pull/32>this issue</a> has
7463
* been resolved. Until then, this op <b>must</b> be called as a
75-
* {@link org.scijava.ops.function.Functions.Arity4}
64+
* {@link Functions.Arity4}
7665
*
7766
* @param input the input
7867
* @param transform the transform to apply
@@ -82,10 +71,12 @@ public class DefaultTransformView<T extends NumericType<T> & RealType<T>>
8271
* @return the output
8372
*/
8473
@Override
85-
public RandomAccessibleInterval<T> apply(RandomAccessibleInterval<T> input,
86-
InvertibleRealTransform transform, Interval outputInterval,
87-
InterpolatorFactory<T, RandomAccessible<T>> interpolator)
88-
{
74+
public RandomAccessibleInterval<T> apply( //
75+
RandomAccessibleInterval<T> input, //
76+
InvertibleRealTransform transform, //
77+
@Optional Interval outputInterval, //
78+
@Optional InterpolatorFactory<T, RandomAccessible<T>> interpolator //
79+
) {
8980
if (outputInterval == null) {
9081
outputInterval = new FinalInterval(input);
9182
}
@@ -94,11 +85,11 @@ public RandomAccessibleInterval<T> apply(RandomAccessibleInterval<T> input,
9485
interpolator = new LanczosInterpolatorFactory<>();
9586
}
9687

97-
final IntervalView<T> interval = Views.interval(Views.raster(RealViews
98-
.transformReal(Views.interpolate(Views.extendZero(input), interpolator),
99-
transform)), outputInterval);
100-
101-
return interval;
88+
var extended = Views.extendZero(input);
89+
var interpolated = Views.interpolate(extended, interpolator);
90+
var transformed = RealViews.transformReal(interpolated, transform);
91+
var rasterized = Views.raster(transformed);
92+
return Views.interval(rasterized, outputInterval);
10293
}
10394

10495
}

imagej/imagej-ops2/src/test/java/net/imagej/ops2/transform/realTransform/RealTransformTest.java

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -27,56 +27,43 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2727

2828
package net.imagej.ops2.transform.realTransform;
2929

30-
import static org.junit.Assert.assertEquals;
30+
import static org.junit.jupiter.api.Assertions.assertEquals;
31+
32+
import org.junit.jupiter.api.Test;
33+
import org.scijava.types.Nil;
3134

3235
import net.imagej.ops2.AbstractOpTest;
3336
import net.imglib2.Cursor;
34-
import net.imglib2.Interval;
3537
import net.imglib2.RandomAccess;
36-
import net.imglib2.RandomAccessible;
3738
import net.imglib2.RandomAccessibleInterval;
3839
import net.imglib2.img.Img;
39-
import net.imglib2.interpolation.InterpolatorFactory;
4040
import net.imglib2.realtransform.AffineTransform2D;
41-
import net.imglib2.realtransform.InvertibleRealTransform;
4241
import net.imglib2.type.numeric.integer.UnsignedByteType;
4342
import net.imglib2.view.Views;
4443

45-
import org.junit.jupiter.api.Test;
46-
47-
import org.scijava.ops.function.Functions;
48-
import org.scijava.types.Nil;
49-
5044
public class RealTransformTest extends AbstractOpTest {
5145

5246
@Test
5347
public void regressionTest() throws Exception {
5448

55-
final Img<UnsignedByteType> image = openUnsignedByteType(getClass(),
49+
final Img<UnsignedByteType> image = openRelativeUnsignedByteImg(getClass(),
5650
"lowresbridge.tif");
57-
final Img<UnsignedByteType> expectedOutput = openUnsignedByteType(
51+
final Img<UnsignedByteType> expectedOutput = openRelativeUnsignedByteImg(
5852
getClass(), "rotatedscaledcenter.tif");
5953

6054
final AffineTransform2D transform = new AffineTransform2D();
6155

62-
transform.translate(-image.dimension(0) / 2, -image.dimension(0) / 2);
56+
double translation = ((double) image.dimension(0) / 2);
57+
transform.translate(-translation, -translation);
6358
transform.rotate(1);
6459
transform.scale(0.5);
65-
transform.translate(image.dimension(0) / 2, image.dimension(0) / 2);
60+
transform.translate(translation, translation);
6661

67-
// TODO: make the op call simpler once incubator PR 32 has been merged
68-
Nil<RandomAccessibleInterval<UnsignedByteType>> imgNil = new Nil<>() {};
69-
Nil<InvertibleRealTransform> transformNil = Nil.of(
70-
InvertibleRealTransform.class);
71-
Nil<Interval> intervalNil = Nil.of(Interval.class);
72-
Nil<InterpolatorFactory<UnsignedByteType, RandomAccessible<UnsignedByteType>>> factoryNil =
73-
new Nil<>()
74-
{};
75-
final Functions.Arity4<RandomAccessibleInterval<UnsignedByteType>, InvertibleRealTransform, Interval, InterpolatorFactory<UnsignedByteType, RandomAccessible<UnsignedByteType>>, RandomAccessibleInterval<UnsignedByteType>> f =
76-
ops.op("transform.realTransform").inType(imgNil, transformNil,
77-
intervalNil, factoryNil).outType(imgNil).function();
78-
final RandomAccessibleInterval<UnsignedByteType> actualOutput = f.apply(
79-
image, transform, null, null);
62+
var outType = new Nil<RandomAccessibleInterval<UnsignedByteType>>() {};
63+
var actualOutput = ops.op("transform.realTransform").arity2() //
64+
.input(image, transform) //
65+
.outType(outType) //
66+
.apply();
8067

8168
// compare the output image data to that stored in the file.
8269
final Cursor<UnsignedByteType> cursor = Views.iterable(actualOutput)

0 commit comments

Comments
 (0)