Учебники

OpenCV — Пирамиды изображений

Пирамида — это операция над изображением, где

  • Входное изображение первоначально сглаживается с использованием определенного сглаживающего фильтра (например, гауссов, лапласиан), а затем сглаженное изображение подвергается субдискретизации.

  • Этот процесс повторяется несколько раз.

Входное изображение первоначально сглаживается с использованием определенного сглаживающего фильтра (например, гауссов, лапласиан), а затем сглаженное изображение подвергается субдискретизации.

Этот процесс повторяется несколько раз.

Во время операции пирамиды гладкость изображения увеличивается, а разрешение (размер) уменьшается.

Пирамида вверх

В «Пирамиде вверх» изображение сначала дискретизируется, а затем размывается. Вы можете выполнить операцию Pyramid Up над изображением, используя метод pyrUP () класса imgproc . Ниже приводится синтаксис этого метода —

pyrUp(src, dst, dstsize, borderType)

Этот метод принимает следующие параметры —

  • src — Объект класса Mat, представляющий исходное (входное) изображение.

  • mat — Объект класса Mat, представляющий целевое (выходное) изображение.

  • размер — объект класса Size, представляющий размер, до которого изображение должно быть увеличено или уменьшено.

  • borderType — переменная целочисленного типа, представляющая тип используемой границы.

src — Объект класса Mat, представляющий исходное (входное) изображение.

mat — Объект класса Mat, представляющий целевое (выходное) изображение.

размер — объект класса Size, представляющий размер, до которого изображение должно быть увеличено или уменьшено.

borderType — переменная целочисленного типа, представляющая тип используемой границы.

пример

Следующая программа демонстрирует, как выполнить операцию «Пирамида вверх» на изображении.

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

Предположим, что следующим является входное изображение pyramid_input.jpg, указанное в вышеуказанной программе.

Ввод пирамиды

Выход

При выполнении программы вы получите следующий вывод:

Image Processed

Если вы откроете указанный путь, вы можете наблюдать выходное изображение следующим образом —

Выход пирамиды вверх

Пирамида вниз

В «Пирамиде вниз» изображение сначала размыто, а затем уменьшено. Вы можете выполнить операцию Pyramid Down над изображением, используя метод pyrDown () класса imgproc . Ниже приводится синтаксис этого метода —

pyrDown(src, dst, dstsize, borderType)

Этот метод принимает следующие параметры —

  • src — Объект класса Mat, представляющий исходное (входное) изображение.

  • mat — Объект класса Mat, представляющий целевое (выходное) изображение.

  • размер — объект класса Size, представляющий размер, до которого изображение должно быть увеличено или уменьшено.

  • borderType — переменная целочисленного типа, представляющая тип используемой границы.

src — Объект класса Mat, представляющий исходное (входное) изображение.

mat — Объект класса Mat, представляющий целевое (выходное) изображение.

размер — объект класса Size, представляющий размер, до которого изображение должно быть увеличено или уменьшено.

borderType — переменная целочисленного типа, представляющая тип используемой границы.

пример

Следующая программа демонстрирует, как выполнить операцию «Пирамида вниз» на изображении.

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

Предположим, что следующим является входное изображение pyramid_input.jpg, указанное в вышеуказанной программе.

Ввод пирамиды

Выход

При выполнении программы вы получите следующий вывод:

Image Processed

Если вы откроете указанный путь, вы можете наблюдать выходное изображение следующим образом —

Выход пирамиды вниз

Фильтрация среднего сдвига

В операции пирамиды «Среднее смещение» выполняется начальный этап сегментации среднего смещения изображения.

Вы можете выполнить пирамидную среднюю фильтрацию сдвига изображения, используя метод pyrDown () класса imgproc . Ниже приводится синтаксис этого метода.

pyrMeanShiftFiltering(src, dst, sp, sr)

Этот метод принимает следующие параметры —

  • src — Объект класса Mat, представляющий исходное (входное) изображение.

  • mat — Объект класса Mat, представляющий целевое (выходное) изображение.

  • sp — переменная типа double, представляющая радиус пространственного окна.

  • sr — переменная типа double, представляющая радиус цветного окна.

src — Объект класса Mat, представляющий исходное (входное) изображение.

mat — Объект класса Mat, представляющий целевое (выходное) изображение.

sp — переменная типа double, представляющая радиус пространственного окна.

sr — переменная типа double, представляющая радиус цветного окна.

пример

Следующая программа демонстрирует, как выполнить операцию фильтрации среднего смещения для данного изображения.

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

Предположим, что следующим является входное изображение pyramid_input.jpg, указанное в вышеуказанной программе.

Ввод пирамиды

Выход

При выполнении программы вы получите следующий вывод:

Image Processed

Если вы откроете указанный путь, вы можете наблюдать выходное изображение следующим образом —