Java DIP - Robinson Operator
Robinson-Kompassmasken sind eine weitere Art von abgeleiteten Masken, die zur Kantenerkennung verwendet werden. Dieser Operator wird auch als Richtungsmaske bezeichnet. In diesem Operator nehmen wir eine Maske und drehen sie in alle acht Hauptrichtungen, um Kanten der acht Richtungen zu erhalten.
Wir werden verwenden OpenCV Funktion filter2Dum den Robinson-Operator auf Bilder anzuwenden. Es kann unter gefunden werdenImgprocPaket. Die Syntax ist unten angegeben -
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Die Funktionsargumente werden unten beschrieben -
Sr.Nr. | Argument & Beschreibung |
---|---|
1 |
src Es ist ein Quellbild. |
2 |
dst Es ist ein Zielbild. |
3 |
depth Es ist die Tiefe von dst. Ein negativer Wert (z. B. -1) zeigt an, dass die Tiefe der Quelle entspricht. |
4 |
kernel Es ist der Kernel, der durch das Bild gescannt werden soll. |
5 |
anchor Dies ist die Position des Ankers relativ zu seinem Kernel. Der Positionspunkt (-1, -1) gibt standardmäßig die Mitte an. |
6 |
delta Dies ist ein Wert, der während der Faltung zu jedem Pixel hinzugefügt wird. Standardmäßig ist es 0. |
7 |
BORDER_DEFAULT Wir lassen diesen Wert standardmäßig. |
Neben der filter2D-Methode gibt es weitere Methoden, die von der Imgproc-Klasse bereitgestellt werden. Sie werden kurz beschrieben -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 |
cvtColor(Mat src, Mat dst, int code, int dstCn) Es konvertiert ein Bild von einem Farbraum in einen anderen. |
2 |
dilate(Mat src, Mat dst, Mat kernel) Es erweitert ein Bild mithilfe eines bestimmten Strukturierungselements. |
3 |
equalizeHist(Mat src, Mat dst) Es gleicht das Histogramm eines Graustufenbildes aus. |
4 |
filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta) Es faltet ein Bild mit dem Kernel. |
5 |
GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX) Es verwischt ein Bild mit einem Gaußschen Filter. |
6 |
integral(Mat src, Mat sum) Es berechnet das Integral eines Bildes. |
Beispiel
Das folgende Beispiel zeigt die Verwendung der Imgproc-Klasse zum Anwenden des Robinson-Operators auf ein Graustufenbild.
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
public class convolution {
public static void main( String[] args ) {
try {
int kernelSize = 9;
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat source = Highgui.imread("grayscale.jpg", Highgui.CV_LOAD_IMAGE_GRAYSCALE);
Mat destination = new Mat(source.rows(),source.cols(),source.type());
Mat kernel = new Mat(kernelSize,kernelSize, CvType.CV_32F) {
{
put(0,0,-1);
put(0,1,0);
put(0,2,1);
put(1,0-2);
put(1,1,0);
put(1,2,2);
put(2,0,-1);
put(2,1,0);
put(2,2,1);
}
};
Imgproc.filter2D(source, destination, -1, kernel);
Highgui.imwrite("output.jpg", destination);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Ausgabe
Wenn Sie den angegebenen Code ausführen, wird die folgende Ausgabe angezeigt:
Original Bild
Dieses Originalbild wird mit dem Robinson-Operator der Nordkanten wie unten angegeben gefaltet -
Nordrichtungsmaske
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
Gefaltetes Bild (Robinson North)
Dieses Originalbild wurde auch mit dem Robinson-Operator von East Rands wie unten angegeben gefaltet -
Ostrichtungsmaske
-1 | -2 | -1 |
0 | 0 | 0 |
1 | 2 | 1 |