Opencv-histogram-equalization

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

OpenCV-ヒストグラム均等化

画像の「ヒストグラム」は、ピクセルの強度値の頻度を示します。 画像ヒストグラムでは、X軸はグレーレベルの強度を示し、Y軸はこれらの強度の頻度を示します。

ヒストグラムの均等化*は、強度範囲を広げるために、画像のコントラストを改善します。 *Imgproc クラスの* equalizeHist()*メソッドを使用して、特定の画像のヒストグラムを均等化できます。 このメソッドの構文は次のとおりです。

equalizeHist(src, dst)

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

  • src -ソース(入力)画像を表すクラス Mat のオブジェクト。
  • dst -出力を表すクラス Mat のオブジェクト。 (ヒストグラムを等化した後に得られた画像)

次のプログラムは、特定の画像のヒストグラムを均等化する方法を示しています。

import java.util.ArrayList;
import java.util.List;

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 HistoTest {
   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/chap20/histo_input.jpg";

     //Load the image
      Mat img = Imgcodecs.imread(file);

     //Creating an empty matrix
      Mat equ = new Mat();
      img.copyTo(equ);

     //Applying blur
      Imgproc.blur(equ, equ, new Size(3, 3));

     //Applying color
      Imgproc.cvtColor(equ, equ, Imgproc.COLOR_BGR2YCrCb);
      List<Mat> channels = new ArrayList<Mat>();

     //Splitting the channels
      Core.split(equ, channels);

     //Equalizing the histogram of the image
      Imgproc.equalizeHist(channels.get(0), channels.get(0));
      Core.merge(channels, equ);
      Imgproc.cvtColor(equ, equ, Imgproc.COLOR_YCrCb2BGR);

      Mat gray = new Mat();
      Imgproc.cvtColor(equ, gray, Imgproc.COLOR_BGR2GRAY);
      Mat grayOrig = new Mat();
      Imgproc.cvtColor(img, grayOrig, Imgproc.COLOR_BGR2GRAY);

      Imgcodecs.imwrite("E:/OpenCV/chap20/histo_output.jpg", equ);
      System.out.println("Image Processed");
   }
}

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

Histo Input

出力

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

Image Processed

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

Histo Output