Skip to content

Commit bc64dbb

Browse files
gselzerctrueden
authored andcommitted
WIP: port geom namespace
1 parent 2af000f commit bc64dbb

File tree

76 files changed

+8168
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+8168
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2014 - 2018 ImageJ developers.
6+
* %%
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice,
11+
* this list of conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice,
13+
* this list of conditions and the following disclaimer in the documentation
14+
* and/or other materials provided with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
* POSSIBILITY OF SUCH DAMAGE.
27+
* #L%
28+
*/
29+
30+
package net.imagej.ops.geom;
31+
32+
import java.util.function.Function;
33+
34+
import net.imglib2.type.numeric.real.DoubleType;
35+
36+
import org.scijava.ops.OpDependency;
37+
import org.scijava.ops.core.computer.Computer;
38+
39+
/**
40+
* Generic implementation of
41+
* {@link net.imagej.ops.Ops.Geometric.BoundarySizeConvexHull}.
42+
*
43+
* @author Tim-Oliver Buchholz (University of Konstanz)
44+
*/
45+
public abstract class AbstractBoundarySizeConvexHull<I> implements Computer<I, DoubleType> {
46+
47+
@OpDependency(name = "geom.convexHull")
48+
private Function<I, I> convexHullFunc;
49+
50+
@OpDependency(name = "geom.boundarySize")
51+
private Function<I, DoubleType> perimeterFunc;
52+
53+
@Override
54+
public void compute(I input, DoubleType output) {
55+
output.set(perimeterFunc.apply(convexHullFunc.apply(input)));
56+
}
57+
58+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2014 - 2018 ImageJ developers.
6+
* %%
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice,
11+
* this list of conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice,
13+
* this list of conditions and the following disclaimer in the documentation
14+
* and/or other materials provided with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
* POSSIBILITY OF SUCH DAMAGE.
27+
* #L%
28+
*/
29+
30+
package net.imagej.ops.geom;
31+
32+
import java.util.function.Function;
33+
34+
import net.imglib2.type.numeric.real.DoubleType;
35+
36+
import org.scijava.ops.OpDependency;
37+
import org.scijava.ops.core.computer.Computer;
38+
39+
/**
40+
* Generic implementation of {@link net.imagej.ops.Ops.Geometric.Boxivity}.
41+
*
42+
* Based on http://www.math.uci.edu/icamp/summer/research_11/park/
43+
* shape_descriptors_survey.pdf, where boxivity is called rectangularity.
44+
*
45+
* @author Tim-Oliver Buchholz (University of Konstanz)
46+
*/
47+
public abstract class AbstractBoxivity<I> implements Computer<I, DoubleType> {
48+
49+
@OpDependency(name = "geom.size")
50+
private Function<I, DoubleType> areaFunc;
51+
52+
@OpDependency(name = "geom.smallestEnclosingBoundingBox")
53+
private Function<I, I> smallestEnclosingRectangleFunc;
54+
55+
@Override
56+
public void compute(I input, DoubleType output) {
57+
output.set(areaFunc.apply(input).getRealDouble()
58+
/ areaFunc.apply(smallestEnclosingRectangleFunc.apply(input)).getRealDouble());
59+
}
60+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2014 - 2018 ImageJ developers.
6+
* %%
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice,
11+
* this list of conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice,
13+
* this list of conditions and the following disclaimer in the documentation
14+
* and/or other materials provided with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
* POSSIBILITY OF SUCH DAMAGE.
27+
* #L%
28+
*/
29+
30+
package net.imagej.ops.geom;
31+
32+
import java.util.function.Function;
33+
34+
import net.imglib2.type.numeric.real.DoubleType;
35+
36+
import org.scijava.ops.OpDependency;
37+
import org.scijava.ops.core.computer.Computer;
38+
39+
/**
40+
* Generic implementation of {@link net.imagej.ops.Ops.Geometric.Convexity}.
41+
*
42+
* Based on
43+
* http://www.math.uci.edu/icamp/summer/research_11/park/shape_descriptors_survey.pdf.
44+
*
45+
* @author Tim-Oliver Buchholz (University of Konstanz)
46+
*/
47+
public abstract class AbstractConvexity<I> implements Computer<I, DoubleType> {
48+
49+
@OpDependency(name = "geom.boundarySize")
50+
private Function<I, DoubleType> boundarySize;
51+
52+
@OpDependency(name = "geom.boundarySizeConvexHull")
53+
private Function<I, DoubleType> boundarySizeConvexHull;
54+
55+
@Override
56+
public void compute(final I input, final DoubleType output) {
57+
output.set(boundarySizeConvexHull.apply(input).get() / boundarySize.apply(input).get());
58+
}
59+
60+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2014 - 2018 ImageJ developers.
6+
* %%
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice,
11+
* this list of conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice,
13+
* this list of conditions and the following disclaimer in the documentation
14+
* and/or other materials provided with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
* POSSIBILITY OF SUCH DAMAGE.
27+
* #L%
28+
*/
29+
30+
package net.imagej.ops.geom;
31+
32+
import java.util.function.Function;
33+
34+
import net.imglib2.type.numeric.real.DoubleType;
35+
36+
import org.scijava.ops.OpDependency;
37+
import org.scijava.ops.core.computer.Computer;
38+
39+
/**
40+
* Generic implementation of {@link net.imagej.ops.Ops.Geometric.SizeConvexHull}
41+
* .
42+
*
43+
* @author Tim-Oliver Buchholz (University of Konstanz)
44+
*/
45+
public abstract class AbstractSizeConvexHull<I> implements Computer<I, DoubleType> {
46+
47+
@OpDependency(name = "geom.convexHull")
48+
private Function<I, I> convexHullFunc;
49+
50+
@OpDependency(name = "geom.size")
51+
private Function<I, DoubleType> sizeFunc;
52+
53+
@Override
54+
public void compute(final I input, final DoubleType output) {
55+
output.set(sizeFunc.apply(convexHullFunc.apply(input)));
56+
}
57+
58+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2014 - 2018 ImageJ developers.
6+
* %%
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice,
11+
* this list of conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice,
13+
* this list of conditions and the following disclaimer in the documentation
14+
* and/or other materials provided with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
* POSSIBILITY OF SUCH DAMAGE.
27+
* #L%
28+
*/
29+
30+
package net.imagej.ops.geom;
31+
32+
import java.util.function.Function;
33+
34+
import net.imglib2.type.numeric.real.DoubleType;
35+
36+
import org.scijava.ops.OpDependency;
37+
import org.scijava.ops.core.computer.Computer;
38+
39+
/**
40+
* Generic implementation of {@link net.imagej.ops.Ops.Geometric.Solidity}.
41+
*
42+
* Based on https://de.mathworks.com/help/images/ref/regionprops.html.
43+
*
44+
* @author Tim-Oliver Buchholz (University of Konstanz)
45+
*/
46+
public abstract class AbstractSolidity<I> implements Computer<I, DoubleType> {
47+
48+
@OpDependency(name = "geom.size")
49+
private Function<I, DoubleType> volume;
50+
51+
@OpDependency(name = "geom.sizeConvexHull")
52+
private Function<I, DoubleType> convexHullVolume;
53+
54+
@Override
55+
public void compute(final I input, final DoubleType output) {
56+
output.set(volume.apply(input).get() / convexHullVolume.apply(input).get());
57+
}
58+
59+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2014 - 2018 ImageJ developers.
6+
* %%
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice,
11+
* this list of conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice,
13+
* this list of conditions and the following disclaimer in the documentation
14+
* and/or other materials provided with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
* POSSIBILITY OF SUCH DAMAGE.
27+
* #L%
28+
*/
29+
package net.imagej.ops.geom;
30+
31+
import java.util.function.Function;
32+
33+
import net.imglib2.Cursor;
34+
import net.imglib2.IterableInterval;
35+
import net.imglib2.RealLocalizable;
36+
import net.imglib2.RealPoint;
37+
import net.imglib2.roi.IterableRegion;
38+
39+
import org.scijava.ops.core.Op;
40+
import org.scijava.param.Parameter;
41+
import org.scijava.plugin.Plugin;
42+
import org.scijava.struct.ItemIO;
43+
44+
/**
45+
* This {@link Op} computes the centroid of a {@link IterableRegion} (Label).
46+
*
47+
* @author Tim-Oliver Buchholz (University of Konstanz)
48+
*/
49+
@Plugin(type = Op.class, name = "geom.centroid", priority = 1)
50+
@Parameter(key = "input")
51+
@Parameter(key = "centroid", type = ItemIO.OUTPUT)
52+
public class CentroidII implements Function<IterableInterval<?>, RealLocalizable> {
53+
54+
@Override
55+
public RealLocalizable apply(final IterableInterval<?> input) {
56+
int numDimensions = input.numDimensions();
57+
double[] output = new double[numDimensions];
58+
Cursor<?> c = input.localizingCursor();
59+
double[] pos = new double[numDimensions];
60+
while (c.hasNext()) {
61+
c.fwd();
62+
c.localize(pos);
63+
for (int i = 0; i < output.length; i++) {
64+
output[i] += pos[i];
65+
}
66+
}
67+
68+
for (int i = 0; i < output.length; i++) {
69+
output[i] = output[i] / input.size();
70+
}
71+
72+
return new RealPoint(output);
73+
}
74+
75+
}

0 commit comments

Comments
 (0)