OpenCV - dylatacja

Erozja i dylatacja to dwa rodzaje operacji morfologicznych. Jak sama nazwa wskazuje, operacje morfologiczne to zbiór operacji przetwarzających obrazy zgodnie z ich kształtami.

Na podstawie podanego obrazu wejściowego opracowywany jest „element strukturalny”. Można to zrobić w dowolnej z dwóch procedur. Mają one na celu usunięcie szumów i wyrównanie niedoskonałości, aby obraz był wyraźny.

Rozszerzanie się

Ta procedura następuje po splocie z pewnym jądrem o określonym kształcie, takim jak kwadrat lub okrąg. To jądro ma punkt zakotwiczenia, który oznacza jego środek.

To jądro jest nakładane na obraz, aby obliczyć maksymalną wartość piksela. Po obliczeniu obraz zostaje zastąpiony kotwicą pośrodku. Dzięki tej procedurze obszary jasnych obszarów zwiększają się, a tym samym rozmiar obrazu.

Na przykład rozmiar obiektu w odcieniu białym lub jasnym wzrasta, podczas gdy rozmiar obiektu w odcieniu czarnym lub ciemnym maleje.

Możesz wykonać operację dylatacji na obrazie za pomocą dilate() metoda imgprocklasa. Poniżej znajduje się składnia tej metody.

dilate(src, dst, kernel)

Ta metoda akceptuje następujące parametry -

  • src - A Mat obiekt reprezentujący źródło (obraz wejściowy) dla tej operacji.

  • dst - A Mat obiekt reprezentujący miejsce docelowe (obraz wyjściowy) dla tej operacji.

  • kernel - A Mat obiekt reprezentujący jądro.

Przykład

Możesz przygotować macierz jądra za pomocą getStructuringElement()metoda. Ta metoda akceptuje liczbę całkowitą reprezentującąmorph_rect typ i obiekt typu Size.

Imgproc.getStructuringElement(int shape, Size ksize);

Poniższy program demonstruje, jak wykonać operację dylatacji na danym obrazie.

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

Wejście

Załóżmy, że poniżej jest obraz wejściowy sample.jpg określone w powyższym programie.

Wynik

Podczas wykonywania programu otrzymasz następujący wynik -

Image Processed

Jeśli otworzysz określoną ścieżkę, możesz obserwować obraz wyjściowy w następujący sposób -