Java DIP - operator Kirscha

Maski kompasu Kirscha to kolejny rodzaj maski pochodnej, która jest używana do wykrywania krawędzi. Ten operator jest również znany jako maska ​​kierunku. W tym operatorze bierzemy jedną maskę i obracamy ją we wszystkich ośmiu kierunkach kompasu, aby uzyskać krawędzie ośmiu kierunków.

Będziemy używać OpenCV funkcjonować filter2Daby zastosować operator Kirscha 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. Argument
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 zostać zeskanowane 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 do zastosowania operatora Kirscha 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,-3);
               put(0,1,-3);
               put(0,2,-3);
      
               put(1,0-3);
               put(1,1,0);
               put(1,2,-3);

               put(2,0,5);
               put(2,1,5);
               put(2,2,5);
            }
         };	      
         
         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 operatorem Kirscha wschodnich krawędzi, który jak podano poniżej -

Kirsch East

-3 -3 -3
-3 0 -3
5 5 5

Convolved Image (Kirsch East)

Ten oryginalny obraz jest spleciony z operatorem Kirscha krawędzi południowo-zachodnich, który jak podano poniżej -

Kirsch South West

5 5 -3
5 0 -3
-3 -3 -3

Convolved Image (Kirsch South West)