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

Obraz skręcony (Laplacian Positive)