Java DIP - Laplacian Operator
Operator Laplacian jest również operatorem pochodnym, który służy do znajdowania krawędzi na obrazie. Główną różnicą między operatorami Laplacian a innymi operatorami, takimi jak Prewitt, Sobel, Robinson i Kirsch, jest to, że wszystkie są maskami pochodnymi pierwszego rzędu, ale Laplacian jest maską pochodną drugiego rzędu.
Używamy OpenCV funkcjonować filter2Dzastosować operator Laplacian do obrazów. Można go znaleźć podImgprocpakiet. Jego składnia jest podana poniżej -
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Argumenty funkcji opisano poniżej -
Sr.No. | Argumenty |
---|---|
1 | src To jest obraz źródłowy. |
2 | dst To jest obraz docelowy. |
3 | depth To jest głębia zachodu słońca. Wartość ujemna (taka jak -1) wskazuje, że głębokość jest taka sama jak źródło. |
4 | kernel Jest to jądro, które ma być skanowane poprzez obraz. |
5 | anchor Jest to pozycja kotwicy względem jej jądra. Punkt lokalizacji (-1, -1) domyślnie wskazuje środek. |
6 | delta Jest to wartość dodawana do każdego piksela podczas splotu. Domyślnie jest to 0. |
7 | BORDER_DEFAULT Domyślnie pozwalamy na tę wartość. |
Oprócz metody filter2D () istnieją inne metody udostępniane przez klasę Imgproc. Są one krótko opisane -
Sr.No. | Metoda i opis |
---|---|
1 | cvtColor(Mat src, Mat dst, int code, int dstCn) Konwertuje obraz z jednej przestrzeni kolorów na inną. |
2 | dilate(Mat src, Mat dst, Mat kernel) Rozszerza obraz za pomocą określonego elementu strukturyzującego. |
3 | equalizeHist(Mat src, Mat dst) Wyrównuje histogram obrazu w skali szarości. |
4 | filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta) Łączy obraz z jądrem. |
5 | GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX) Rozmywa obraz za pomocą filtra Gaussa. |
6 | integral(Mat src, Mat sum) Oblicza całkę obrazu. |
Przykład
Poniższy przykład ilustruje użycie klasy Imgproc w celu zastosowania operatora Laplacian do obrazu w skali szarości.
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,0);
put(0,1,-1)
put(0,2,0);
put(1,0-1);
put(1,1,4);
put(1,2,-1);
put(2,0,0);
put(2,1,-1);
put(2,2,0);
}
};
Imgproc.filter2D(source, destination, -1, kernel);
Highgui.imwrite("output.jpg", destination);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Wynik
Po wykonaniu podanego kodu widoczne są następujące dane wyjściowe -
Oryginalny obraz
Ten oryginalny obraz jest spleciony z Laplacian Negative Operator, jak podano poniżej -
Laplacian Negative
0 | -1 | 0 |
-1 | 4 | -1 |
0 | -1 | 0 |
Obraz splątany (Laplacian Negative)
Ten oryginalny obraz jest spleciony z operatorem Laplacian Positive, jak podano poniżej -
Laplacian Positive
0 | 1 | 0 |
1 | -4 | 1 |
0 | 1 | 0 |