Java DIP - Laplacian Operatörü

Laplacian Operatörü ayrıca bir görüntüdeki kenarları bulmak için kullanılan bir türev operatördür. Laplacian ile Prewitt, Sobel, Robinson ve Kirsch gibi diğer operatörler arasındaki en büyük fark, bunların hepsinin birinci dereceden türev maskeler olması, ancak Laplacian'ın ikinci dereceden bir türev maskesidir.

Kullanırız OpenCV işlevi filter2DLaplacian operatörünü görüntülere uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argümanlar
1

src

Kaynak görüntüdür.

2

dst

Hedef görüntüdür.

3

depth

Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir.

4

kernel

Görüntü üzerinden taranacak çekirdektir.

5

anchor

Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir.

6

delta

Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır.

7

BORDER_DEFAULT

Bu değere varsayılan olarak izin veriyoruz.

Filter2D () yönteminin dışında, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

cvtColor(Mat src, Mat dst, int code, int dstCn)

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta)

Çekirdek ile bir görüntüyü birleştirir.

5

GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX)

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir Grayscale görüntüsüne Laplacian operatörünü uygulamak için Imgproc sınıfının kullanımını gösterir.

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());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Bu orijinal görüntü, aşağıda verildiği gibi Laplacian Negative operatörü ile birleştirilir -

Laplacian Negatif

0 -1 0
-1 4 -1
0 -1 0

Dönüştürülmüş Görüntü (Laplacian Negatifi)

Bu orijinal görüntü, aşağıda verildiği gibi Laplacian Positive operatörü ile birleştirilmiştir -

Laplacian Pozitif

0 1 0
1 -4 1
0 1 0

Katıştırılmış Görüntü (Laplacian Pozitif)