Opencv-dilation

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

OpenCV-拡張

侵食と膨張は、2種類の形態学的操作です。 名前が示すように、形態学的操作は、形状に従って画像を処理する操作のセットです。

与えられた入力画像に基づいて、「構造要素」が開発されます。 これは、2つの手順のいずれでも実行できます。 これらは、ノイズを除去して欠陥を解決し、画像を鮮明にすることを目的としています。

膨張

この手順は、正方形や円などの特定の形状のカーネルによる畳み込みに従います。 このカーネルには、その中心を示すアンカーポイントがあります。

このカーネルは、最大ピクセル値を計算するために画像に重ねられます。 計算後、画像は中央のアンカーに置き換えられます。 この手順を使用すると、明るい領域の領域のサイズが大きくなるため、画像サイズが大きくなります。

たとえば、白い色合いまたは明るい色合いのオブジェクトのサイズは増加し、黒い色合いまたは暗い色合いのオブジェクトのサイズは減少します。

*imgproc* クラスの* dilate()*メソッドを使用して、画像に対して膨張操作を実行できます。 このメソッドの構文は次のとおりです。
dilate(src, dst, kernel)

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

  • src -この操作のソース(入力画像)を表す Mat オブジェクト。
  • dst -この操作の宛先(出力イメージ)を表す Mat オブジェクト。
  • kernel -カーネルを表す Mat オブジェクト。

  • getStructuringElement()メソッドを使用して、カーネルマトリックスを準備できます。 このメソッドは、 *morph_rect タイプと Size タイプのオブジェクトを表す整数を受け入れます。
Imgproc.getStructuringElement(int shape, Size ksize);

次のプログラムは、特定の画像に対して膨張操作を実行する方法を示しています。

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

入力

上記のプログラムで指定された入力画像 sample.jpg が次のものであると仮定します。

サンプル画像

出力

プログラムを実行すると、次の出力が得られます-

Image Processed

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

膨張