영상의 이진화

nugurii0·2022년 9월 24일
0

다중차로인식

목록 보기
8/11

객체와 배경, 관심 영역(ROI, Region Of Interest)과 그렇지 않은 영역 등 두 부류로 분류하기 위해 이진화를 사용한다.

이진화

임계값을 정하여 임계값보다 작으면 0, 크면 255로 분류하는 방식으로 이진화를 진행할 수 있다.

예를 들어 까만건 글씨 하얀건 종이 라는 말 처럼 실제로는 각각의 픽셀들이 다른 값을 지닐 수는 있어도 결국 필요한 작업은 종이와 글씨를 구별하는 것이기 때문에 임계값을 두고, 종이를 모두 하얀색으로, 글씨를 모두 검은색으로 이진화시킬 수 있다.

임계값은 경험 또는 영상의 특성에 의해 결정된다.

OpenCV threshold()

double threshold(InputArray src, OutputArray dst,
				double thresh, double maxval, int type);

thresh는 임계값, type은 임계값으로 열거형 상수를 통해 지정 가능하다.

예시는 다음과 같다.

Mat src = imread("tset.bmp", IMREAD_GRAYSCALE);
Mat dst;
threshold(src, dst, 128, 255, THRESH_BINARY);

THRESH_BINARY는 이진화를 수행한다는 의미이다.

보통 객체를 흰색, 배경을 검은색으로 취급하는 경우가 많기 때문에 경우에 따라서는 THRESH_BINARY_INV를 사용하기도 한다.

ThresholdTypes 열거형 상수 중 THRESH_OTSU와 THRESH_TRIANGLE는 임계 값을 자동으로 결정할 때 사용한다. 두 값 모두 영상의 픽셀 값 분포를 분석하여 임계값을 자동으로 결정한다.

보통 논리합 연산자를 사용하여 다른 ThresholdTypes와 함께 사용한다.

예시는 다음과 같다.

Mat src = imread("tset.bmp", IMREAD_GRAYSCALE);
Mat dst;
threshold(src, dst, 0, 255, THRESH_BINARY | THRESH_OTSU);

적응형 이진화

앞서 살펴본 threshold()함수는 영상 전체 픽셀에 동일한 임계점으로 이진화를 진행한다.

이를 전역 이진화(global binarization)이라 하는데, 균일하지 않은 조명에서 촬영된 영상에 대해 전역 이진화를 수행하면 객체와 배경을 적절하게 분리하기 어렵다는 문제가 존재한다.

이를 위해 각 픽셀마다 다른 임계값을 적용시키는 적응형 이진화(adaptive binarization) 기법을 사용한다.

모든 픽셀에서 정해진 사각형 블록 영역을 설정하고 블록 내의 픽셀 값 분포를 통해 임계값을 결정하여 이진화를 하는 방식이다.
수식으로 표현하면

T(x,y) = u(x,y) - C

다음과 같다. 블록 내부 평균 u(x,y)는 산술 평균을 사용하여 구하고, 이에 영상에 따라 상수 C를 빼어 x,y좌표에서의 임계값 T(x,y)를 구한다.

OpenCV adaptiveThreshold()

void adaptiveThreshold(InputArray src, OutputArray dst,
					double maxValue, int adaptiveMethod,
					int thresholdType, int blockSize, double C);

adaptiveMethod는 블록 평균 계산 방법으로 ADAPTIVE_THRESH_MEAN_C 또는 ADAPTIVE_THRESH_GAUSSIAN_C를 택하여 사용한다.

blockSize는 임계값 계산 시 사용하는 블록의 크기로 3보다 같거나 큰 홀수이다.

C는 조정을 위한 상수이다.

profile
개발과 보안을 공부하는 학생

0개의 댓글