From 918538409bd256c12acd3c5acc58ac856b4eb534 Mon Sep 17 00:00:00 2001 From: Brian Northan Date: Tue, 12 Dec 2017 05:17:20 -0500 Subject: [PATCH 1/6] Autoformat --- .../net/imagej/ops/transform/TransformNamespace.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/imagej/ops/transform/TransformNamespace.java b/src/main/java/net/imagej/ops/transform/TransformNamespace.java index 6c74e84421..107da9dd2a 100644 --- a/src/main/java/net/imagej/ops/transform/TransformNamespace.java +++ b/src/main/java/net/imagej/ops/transform/TransformNamespace.java @@ -50,6 +50,7 @@ import net.imglib2.img.array.ArrayImg; import net.imglib2.interpolation.InterpolatorFactory; import net.imglib2.outofbounds.OutOfBoundsFactory; +import net.imglib2.realtransform.RealTransform; import net.imglib2.transform.integer.shear.InverseShearTransform; import net.imglib2.transform.integer.shear.ShearTransform; import net.imglib2.type.Type; @@ -173,7 +174,8 @@ public MixedTransformView addDimensionView( @OpMethod( op = net.imagej.ops.transform.collapseNumericView.DefaultCollapseNumeric2CompositeView.class) public > CompositeView> - collapseNumericView(final RandomAccessible input, final int numChannels) + collapseNumericView(final RandomAccessible input, + final int numChannels) { return (CompositeView>) ops().run( Ops.Transform.CollapseNumericView.class, input, numChannels); @@ -335,7 +337,8 @@ ExtendedRandomAccessibleInterval extendBorderView(final F input) @OpMethod( op = net.imagej.ops.transform.extendMirrorDoubleView.DefaultExtendMirrorDoubleView.class) public > - ExtendedRandomAccessibleInterval extendMirrorDoubleView(final F input) + ExtendedRandomAccessibleInterval extendMirrorDoubleView( + final F input) { return (ExtendedRandomAccessibleInterval) ops().run( Ops.Transform.ExtendMirrorDoubleView.class, input); @@ -354,7 +357,8 @@ ExtendedRandomAccessibleInterval extendMirrorDoubleView(final F input) @OpMethod( op = net.imagej.ops.transform.extendMirrorSingleView.DefaultExtendMirrorSingleView.class) public , F extends RandomAccessibleInterval> - ExtendedRandomAccessibleInterval extendMirrorSingleView(final F input) + ExtendedRandomAccessibleInterval extendMirrorSingleView( + final F input) { return (ExtendedRandomAccessibleInterval) ops().run( Ops.Transform.ExtendMirrorSingleView.class, input); From b8825734ad35cefa9c2ab68cfc38a72dc1bb7879 Mon Sep 17 00:00:00 2001 From: Brian Northan Date: Wed, 13 Dec 2017 09:43:12 -0500 Subject: [PATCH 2/6] Add transform interface and default op --- .../ops/transform/TransformNamespace.java | 57 +++++++++- .../realTransform/DefaultTransformView.java | 103 ++++++++++++++++++ src/main/templates/net/imagej/ops/Ops.list | 1 + 3 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/imagej/ops/transform/realTransform/DefaultTransformView.java diff --git a/src/main/java/net/imagej/ops/transform/TransformNamespace.java b/src/main/java/net/imagej/ops/transform/TransformNamespace.java index 107da9dd2a..fc1063d482 100644 --- a/src/main/java/net/imagej/ops/transform/TransformNamespace.java +++ b/src/main/java/net/imagej/ops/transform/TransformNamespace.java @@ -50,7 +50,7 @@ import net.imglib2.img.array.ArrayImg; import net.imglib2.interpolation.InterpolatorFactory; import net.imglib2.outofbounds.OutOfBoundsFactory; -import net.imglib2.realtransform.RealTransform; +import net.imglib2.realtransform.InvertibleRealTransform; import net.imglib2.transform.integer.shear.InverseShearTransform; import net.imglib2.transform.integer.shear.ShearTransform; import net.imglib2.type.Type; @@ -1207,4 +1207,59 @@ public > RandomAccessibleInterval concatenateView( ConcatenateViewWithAccessMode.class, source, concatenationAxis, mode); } + @OpMethod( + op = net.imagej.ops.transform.realTransform.DefaultTransformView.class) + public > RandomAccessibleInterval realTransform( + final RandomAccessibleInterval in, + final InvertibleRealTransform transform) + { + final RandomAccessibleInterval result = + (RandomAccessibleInterval) ops().run( + net.imagej.ops.transform.realTransform.DefaultTransformView.class, in, + transform); + return result; + } + + @OpMethod( + op = net.imagej.ops.transform.realTransform.DefaultTransformView.class) + public > RandomAccessibleInterval realTransform( + final RandomAccessibleInterval in, + final InvertibleRealTransform transform, final Interval outputInterval) + { + final RandomAccessibleInterval result = + (RandomAccessibleInterval) ops().run( + net.imagej.ops.transform.realTransform.DefaultTransformView.class, in, + transform, outputInterval); + return result; + } + + @OpMethod( + op = net.imagej.ops.transform.realTransform.DefaultTransformView.class) + public > RandomAccessibleInterval realTransform( + final RandomAccessibleInterval in, + final InvertibleRealTransform transform, final Interval outputInterval, + final InterpolatorFactory> interpolator) + { + final RandomAccessibleInterval result = + (RandomAccessibleInterval) ops().run( + net.imagej.ops.transform.realTransform.DefaultTransformView.class, in, + transform, outputInterval, interpolator); + return result; + } + + @OpMethod( + op = net.imagej.ops.transform.realTransform.DefaultTransformView.class) + public > RandomAccessibleInterval realTransform( + final RandomAccessibleInterval in, + final InvertibleRealTransform transform, final Interval outputInterval, + final InterpolatorFactory> interpolator, + final OutOfBoundsFactory> outOfBoundsFactory) + { + final RandomAccessibleInterval result = + (RandomAccessibleInterval) ops().run( + net.imagej.ops.transform.realTransform.DefaultTransformView.class, in, + transform, outputInterval, interpolator, outOfBoundsFactory); + return result; + } + } diff --git a/src/main/java/net/imagej/ops/transform/realTransform/DefaultTransformView.java b/src/main/java/net/imagej/ops/transform/realTransform/DefaultTransformView.java new file mode 100644 index 0000000000..0338cd0767 --- /dev/null +++ b/src/main/java/net/imagej/ops/transform/realTransform/DefaultTransformView.java @@ -0,0 +1,103 @@ +/* + * #%L + * ImageJ software for multidimensional image processing and analysis. + * %% + * Copyright (C) 2014 - 2018 ImageJ developers. + * %% + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * #L% + */ + +package net.imagej.ops.transform.realTransform; + +import net.imagej.ops.Ops; +import net.imagej.ops.special.function.AbstractUnaryFunctionOp; +import net.imglib2.FinalInterval; +import net.imglib2.Interval; +import net.imglib2.RandomAccessible; +import net.imglib2.RandomAccessibleInterval; +import net.imglib2.interpolation.InterpolatorFactory; +import net.imglib2.interpolation.randomaccess.LanczosInterpolatorFactory; +import net.imglib2.outofbounds.OutOfBoundsFactory; +import net.imglib2.outofbounds.OutOfBoundsMirrorFactory; +import net.imglib2.realtransform.InvertibleRealTransform; +import net.imglib2.realtransform.RealViews; +import net.imglib2.type.numeric.NumericType; +import net.imglib2.type.numeric.RealType; +import net.imglib2.view.IntervalView; +import net.imglib2.view.Views; + +import org.scijava.Priority; +import org.scijava.plugin.Parameter; +import org.scijava.plugin.Plugin; + +/** + * Applies an Affine transform to a {@link RandomAccessibleInterval} + * + * @author Brian Northan (True North Intelligent Algorithms) + * @author Martin Horn (University of Konstanz) + * @author Stefan Helfrich (University of Konstanz) + */ +@Plugin(type = Ops.Transform.RealTransform.class, priority = Priority.HIGH + 1) +public class DefaultTransformView & RealType> + extends + AbstractUnaryFunctionOp, RandomAccessibleInterval> + implements Ops.Transform.RealTransform +{ + + /** + * The transform to apply + */ + @Parameter + InvertibleRealTransform transform; + + @Parameter(required = false) + private Interval outputInterval = null; + + @Parameter(required = false) + private InterpolatorFactory> interpolator = null; + + @Parameter(required = false) + private OutOfBoundsFactory> outOfBoundsFactory = + new OutOfBoundsMirrorFactory<>(OutOfBoundsMirrorFactory.Boundary.SINGLE); + + @Override + public RandomAccessibleInterval calculate( + final RandomAccessibleInterval input) + { + + if (outputInterval == null) { + outputInterval = new FinalInterval(input); + } + + if (interpolator == null) { + interpolator = new LanczosInterpolatorFactory<>(); + } + + final IntervalView interval = Views.interval(Views.raster(RealViews + .transformReal(Views.interpolate(Views.extendZero(input), interpolator), + transform)), outputInterval); + + return interval; + } + +} diff --git a/src/main/templates/net/imagej/ops/Ops.list b/src/main/templates/net/imagej/ops/Ops.list index e38e8c72f6..a5b1e1a112 100644 --- a/src/main/templates/net/imagej/ops/Ops.list +++ b/src/main/templates/net/imagej/ops/Ops.list @@ -448,6 +448,7 @@ namespaces = ``` [name: "translateView", iface: "TranslateView"], [name: "unshearView", iface: "UnshearView"], [name: "zeroMinView", iface: "ZeroMinView"], + [name: "realTransform", iface: "RealTransform"], ]], [name: "zernike", iface: "Zernike", ops: [ [name: "magnitude", iface: "Magnitude"], From adb01b86411d4e21af5bfdd8b633acccfee5ae6d Mon Sep 17 00:00:00 2001 From: Brian Northan Date: Wed, 13 Dec 2017 09:43:22 -0500 Subject: [PATCH 3/6] Add transform test --- .../realTransform/RealTransformTest.java | 81 ++++++++++++++++++ .../transform/realTransform/lowresbridge.tif | Bin 0 -> 65684 bytes .../realTransform/rotatedscaledcenter.tif | Bin 0 -> 65684 bytes 3 files changed, 81 insertions(+) create mode 100644 src/test/java/net/imagej/ops/transform/realTransform/RealTransformTest.java create mode 100644 src/test/resources/net/imagej/ops/transform/realTransform/lowresbridge.tif create mode 100644 src/test/resources/net/imagej/ops/transform/realTransform/rotatedscaledcenter.tif diff --git a/src/test/java/net/imagej/ops/transform/realTransform/RealTransformTest.java b/src/test/java/net/imagej/ops/transform/realTransform/RealTransformTest.java new file mode 100644 index 0000000000..86cd7a991f --- /dev/null +++ b/src/test/java/net/imagej/ops/transform/realTransform/RealTransformTest.java @@ -0,0 +1,81 @@ +/*- + * #%L + * ImageJ software for multidimensional image processing and analysis. + * %% + * Copyright (C) 2014 - 2018 ImageJ developers. + * %% + * Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + * #L% + */ + +package net.imagej.ops.transform.realTransform; + +import static org.junit.Assert.assertEquals; + +import net.imagej.ops.AbstractOpTest; +import net.imglib2.Cursor; +import net.imglib2.RandomAccess; +import net.imglib2.RandomAccessibleInterval; +import net.imglib2.img.Img; +import net.imglib2.realtransform.AffineTransform2D; +import net.imglib2.type.numeric.integer.UnsignedByteType; +import net.imglib2.view.Views; + +import org.junit.Test; + +public class RealTransformTest extends AbstractOpTest { + + @Test + public void regressionTest() throws Exception { + + final Img image = openUnsignedByteType(getClass(), + "lowresbridge.tif"); + final Img expectedOutput = openUnsignedByteType( + getClass(), "rotatedscaledcenter.tif"); + + final AffineTransform2D transform = new AffineTransform2D(); + + transform.translate(-image.dimension(0) / 2, -image.dimension(0) / 2); + transform.rotate(1); + transform.scale(0.5); + transform.translate(image.dimension(0) / 2, image.dimension(0) / 2); + + final RandomAccessibleInterval actualOutput = ops + .transform().realTransform(image, transform); + + // compare the output image data to that stored in the file. + final Cursor cursor = Views.iterable(actualOutput) + .localizingCursor(); + final RandomAccess actualRA = actualOutput.randomAccess(); + final RandomAccess expectedRA = expectedOutput + .randomAccess(); + + while (cursor.hasNext()) { + cursor.fwd(); + actualRA.setPosition(cursor); + expectedRA.setPosition(cursor); + assertEquals(expectedRA.get().get(), actualRA.get().get(), 0); + } + + } + +} diff --git a/src/test/resources/net/imagej/ops/transform/realTransform/lowresbridge.tif b/src/test/resources/net/imagej/ops/transform/realTransform/lowresbridge.tif new file mode 100644 index 0000000000000000000000000000000000000000..c42a8febbe9dfbe3085e1cff8d6c5dbe002b87ab GIT binary patch literal 65684 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 Tae25~|98Lso&Wv+|Ihp{#y8)% literal 0 HcmV?d00001 diff --git a/src/test/resources/net/imagej/ops/transform/realTransform/rotatedscaledcenter.tif b/src/test/resources/net/imagej/ops/transform/realTransform/rotatedscaledcenter.tif new file mode 100644 index 0000000000000000000000000000000000000000..03c4426a5f57e8bfe4f3f91f24cf7738865f0b28 GIT binary patch literal 65684 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 literal 0 HcmV?d00001 From fec362163b547d1c0a7ea21619fd26702bdd543d Mon Sep 17 00:00:00 2001 From: Brian Northan Date: Fri, 8 Jun 2018 06:37:51 -0700 Subject: [PATCH 4/6] Use RealTransform to match ops --- .../java/net/imagej/ops/transform/TransformNamespace.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/imagej/ops/transform/TransformNamespace.java b/src/main/java/net/imagej/ops/transform/TransformNamespace.java index fc1063d482..1b07ca23fd 100644 --- a/src/main/java/net/imagej/ops/transform/TransformNamespace.java +++ b/src/main/java/net/imagej/ops/transform/TransformNamespace.java @@ -1215,7 +1215,7 @@ public > RandomAccessibleInterval realTransform( { final RandomAccessibleInterval result = (RandomAccessibleInterval) ops().run( - net.imagej.ops.transform.realTransform.DefaultTransformView.class, in, + Ops.Transform.RealTransform.class, in, transform); return result; } @@ -1228,7 +1228,7 @@ public > RandomAccessibleInterval realTransform( { final RandomAccessibleInterval result = (RandomAccessibleInterval) ops().run( - net.imagej.ops.transform.realTransform.DefaultTransformView.class, in, + Ops.Transform.RealTransform.class, in, transform, outputInterval); return result; } @@ -1242,7 +1242,7 @@ public > RandomAccessibleInterval realTransform( { final RandomAccessibleInterval result = (RandomAccessibleInterval) ops().run( - net.imagej.ops.transform.realTransform.DefaultTransformView.class, in, + Ops.Transform.RealTransform.class, in, transform, outputInterval, interpolator); return result; } @@ -1257,7 +1257,7 @@ public > RandomAccessibleInterval realTransform( { final RandomAccessibleInterval result = (RandomAccessibleInterval) ops().run( - net.imagej.ops.transform.realTransform.DefaultTransformView.class, in, + Ops.Transform.RealTransform.class, in, transform, outputInterval, interpolator, outOfBoundsFactory); return result; } From 58825ba11cc9cf8935a41998e5308abcb5b6c575 Mon Sep 17 00:00:00 2001 From: Brian Northan Date: Fri, 8 Jun 2018 06:53:59 -0700 Subject: [PATCH 5/6] Remove extraneous code --- .../imagej/ops/transform/TransformNamespace.java | 15 +-------------- .../realTransform/DefaultTransformView.java | 8 ++------ 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/imagej/ops/transform/TransformNamespace.java b/src/main/java/net/imagej/ops/transform/TransformNamespace.java index 1b07ca23fd..96dd59dbcc 100644 --- a/src/main/java/net/imagej/ops/transform/TransformNamespace.java +++ b/src/main/java/net/imagej/ops/transform/TransformNamespace.java @@ -1247,19 +1247,6 @@ public > RandomAccessibleInterval realTransform( return result; } - @OpMethod( - op = net.imagej.ops.transform.realTransform.DefaultTransformView.class) - public > RandomAccessibleInterval realTransform( - final RandomAccessibleInterval in, - final InvertibleRealTransform transform, final Interval outputInterval, - final InterpolatorFactory> interpolator, - final OutOfBoundsFactory> outOfBoundsFactory) - { - final RandomAccessibleInterval result = - (RandomAccessibleInterval) ops().run( - Ops.Transform.RealTransform.class, in, - transform, outputInterval, interpolator, outOfBoundsFactory); - return result; - } + } diff --git a/src/main/java/net/imagej/ops/transform/realTransform/DefaultTransformView.java b/src/main/java/net/imagej/ops/transform/realTransform/DefaultTransformView.java index 0338cd0767..c0f0c59358 100644 --- a/src/main/java/net/imagej/ops/transform/realTransform/DefaultTransformView.java +++ b/src/main/java/net/imagej/ops/transform/realTransform/DefaultTransformView.java @@ -71,14 +71,10 @@ public class DefaultTransformView & RealType> InvertibleRealTransform transform; @Parameter(required = false) - private Interval outputInterval = null; + private Interval outputInterval; @Parameter(required = false) - private InterpolatorFactory> interpolator = null; - - @Parameter(required = false) - private OutOfBoundsFactory> outOfBoundsFactory = - new OutOfBoundsMirrorFactory<>(OutOfBoundsMirrorFactory.Boundary.SINGLE); + private InterpolatorFactory> interpolator; @Override public RandomAccessibleInterval calculate( From 24454d5fc2d38eb255e4181aff86a1bf68e14cc9 Mon Sep 17 00:00:00 2001 From: Brian Northan Date: Fri, 8 Jun 2018 06:54:32 -0700 Subject: [PATCH 6/6] Make sure test calls DefaultTransformView --- .../ops/transform/realTransform/RealTransformTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/net/imagej/ops/transform/realTransform/RealTransformTest.java b/src/test/java/net/imagej/ops/transform/realTransform/RealTransformTest.java index 86cd7a991f..f4cf8e4c97 100644 --- a/src/test/java/net/imagej/ops/transform/realTransform/RealTransformTest.java +++ b/src/test/java/net/imagej/ops/transform/realTransform/RealTransformTest.java @@ -59,8 +59,11 @@ public void regressionTest() throws Exception { transform.scale(0.5); transform.translate(image.dimension(0) / 2, image.dimension(0) / 2); - final RandomAccessibleInterval actualOutput = ops - .transform().realTransform(image, transform); + @SuppressWarnings("unchecked") + final RandomAccessibleInterval actualOutput = + (RandomAccessibleInterval) ops.run( + net.imagej.ops.transform.realTransform.DefaultTransformView.class, + image, transform); // compare the output image data to that stored in the file. final Cursor cursor = Views.iterable(actualOutput)