본문 바로가기

CLASS

[OpenCV] 조명(Lighting)의 영향을 제거하는 방법

영상에 있어서 조명의 영향은 영상처리에 상당히 많은 영향을 끼칩니다. 좋은 조명의 조건이라면 당연히 좋은 퀄러티의 결과물을 얻을 수 있겠지만 조명이 어둡다거나 특히 그라데이션 조명을 받았을 경우 에러를 일으키는 요소가 되기도 합니다. 본 강의에서는 그라데이션 조명을 받은 영상이 있을 때 조명의 영향을 최소화 하자는 것이 목표입니다. Image Code 를 연구하다보니 Image Code 의 예를 들어 설명하였지만 여기에 국한되는 문제가 아니라 다른 분야에도 해당하는 문제입니다. (예: 문자인식)

저의 연구실 정철호 박사과정 선배님께서 연구하신 자료 중에 Preprocessing(전처리)에 촛점을 맞추고 있습니다. 전처리 과정중 평균 3.6% 해당하는 샘플들이 실패하여 Postprocessing 에 가보지도 못하고 열외되는 현상이 발생하는데요.


저는 이 3.6% 라는 실패율을 줄이는데 촛점을 맞추고 있습니다.


실패가 일어나는 원인들을 살펴보면 그라데이션 조명 상태에서 입력받은 이미지들이었는데요.

그라데이션 조명 상태에서는 어떤 방법으로 이진화를 하려고 해도 Image Code 영역부분에 Case 1 과 Case 2 와 같은 문제가 발생하고 있음을 발견할 수 있었습니다. Case 1 의 경우 배경과 연결된 성분이 발생하여 Image Code 영역과 배경을 분리해 내지 못해는 문제가 발생하였고 Case 2 의 경우 배경과 Image Code 를 분리 했으나 Image Code 의 형태가 손상되어 추출해내지 못하는 문제가 발생하였습니다.


어떻게 이 문제를 해결 할 수 있을지에 대해서 고민하고 위와 같은 가설을 세워보았습니다. 원본 영상으로부터 조명 채널을 분리해낸다면 역 조명을 쏘아주어서 좋은 퀄리티의 영상을 얻을 수 있지 않을까 하는 가설을 세웠습니다.


Color Space 모델에는 다양한 모델이 있는데 그중 LAB 모델은 Lightness 를 가장 잘 분리해 낼수 있어 LAB 모델을 사용하였습니다. (검증 혹은 Ref. 자료가 부족한 부분이기도 합니다.)


LAB Color space는 1976년 CIE에 의해서 정의, uniform color space 중의 하나이다.
Lab의 각 값은 다음과 같이 계산되고 그 의미는, L:밝기
a : +이면 RED 색상의 정도를, -이면 GREEN의 색
b: +이면 YELLOW의 색상정도를 B :-이면 BLUE의 생상정도를 나타낸다

Lab Color : 이미지의밝기와색상정보를이용하여컬러를표시, L(Lightness : 밝기), a(Red 와Green의컬러정보), b(Blue와Yellow 의컬러정보)를포함하고있음.

RGB 모델을 LAB 로 변환하는 공식은 위와 같습니다.


이렇게 Lightness 채널을 분리해 냄으로서 좌측 상단과 같은 이미지를 얻을 수 있습니다.
여기에서 조명의 상태를 얻어내기 위해 Median Filter 과정을 거치게 되는데 위 슬라이드는 Radius 값을 변화시켜가며 처리해본 결과입니다. Radius 값을 100으로 하면 실제와 가장 근사한 조명상태를 얻어낼 수 있음을 볼 수 있습니다. 실질적으로는 20 이상 ~ 50 이하여도 충분한 결과를 보여줍니다.

전체 프로세스를 다이어그램으로 다시 정리하자면 원본 영상을 입력 받아 Light Removal 과정을 수행합니다. Light Removal 과정에는 RGB 모델을 LAB 모델로 변환을 하여 Lightness 채널을 분리해 내고 Median Filter 과정을 거쳐 조명의 상태를 알아낸 다음 반전 시켜 역조명 채널을 만들어 냅니다. 이를 원본 영상에 합성하여 Clear 한 Image 를 만들어 내는 것입니다.


맨 좌측에서 보시는 바와 같이 그라데이션 조명 상태에서 찍은 원본 Image Code 입니다. Preprocessing 과정에서 실패가 일어나는 가장 대표적인 사례의 장본인이라고 볼수 있는데 어떠한 알고리즘으로 Threshold 값을 주더라도 Case 1, Case 2 와 같은 경우(붉은색 사격형 표시 부분)가 발생하여 Image Code 를 얻어 낼 수 없습니다. Local Threshold(Block Binarization) 를 하더라도 Image Code 내부에 생기는 노이즈, 배경에 생기는 노이즈 등 비슷한 문제가 발생합니다.

다음은 Light Removal 과정입니다. RGB 모델을 LAB 모델로 변환하여 Lightness 채널을 분리해 냅니다. Median Filter 을 적용하여 Gradation 조명의 정보를 얻어내고 이를 반전하여 반전된 조명을 얻어냅니다.

이를 원본 영상과 Composition 하여 맨 우측과 같은 이미지를 만들어 냅니다. 여기에 Thresholding 을 하면 맨 좌측과 같은 Clear 한 이진화 영상을 얻게 됩니다.

다시한번 정리 하자면, 맨 좌측에는 그라데이션 조명이 먹은 상태의 원본 이미지들입니다.

그 다음 중간에는 각각 좌측의 원본 이미지들을 이진화 한 것인데 어떤 임계값을 사용하더라도 붉은색 사격형 부분과 같은 Case 1, Case 2 중 하나 이상의 문제가 발생하여 실패하게 됩니다. 맨 우측에는 지금까지 제안한 조명 제거법으로 조명을 제거한후 Histogram 의 최대-최소 평균으로 Global Thresholding 를 한 이진화 이미지 입니다. Image Code 영역이 정확하게 추출되었음을 볼 수 있습니다.