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
지정된 경로를 열면 다음과 같이 출력 이미지를 관찰 할 수 있습니다.