-
Notifications
You must be signed in to change notification settings - Fork 107
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add kernel operation and add both kernel and morphology to code gener…
…ation
- Loading branch information
1 parent
c78b49c
commit 72d9919
Showing
8 changed files
with
177 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
core/src/main/java/edu/wpi/grip/core/operations/opencv/NewKernelOperation.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
package edu.wpi.grip.core.operations.opencv; | ||
|
||
|
||
import edu.wpi.grip.core.Description; | ||
import edu.wpi.grip.core.OperationDescription; | ||
import edu.wpi.grip.core.sockets.InputSocket; | ||
import edu.wpi.grip.core.sockets.OutputSocket; | ||
import edu.wpi.grip.core.sockets.SocketHint; | ||
import edu.wpi.grip.core.sockets.SocketHints; | ||
|
||
import com.google.inject.Inject; | ||
|
||
import org.bytedeco.javacpp.opencv_core.Mat; | ||
import org.bytedeco.javacpp.opencv_core.Size; | ||
import org.bytedeco.javacpp.opencv_imgproc; | ||
import org.python.google.common.collect.ImmutableList; | ||
|
||
import java.util.List; | ||
|
||
@Description(name = "New Kernel", | ||
summary = "Create a kernel of custom size", | ||
category = OperationDescription.Category.OPENCV, | ||
iconName = "kernel") | ||
public class NewKernelOperation implements CVOperation { | ||
|
||
private final SocketHint<KernelEnum> typeHint = SocketHints.createEnumSocketHint("kernelType", | ||
KernelEnum.MORPH_RECT); | ||
private final SocketHint<Number> widthHint = SocketHints.Inputs | ||
.createNumberSpinnerSocketHint("width", 1, 1, Integer.MAX_VALUE); | ||
private final SocketHint<Number> heightHint = SocketHints.Inputs | ||
.createNumberSpinnerSocketHint("height", 1, 1, Integer.MAX_VALUE); | ||
private final SocketHint<Mat> outputHint = SocketHints.Outputs.createMatSocketHint("kernel"); | ||
|
||
|
||
private final InputSocket<Number> widthSocket; | ||
private final InputSocket<Number> heightSocket; | ||
private final InputSocket<KernelEnum> typeSocket; | ||
|
||
private final OutputSocket<Mat> outputSocket; | ||
|
||
@Inject | ||
@SuppressWarnings("JavadocMethod") | ||
public NewKernelOperation(InputSocket.Factory inputSocketFactory, | ||
OutputSocket.Factory outputSocketFactory) { | ||
this.typeSocket = inputSocketFactory.create(typeHint); | ||
this.widthSocket = inputSocketFactory.create(widthHint); | ||
this.heightSocket = inputSocketFactory.create(heightHint); | ||
this.outputSocket = outputSocketFactory.create(outputHint); | ||
} | ||
|
||
@Override | ||
public List<InputSocket> getInputSockets() { | ||
return ImmutableList.of( | ||
typeSocket, | ||
widthSocket, | ||
heightSocket | ||
); | ||
} | ||
|
||
@Override | ||
public List<OutputSocket> getOutputSockets() { | ||
return ImmutableList.of( | ||
outputSocket | ||
); | ||
} | ||
|
||
@Override | ||
public void perform() { | ||
final int widthValue = widthSocket.getValue().get().intValue(); | ||
final int heightValue = heightSocket.getValue().get().intValue(); | ||
final int kernelType = typeSocket.getValue().get().value; | ||
|
||
outputSocket.setValue(opencv_imgproc.getStructuringElement(kernelType, new Size(widthValue, | ||
heightValue))); | ||
} | ||
|
||
public enum KernelEnum { | ||
MORPH_RECT(0), | ||
MORPH_CROSS(1), | ||
MORPH_ELLIPSE(2); | ||
|
||
public final int value; | ||
|
||
KernelEnum(int value) { | ||
this.value = value; | ||
} | ||
} | ||
} | ||
|
14 changes: 14 additions & 0 deletions
14
ui/src/main/resources/edu/wpi/grip/ui/codegeneration/cpp/operations/CV_morphologyEx.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
/** | ||
* Performs advanced morphology functions. | ||
* @param src the Image to morph. | ||
* @param op the morph operation | ||
* @param kernel the kernel for morphing. | ||
* @param anchor the center of the kernel. | ||
* @param iterations the number of times to perform the morph. | ||
* @param borderType pixel extrapolation method. | ||
* @param borderValue value to be used for a constant border. | ||
* @param dst Output Image. | ||
*/ | ||
void $className::#func($step ["src", "op", "kernel", "anchor", "iterations", "borderType", "borderValue", "dst"]) { | ||
cv::morphologyEx(src, dst, op, kernel, anchor, (int)iterations, borderType, borderValue); | ||
} |
8 changes: 8 additions & 0 deletions
8
ui/src/main/resources/edu/wpi/grip/ui/codegeneration/cpp/operations/New_Kernel.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
/** | ||
* Creates kernel of given shape and size | ||
* @param shape the kernels MorphShape. | ||
* @param size the size of the kernel. | ||
*/ | ||
void $className::#func($step ["shape", "size"]) { | ||
return cv::getStructuringElement(shape, size)); | ||
} |
24 changes: 24 additions & 0 deletions
24
ui/src/main/resources/edu/wpi/grip/ui/codegeneration/java/operations/CV_morphologyEx.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
/** | ||
* Performs advanced morphology functions. | ||
* @param src the Image to morph. | ||
* @param op the operation to perform. | ||
* @param kernel the kernel for morphing. | ||
* @param anchor the center of the kernel. | ||
* @param iterations the number of times to perform the morph. | ||
* @param borderType pixel extrapolation method. | ||
* @param borderValue value to be used for a constant border. | ||
* @param dst Output Image. | ||
*/ | ||
private void $tMeth.name($step.name())(Mat src, MorphType op, Mat kernel, Point anchor, double iterations, | ||
int borderType, Scalar borderValue, Mat dst) { | ||
if (kernel == null) { | ||
kernel = new Mat(); | ||
} | ||
if (anchor == null) { | ||
anchor = new Point(-1,-1); | ||
} | ||
if (borderValue == null) { | ||
borderValue = new Scalar(-1); | ||
} | ||
Imgproc.morphologyEx(src, dst, op, kernel, anchor, (int)iterations, borderType, borderValue); | ||
} |
8 changes: 8 additions & 0 deletions
8
ui/src/main/resources/edu/wpi/grip/ui/codegeneration/java/operations/New_Kernel.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
/** | ||
* Creates a kernel of given shape and size. | ||
* @param shape the kernels MorphShape. | ||
* @param size the size of the kernel. | ||
*/ | ||
private void $tMeth.name($step.name())(Mat shape, Size size) { | ||
Imgproc.getStructuringElement(shape, size); | ||
} |
14 changes: 14 additions & 0 deletions
14
ui/src/main/resources/edu/wpi/grip/ui/codegeneration/python/operations/CV_morphologyEx.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
@staticmethod | ||
def $tMeth.name($step.name())(src, op, kernel, anchor, iterations, border_type, border_value): | ||
"""Expands area of lower value in an image. | ||
Args: | ||
src: A numpy.ndarray. | ||
kernel: The kernel for erosion. A numpy.ndarray. | ||
iterations: the number of times to erode. | ||
border_type: Opencv enum that represents a border type. | ||
border_value: value to be used for a constant border. | ||
Returns: | ||
A numpy.ndarray after erosion. | ||
""" | ||
return cv2.morphologyEx(src, op, kernel, anchor, iterations = (int) (iterations +0.5), | ||
borderType = border_type, borderValue = border_value) |
10 changes: 10 additions & 0 deletions
10
ui/src/main/resources/edu/wpi/grip/ui/codegeneration/python/operations/New_Kernel.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
@staticmethod | ||
def $tMeth.name($step.name())(shape, width, height): | ||
"""Creates kernel of given shape and size. | ||
Args: | ||
shape: The kernel MorphShape | ||
size: Size of kernel as a tuple | ||
Returns: | ||
A numpy.ndarray representing the kernel. | ||
""" | ||
return cv2.getStructuringElement(shape, (int(width), int(height))) |