Java DIP - Menerapkan Filter Kotak

Kami menerapkan filter Kotak yang mengaburkan gambar. Filter Kotak dapat berukuran 3x3, 5x5, 9x9 dll.

Kita gunakan OpenCV fungsi filter2Duntuk menerapkan filter Kotak ke gambar. Itu dapat ditemukan di bawahImgprocpaket. Sintaksnya diberikan di bawah ini -

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

Argumen fungsi dijelaskan di bawah ini -

Sr.No. Argumen & Deskripsi
1

src

Itu adalah gambar sumber.

2

dst

Itu adalah gambar tujuan.

3

depth

Ini adalah kedalaman dst. Nilai negatif (seperti -1) menunjukkan bahwa kedalamannya sama dengan sumbernya.

4

kernel

Ini adalah kernel yang akan dipindai melalui gambar.

5

anchor

Ini adalah posisi jangkar relatif terhadap kernelnya. Lokasi Titik (-1, -1) menunjukkan pusat secara default.

6

delta

Ini adalah nilai yang akan ditambahkan ke setiap piksel selama konvolusi. Secara default adalah 0.

7

BORDER_DEFAULT

Kami membiarkan nilai ini secara default.

Selain metode filter2D (), ada metode lain yang disediakan oleh kelas Imgproc. Mereka dijelaskan secara singkat -

Sr.No. Metode & Deskripsi
1

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

Ini mengubah gambar dari satu ruang warna ke ruang warna lainnya.

2

dilate(Mat src, Mat dst, Mat kernel)

Ini melebarkan gambar dengan menggunakan elemen penataan tertentu.

3

equalizeHist(Mat src, Mat dst)

Ini menyamakan histogram dari gambar grayscale.

4

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

Ini menggabungkan gambar dengan kernel.

5

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

Ini mengaburkan gambar menggunakan filter Gaussian.

6

integral(Mat src, Mat sum)

Ini menghitung integral dari sebuah gambar.

Contoh

Contoh berikut menunjukkan penggunaan kelas Imgproc untuk menerapkan filter Kotak ke gambar Grayscale.

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 = Mat.ones(kernelSize,kernelSize, CvType.CV_32F);	      
         
         for(int i=0; i<kernel.rows(); i++) {
            for(int j=0; j<kernel.cols(); j++) {
            
               double[] m = kernel.get(i, j);
               
               for(int k =0; k<m.length; k++) {
                  m[k] = m[k]/(kernelSize * kernelSize);
               }
               kernel.put(i,j, m);
            }
         }	   
         
         Imgproc.filter2D(source, destination, -1, kernel);
         Highgui.imwrite("output.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Keluaran

Saat Anda menjalankan kode yang diberikan, output berikut akan terlihat -

Gambar asli

Dalam contoh ini kami menggabungkan gambar kami dengan filter berikut (kernel). Filter ini menghasilkan gambar yang buram saat ukurannya bertambah.

Gambar asli ini telah dilengkungkan dengan filter kotak ukuran 5, yang diberikan di bawah ini -

Filter kotak ukuran 5

1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25

Gambar Konvolusi (dengan Filter Kotak Ukuran 5)

Gambar Konvolusi (dengan Filter Kotak Ukuran 9)