OpenCV - piramidy obrazu

Piramida to operacja na obrazie, w której

  • Obraz wejściowy jest początkowo wygładzany przy użyciu określonego filtra wygładzającego (np. Gaussa, Laplaca), a następnie wygładzany obraz jest poddawany próbkowaniu.

  • Ten proces powtarza się wielokrotnie.

Podczas działania piramidy zwiększa się gładkość obrazu i zmniejsza rozdzielczość (rozmiar).

Pyramid Up

W Pyramid Up obraz jest wstępnie próbkowany, a następnie rozmyty. Możesz wykonać operację Pyramid Up na obrazie za pomocąpyrUP() metoda imgprocklasa. Poniżej znajduje się składnia tej metody -

pyrUp(src, dst, dstsize, borderType)

Ta metoda akceptuje następujące parametry -

  • src - Przedmiot z klasy Mat reprezentujący obraz źródłowy (wejściowy).

  • mat - Przedmiot z klasy Mat reprezentujący obraz docelowy (wyjściowy).

  • size - Przedmiot z klasy Size reprezentujący rozmiar, do którego obraz ma zostać powiększony lub zmniejszony.

  • borderType - zmienna typu całkowitego reprezentująca typ obramowania, który ma być użyty.

Przykład

Poniższy program demonstruje, jak wykonać operację Pyramid Up na 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 PyramidUp {
   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 ="E:/OpenCV/chap13/pyramid_input.jpg";
      Mat src = Imgcodecs.imread(file);

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

      // Applying pyrUp on the Image
      Imgproc.pyrUp(src, dst, new Size(src.cols()*2,  src.rows()*2), Core.BORDER_DEFAULT);

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

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

Załóżmy, że poniżej jest obraz wejściowy pyramid_input.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 -

Piramida w dół

W Pyramid Down obraz jest początkowo rozmyty, a następnie próbkowany w dół. Możesz wykonać operację Pyramid Down na obrazie przy użyciupyrDown() metoda imgprocklasa. Poniżej znajduje się składnia tej metody -

pyrDown(src, dst, dstsize, borderType)

Ta metoda akceptuje następujące parametry -

  • src - Przedmiot z klasy Mat reprezentujący obraz źródłowy (wejściowy).

  • mat - Przedmiot z klasy Mat reprezentujący obraz docelowy (wyjściowy).

  • size - Przedmiot z klasy Size reprezentujący rozmiar, do którego obraz ma zostać powiększony lub zmniejszony.

  • borderType - zmienna typu całkowitego reprezentująca typ obramowania, który ma być użyty.

Przykład

Poniższy program demonstruje, jak wykonać operację Pyramid Down na 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 PyramidDown {
   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 ="E:/OpenCV/chap13/pyramid_input.jpg";
      Mat src = Imgcodecs.imread(file);

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

      // Applying pyrDown on the Image
      Imgproc.pyrDown(src, dst, new Size(src.cols()/2,  src.rows()/2),
         Core.BORDER_DEFAULT);

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

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

Załóżmy, że poniżej jest obraz wejściowy pyramid_input.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 -

Filtrowanie z przesunięciem średnim

W operacji piramidy z przesunięciem średnim wykonywany jest początkowy etap segmentacji obrazu z przesunięciem średnim.

Operację filtrowania piramidowego z przesunięciem średnim można wykonać na obrazie przy użyciu funkcji pyrDown() metoda imgprocklasa. Poniżej znajduje się składnia tej metody.

pyrMeanShiftFiltering(src, dst, sp, sr)

Ta metoda akceptuje następujące parametry -

  • src - Przedmiot z klasy Mat reprezentujący obraz źródłowy (wejściowy).

  • mat - Przedmiot z klasy Mat reprezentujący obraz docelowy (wyjściowy).

  • sp - zmienna typu double reprezentująca przestrzenny promień okna.

  • sr - Zmienna typu double reprezentująca promień okna koloru.

Przykład

Poniższy program demonstruje, jak wykonać operację filtrowania z przesunięciem średnim na danym obrazie.

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

public class PyramidMeanShift {
   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 ="E:/OpenCV/chap13/pyramid_input.jpg";
      Mat src = Imgcodecs.imread(file);

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

      // Applying meanShifting on the Image
      Imgproc.pyrMeanShiftFiltering(src, dst, 200, 300);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap13/meanShift_output.jpg", dst);
      
      System.out.println("Image Processed");
   } 
}

Załóżmy, że poniżej jest obraz wejściowy pyramid_input.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 -