OpenCV-히스토그램 이퀄라이제이션

그만큼 histogram이미지는 픽셀의 강도 값의 빈도를 보여줍니다. 이미지 히스토그램에서 X 축은 그레이 레벨 강도를 나타내고 Y 축은 이러한 강도의 빈도를 나타냅니다.

Histogram equalization강도 범위를 늘리기 위해 이미지의 대비를 향상시킵니다. 다음 방법을 사용하여 주어진 이미지의 히스토그램을 균등화 할 수 있습니다.equalizeHist()Imgproc수업. 다음은이 메서드의 구문입니다.

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 위의 프로그램에서 지정합니다.

산출

프로그램을 실행하면 다음과 같은 출력이 표시됩니다.

Image Processed

지정된 경로를 열면 다음과 같이 출력 이미지를 관찰 할 수 있습니다.