OpenCV - Genişleme

Erozyon ve genişleme iki tür morfolojik işlemdir. Adından da anlaşılacağı gibi morfolojik işlemler, görüntüleri şekillerine göre işleyen işlemler dizisidir.

Verilen girdi görüntüsüne bağlı olarak bir "yapısal eleman" geliştirilir. Bu, iki prosedürden herhangi birinde yapılabilir. Bunlar, görüntüyü netleştirmek için gürültüyü gidermeyi ve kusurları gidermeyi amaçlamaktadır.

Genişleme

Bu prosedür, kare veya daire gibi belirli bir şeklin bazı çekirdeği ile evrişimi takip eder. Bu çekirdeğin merkezini belirten bir çapa noktası vardır.

Bu çekirdek, maksimum piksel değerini hesaplamak için resmin üzerine biner. Hesaplandıktan sonra resim ortada çapa ile değiştirilir. Bu prosedürle, parlak bölgelerin alanları boyut olarak büyür ve dolayısıyla görüntü boyutu artar.

Örneğin, beyaz gölgeli veya parlak gölgeli bir nesnenin boyutu artarken, siyah veya koyu gölgeli bir nesnenin boyutu azalır.

Genişletme işlemini bir görüntü üzerinde, dilate() yöntemi imgprocsınıf. Bu yöntemin sözdizimi aşağıdadır.

dilate(src, dst, kernel)

Bu yöntem aşağıdaki parametreleri kabul eder -

  • src - bir Mat Bu işlem için kaynağı (giriş görüntüsü) temsil eden nesne.

  • dst - bir Mat Bu işlem için hedefi (çıktı görüntüsü) temsil eden nesne.

  • kernel - bir Mat çekirdeği temsil eden nesne.

Misal

Çekirdek matrisini şu şekilde hazırlayabilirsiniz: getStructuringElement()yöntem. Bu yöntem, temsil eden bir tamsayı kabul edermorph_rect tip ve tipte bir nesne Size.

Imgproc.getStructuringElement(int shape, Size ksize);

Aşağıdaki program, belirli bir görüntü üzerinde genişletme işleminin nasıl gerçekleştirileceğini gösterir.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class DilateTest {
   public static void main( String[] args ) {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      // Reading the Image from the file and storing it in to a Matrix object
      String file ="C:/EXAMPLES/OpenCV/sample.jpg";
      Mat src = Imgcodecs.imread(file);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();

      // Preparing the kernel matrix object 
      Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, 
         new  Size((2*2) + 1, (2*2)+1));

      // Applying dilate on the Image
      Imgproc.dilate(src, dst, kernel);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap10/Dilation.jpg", dst);

      System.out.println("Image Processed");
   } 
}

Giriş

Aşağıdakinin giriş görüntüsü olduğunu varsayalım sample.jpg yukarıdaki programda belirtilmiştir.

Çıktı

Programı çalıştırırken aşağıdaki çıktıyı alacaksınız -

Image Processed

Belirtilen yolu açarsanız, çıktı görüntüsünü aşağıdaki gibi gözlemleyebilirsiniz -