Opencv-image-pyramids

提供:Dev Guides
移動先:案内検索

OpenCV-画像ピラミッド

ピラミッドは、画像に対する操作です。ここで、

  • 入力画像は、最初に特定の平滑化フィルター(例:ガウス、ラプラシアン)を使用して平滑化され、その後平滑化された画像がサブサンプリングされます。 *このプロセスは複数回繰り返されます。

ピラミッド操作中、画像の滑らかさが増し、解像度(サイズ)が低下します。

ピラミッドアップ

Pyramid Upでは、画像は最初にアップサンプリングされ、その後ぼやけます。* imgproc クラスの pyrUP()*メソッドを使用して、画像に対してピラミッドアップ操作を実行できます。 以下は、このメソッドの構文です-

pyrUp(src, dst, dstsize, borderType)

このメソッドは、次のパラメータを受け入れます-

  • src -ソース(入力)画像を表すクラス Mat のオブジェクト。
  • mat -宛先(出力)イメージを表すクラス Mat のオブジェクト。
  • サイズ-画像を拡大または縮小するサイズを表す*サイズ*クラスのオブジェクト。
  • 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

指定したパスを開くと、次のように出力画像を観察できます-

ピラミッドアップ出力

ピラミッドダウン

ピラミッドダウンでは、画像は最初にぼやけてからダウンサンプリングされます。 imgproc クラスの* pyrDown()*メソッドを使用して、画像に対してピラミッドダウン操作を実行できます。 以下は、このメソッドの構文です-

pyrDown(src, dst, dstsize, borderType)

このメソッドは、次のパラメータを受け入れます-

  • src -ソース(入力)画像を表すクラス Mat のオブジェクト。
  • mat -宛先(出力)イメージを表すクラス Mat のオブジェクト。
  • サイズ-画像を拡大または縮小するサイズを表す*サイズ*クラスのオブジェクト。
  • 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

指定したパスを開くと、次のように出力画像を観察できます-

ピラミッドダウン出力

平均シフトフィルタリング

平均シフトピラミッド操作では、画像の平均シフトセグメンテーションの最初のステップが実行されます。

*imgproc* クラスの* pyrDown()*メソッドを使用して、画像に対してピラミッド平均シフトフィルター操作を実行できます。 このメソッドの構文は次のとおりです。
pyrMeanShiftFiltering(src, dst, sp, sr)

このメソッドは、次のパラメータを受け入れます-

  • 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

指定したパスを開くと、次のように出力画像を観察できます-

平均シフトフィルタリング出力